美文网首页
NFS网络文件系统

NFS网络文件系统

作者: jan29 | 来源:发表于2020-01-30 21:08 被阅读0次

一、什么是NFS

NFS是Network File System的缩写及网络文件系统。NFS的主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
通常中小企业首选NFS作为集群架构的存储,但如果是大型网站, 会用到复杂的分布式文件系统,如FastDFS,glusterfs等等

二、NFS相关协议及软件

协议
  • nfs:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器
  • rpcbind:主要功能是进行端口映射工作。当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,rpcbind会将所管理的与服务器对应的端口提供给客户端,从而使客户端可以通过该端口向服务器请求服务。
软件
  • nfs-utils*:包括NFS命令与监控服务
  • rpcbind*:支持安全NFS RPC服务的连接

三、NFS挂载原理

nfs.jpg
  1. 服务器端nfs向rpc注册随机端口,并暴露rpc自己的111端口
  2. 客户端通过rpc的111端口来获取服务器端nfs端口
  3. 客户端通过服务器nfs端口来建立连接
  4. 客户端建立本地挂载点,nfs服务器将共享目录映射在本地客户端

四、NFS服务器配置

  • NFS服务器的配置相对简单,只需要在相应的配置文件中进行设置,然后启动NFS服务器即可。
  • NFS服务器的配置文件为/etc/exports,这个文件使NFS的主要配置文件,不过系统并没有默认值,所以这个文件不一定会存在,可能要手动建立,然后在文件中写入配置文件。
  • /etc/exports 文件格式:
    共享目录 客户端1(访问权限用户映射其他) 客户端2(访问权限,用户映射,其他)

访问权限选项:
设置输出目录只读:ro
设置输出目录读写:rw

用户映射选项:
root_squash:将root用户的访问映射为匿名(nfsnobody)用户uid和gid;(默认生效)
no_root_squash:保留管理员权限,以服务器管理员的权限管理;
all_squash:将访问用户及访问组都映射为指定uid,gid的匿名用户;
anonuid=xxx
anongid=xxx

其他选项:
sync:将数据同步写入内存缓存区与磁盘中,效率低,但可以保证数据的一致性(同步);
async:将数据先保存在内存缓冲区中,必要时才写入磁盘(异步);

五、NFS实验

实验环境
server 192.168.200.101
client 192.168.200.103

  1. 安装软件包
[root@server ~]# yum -y install nfs-utils* rpcbind*
  1. 服务器端启动nfs和rpcbind
[root@server ~]# systemctl start rpcbind && systemctl enable rpcbind
Created symlink from /etc/systemd/system/multi-user.target.wants/rpcbind.service to /usr/lib/systemd/system/rpcbind.service.
[root@server ~]# systemctl start nfs && systemctl enable nfs
Created symlink from /etc/systemd/system/multi-user.target.wants/nfs-server.service to /usr/lib/systemd/system/nfs-server.service.
[root@server ~]# rpcinfo -p localhost                               
   program vers proto   port  service
    100000    4   tcp    111  portmapper
    100000    3   tcp    111  portmapper
    100000    2   tcp    111  portmapper
    100000    4   udp    111  portmapper
    100000    3   udp    111  portmapper
    100000    2   udp    111  portmapper
    100005    1   udp  20048  mountd
    100005    1   tcp  20048  mountd
    100024    1   udp  58264  status
    100024    1   tcp  51366  status
    100005    2   udp  20048  mountd
    100005    2   tcp  20048  mountd
    100005    3   udp  20048  mountd
    100005    3   tcp  20048  mountd
    100003    3   tcp   2049  nfs
    100003    4   tcp   2049  nfs
    100227    3   tcp   2049  nfs_acl
    100003    3   udp   2049  nfs
    100003    4   udp   2049  nfs
    100227    3   udp   2049  nfs_acl
    100021    1   udp  60204  nlockmgr
    100021    3   udp  60204  nlockmgr
    100021    4   udp  60204  nlockmgr
    100021    1   tcp  53436  nlockmgr
    100021    3   tcp  53436  nlockmgr
    100021    4   tcp  53436  nlockmgr

rpcbind先于nfs启动,nfs先rpc进行端口注册,rpc不会主动向nfs询问端口信息
rpcinfo -p localhost 检查向rpcbind注册的服务端口

  1. 服务器端准备共享目录
[root@server ~]# mkdir /data
[root@server ~]# chmod o+w /data/
[root@server ~]# mount /dev/sde5 /data

为了不让系统被写满,将一个分区挂载在/data/目录上,作为数据卷

  1. 编写nfs服务器端配置文件/etc/exports
