CentOS 7 NFS 服务搭建 NFS是Network File System的缩写,即网络文件系统。客户端通过挂载的方式将NFS服务器端共享的数据目录挂载到本地目录下。
在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
NFS工作原理 1、首先NFS服务器端开启rpcbind; 2、然后服务端开启NFS服务,这时NFS的各项功能都需要向PRC服务注册,这RPC会通知portmap模块将可用的端口分配给statd, rquotad进程等; 3、然后NFS客户端RPC服务就会通过网络向NFS服务端的RPC服务的111端口发送NFS文件存取功能的询问请求; 4、NFS服务端的RPC服务找到对应的已注册的NFS daemon端口后,通知NFS客户端的PRC服务; 5、此时NFS客户端就可以获取到nfs服务端各个进程的正确端口,然后通过客户端的rpc就直接与NFS服务器的rpc进行存取数据了(rpc知道了nfs的具体端口,就可以实现远程调用,即传输)
有一点需要注意的是nfs并不是单独存在的,而是由NFS-Servr,RPC,PORTMAP这三个模拟组成的。NFS-server只负责将数据通过以文质系统的方式共享出去,并进行登录管理和权限管理,并不负责数据的传输,而数据的传输则由RPC来完成。 PORTMAP主要是用来分配端口给statd,rquotad等进程的,NFS服务除了启动nfsd本身监控的端口2049/tcp和2049/udp,还会启动以上进程来完成文件共享。
NFS安装部署 安装NFS服务 服务器端和客户端同时安装nfs-utils。
启动NFS相关服务 1 2 3 4 systemctl start rpcbind systemctl start nfs systemctl enable rpcbind systemctl enable nfs
查看rpc注册端口信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 [root@haproxy-node-a ~]# 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 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 49132 nlockmgr 100021 3 udp 49132 nlockmgr 100021 4 udp 49132 nlockmgr 100021 1 tcp 40709 nlockmgr 100021 3 tcp 40709 nlockmgr 100021 4 tcp 40709 nlockmgr
创建挂载的目录 例如在home目录下创建share作为内网挂载的目录,可以按下面操作。
1 2 3 cd /homemkdir sharechown nfsnobody.nfsnobody ./share
将挂载信息写入配置文件:
1 2 [root@haproxy-node-a ~]# cat /etc/exports /home/share 192.168.10.0/24(rw,sync )
export 文件配置格式参考上面配置,NFS共享目录+NFS客户端1(参数1,参数2…)+NFS客户端2(参数1,参数2…)+…
NFS共享目录要用绝对目录,可以被nfsnobody读写。
NFS客户端地址:
指定IP:192.168.0.1 指定子网所有主机:192.168.0.0/24 指定域名的主机:abc.com 指定域名的所有主机:*.abc.com 所有主机:*
参数:
ro:目录只读
rw:目录读写
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性
async:将数据先保存在内存缓冲区,必要时才写入磁盘
all_squash:将远程访问的所有普通用户及所属组映射为匿名用户或用户组(nfsnobody)
no_all_squash:与all_squash取反(默认设置)
root_squash:将root用户及所属的组都映射为匿名用户组(默认设置)
no_root_squash:与root_squash取反
anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=XXX)
anongid=xxx:将远程访问的所有用户都映射为匿名用户组账户
重新加载nfs配置:
1 2 [root@haproxy-node-a ~]# exportfs -rv exporting 192.168.10.0/24:/home/share
防火墙配置 防火墙上需要放通nfs,rpc-bind,mountd三个服务。
1 2 3 4 firewall-cmd --permanent --add-service=nfs firewall-cmd --permanent --add-service=rpc-bind firewall-cmd --permanent --add-service=mountd firewall-cmd --complete-reload
查看服务器本机的挂情况:
1 2 3 [root@haproxy-node-a ~]# showmount -e localhost Export list for localhost: /home/share 192.168.10.0/24
挂载测试 在客户端上创建目录,并挂NFS共享目录,比如在home目录下创建nfs目录,用于挂载服务器上的nfs共享。
1、客户端上安装nfs服务
2、客户端上测试nfs挂载
1 2 3 [root@haproxy-node-b ~]# showmount -e 192.168.10.81 Export list for 192.168.10.81: /home/share 192.168.10.0/24
3、创建目录并挂载NFS
1 2 3 cd /home mkdri nfs mount -t nfs 192.168.10.81:/home/share /home/nfs
4、查看挂载后的目录
1 2 3 4 5 6 7 8 9 10 [root@haproxy-node-b ~]# df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 874M 0 874M 0% /dev tmpfs tmpfs 886M 180K 885M 1% /dev/shm tmpfs tmpfs 886M 17M 869M 2% /run tmpfs tmpfs 886M 0 886M 0% /sys/fs/cgroup /dev/mapper/centos-root xfs 47G 2.1G 45G 5% / /dev/vda1 xfs 1014M 186M 829M 19% /boot 192.168.10.81:/home/share nfs4 80G 34M 80G 1% /home/nfs tmpfs tmpfs 382M 0 382M 0% /run/user/0
5、挂载持久化
需要将挂载信息写入fstab,挂久生效,否则挂的目录,会在重启后失效。
1 2 3 4 5 6 7 8 9 10 11 12 13 [root@haproxy-node-b ~]# cat /etc/fstab /dev/mapper/centos-root / xfs defaults 0 0 UUID=d8d7facd-702b-4b24-889e-ab62a41dc5e9 /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 192.168.10.81:/home/share /home/nfs nfs defaults 0 0
完成挂后,服务器上的nfs即同本地硬盘一样,对nfs文件系统的操作权限,参考nfs配置中的各个参数说明。
动态挂截nfs目录
autofs 是一个可根据需要自动装入指定目录的程序。它基于一个内核模块运行以实现高效率,并且可以同时管理本地目录和网络共享。这些自动安装点仅会在被访问时装入,一定时间内不活动后即会被卸载。这种按需行为可节省带宽,并实现比 /etc/fstab 管理的静态装入更高的性能。虽然 autofs 是控制脚本,但 automount 才是实际执行自动装入的命令(守护程序)。
Autofs与Mount/Umount的不同之处在于,它是一种看守程序。如果它检测到用户正试图访问一个尚未挂接的文件系统,它就会自动检测该文件系统,如果存在,那么Autofs会自动将其挂接。另一方面, 如果它检测到某个已挂接的文件系统在一段时间内没有被使用,那么Autofs会自动将其卸载。因此一旦运行了Autofs后,用户就不再需要手动完成文件系统的挂接和卸载。
安装autofs 在需要动态挂载的客户端上安装autofs。
配置自动挂载 1、编辑autofa映射文件
1 2 3 4 vim /etc/auto.master /home /etc/auto.nfs --timeout =10
挂载目录为/home下,NFS共享在/etc/auto.nfs映射中指定,共享在10秒不流动后自动卸载。
2、为NFS创建映射文件
1 2 3 4 vim /etc/auto.nfs [root@node71 etc]# cat /etc/auto.nfs nfs 192.168.10.81:/home/share
如果之前有在fstab中添加了挂截信息,需要将/etc/fstab中相关配置注释掉。
4、重新挂载autofs并检查是否正常
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 [root@node71 etc]# systemctl restart autofs [root@node71 etc]# systemctl status autofs ● autofs.service - Automounts filesystems on demand Loaded: loaded (/usr/lib/systemd/system/autofs.service; disabled; vendor preset: disabled) Active: active (running) since Thu 2022-09-22 13:35:39 CST; 4s ago Main PID: 8468 (automount) CGroup: /system.slice/autofs.service └─8468 /usr/sbin/automount --systemd-service --dont-check-daemon Sep 22 13:35:39 node71 systemd[1]: Starting Automounts filesystems on demand... Sep 22 13:35:39 node71 systemd[1]: Started Automounts filesystems on demand. [root@node71 home]# ls -l /home/nfs total 0 drwxr-xr-x 2 nfsnobody nfsnobody 22 Sep 19 12:11 test [root@node71 home]# df -hT Filesystem Type Size Used Avail Use% Mounted on devtmpfs devtmpfs 3.9G 0 3.9G 0% /dev tmpfs tmpfs 3.9G 440K 3.9G 1% /dev/shm tmpfs tmpfs 3.9G 17M 3.9G 1% /run tmpfs tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup /dev/mapper/centos-root xfs 48G 2.6G 46G 6% / /dev/vda1 xfs 1014M 217M 798M 22% /boot tmpfs tmpfs 782M 0 782M 0% /run/user/0 [root@node71 home]# ls -al total 0 drwxr-xr-x 2 root root 0 Sep 22 13:41 . dr-xr-xr-x. 19 root root 247 Sep 22 13:40 .. [root@node71 home]# cd nfs [root@node71 nfs]# ls -al total 0 drwxr-xr-x 3 nfsnobody nfsnobody 18 Sep 19 12:10 . drwxr-xr-x 3 root root 0 Sep 22 13:43 .. drwxr-xr-x 2 nfsnobody nfsnobody 22 Sep 19 12:11 test [root@node71 nfs]# pwd /home/nfs [root@node71 nfs]#
挂载信息验证:
1 2 [root@node71 nfs]# grep /home/ /proc/mounts 192.168.10.81:/home/share /home/nfs nfs4 rw,relatime,vers=4.1,rsize=524288,wsize=524288,namlen=255,hard,proto=tcp,timeo=600,retrans=2,sec=sys,clientaddr=192.168.10.71,local_lock=none,addr=192.168.10.81 0 0