CentOS 7 NFS 服务搭建

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。

1
yum install 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 /home
mkdir share
chown 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服务

1
yum install nfs-utils

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 # 已经挂载了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 

#
# /etc/fstab
# Created by anaconda on Fri Aug 19 11:48:24 2022
#
# Accessible filesystems, by reference, are maintained under '/dev/disk'
# See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info
#
/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
yum install 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 # 自动挂载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 # nfs目录中共享的测试目录
[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

至此NFS服务搭建,挂载,自动挂载相关的配置已经结束,文档参考suse 使用 Autofs 按需装入
NFS服务配置,也参考自Configure NFS Server


CentOS 7 NFS 服务搭建
https://ywmy.xyz/2022/09/19/CentOS-7-NFS-服务搭建/
作者
ian
发布于
2022年9月19日
许可协议