[root@server ~]# vi /etc/exports
/data/ 192.168.200.103(rw,root_squash,sync)
[root@server ~]# systemctl reload nfs
[root@server ~]# exportfs              
/data           192.168.200.103
[root@server ~]# showmount -e 192.168.200.101
Export list for 192.168.200.101:
/data 192.168.200.103
[root@client ~]# showmount -e 192.168.200.101
Export list for 192.168.200.101:
/data 192.168.200.103

将data目录作为共享目录,rw权限,nfsnobody权限,同步读写
服务器端,客户端检查nfs共享状态

  1. 客户端挂载
[root@client ~]# mkdir /test
[root@client ~]# mount -o vers=3 192.168.200.101:/data /test
[root@client ~]# df -Th
Filesystem            Type      Size  Used Avail Use% Mounted on
/dev/sda3             xfs        18G  4.7G   14G  27% /
devtmpfs              devtmpfs  899M     0  899M   0% /dev
tmpfs                 tmpfs     913M   84K  913M   1% /dev/shm
tmpfs                 tmpfs     913M  9.0M  904M   1% /run
tmpfs                 tmpfs     913M     0  913M   0% /sys/fs/cgroup
/dev/sda1             xfs       297M  144M  154M  49% /boot
tmpfs                 tmpfs     183M   16K  183M   1% /run/user/42
tmpfs                 tmpfs     183M     0  183M   0% /run/user/0
192.168.200.101:/data nfs        20G   44M   19G   1% /test

使用nfs V3版本挂载,避免同步延迟

  1. 检测连通性
[root@client test]# echo test > try.text
[root@server data]# cat try.text 
test

六、用户映射详解

root_squash:

将root用户的访问映射为匿名(nfsnobody)用户uid和gid;(默认生效)

[root@server ~]# vi /etc/exports
/data/ 192.168.200.103(rw,root_squash,sync)
[root@server ~]# systemctl reload nfs
[root@client test]# echo test > try.text
[root@client test]# ll
-rw-r--r-- 1 nfsnobody nfsnobody 5 Jan 31 11:14 try.text
[root@server data]# ll
-rw-r--r-- 1 nfsnobody nfsnobody 5 Jan 31 11:14 try.text
no_root_squash:

保留管理员权限,以服务器管理员的权限管理;

[root@server ~]# vi /etc/exports
/data/ 192.168.200.103(rw,no_root_squash,sync)
[root@server ~]# systemctl reload nfs
[root@client test]# echo test > try1.text
[root@client test]# ll
-rw-r--r-- 1 root      root      5 Jan 31 11:20 try1.text
-rw-r--r-- 1 nfsnobody nfsnobody 5 Jan 31 11:14 try.text
[root@server data]# ll
-rw-r--r-- 1 root      root      5 Jan 31 11:20 try1.text
-rw-r--r-- 1 nfsnobody nfsnobody 5 Jan 31 11:14 try.text
all_squash:

将访问用户及访问组都映射为指定uid,gid的匿名用户;
anonuid=xxx
anongid=xxx

[root@client ~]# groupadd -g 2222 test_all_squash
[root@client ~]# useradd -u 2222 -g 2222 test_all_squash
[root@client ~]# id test_all_squash
uid=2222(test_all_squash) gid=2222(test_all_squash) groups=2222(test_all_squash)
[root@server ~]# vi /etc/exports
/data/ 192.168.200.103(rw,all_squash,anonuid=2222,anongid=2222,sync)
[root@server ~]# systemctl reload nfs
[root@client test]# echo test > try2.text
[root@client test]# ll
-rw-r--r-- 1 root            root            5 Jan 31 11:20 try1.text
-rw-r--r-- 1 test_all_squash test_all_squash 5 Jan 31 11:41 try2.text
-rw-r--r-- 1 nfsnobody       nfsnobody       5 Jan 31 11:14 try.text
[root@server data]# ll
-rw-r--r-- 1 root      root      5 Jan 31 11:20 try1.text
-rw-r--r-- 1      2222      2222 5 Jan 31 11:41 try2.text
-rw-r--r-- 1 nfsnobody nfsnobody 5 Jan 31 11:14 try.text

七、相关命令(服务器端)

exportfs命令
格式:exportfs 【-aruv】
-a 全部挂载卸载
-r 重新挂载,卸载
-u 卸载单一目录
-v 输出详细信息
exportfs -au 卸载
exportfs -ra重新挂载
rpcinfo命令
rpcinfo -p 查看rpc开启的端口所提供的程序

相关文章

网友评论

      本文标题:NFS网络文件系统

      本文链接:https://www.haomeiwen.com/subject/hzoithtx.html