1. 环境准备
[root@nfs01 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@nfs01 ~]# uname -r
3.10.0-957.el7.x86_64
[root@nfs01 ~]# uname -m
x86_64
NFS客户端操作系统及内核版本信息和NFS服务器端一致。
2. NFS服务器端的安装启动
2.1 NFS软件列表
要部署NFS服务,需要安装以下软件包。
- nfs-utils:NFS服务的主程序,包括rpc.nfsd、rpc.mountd这两个daemons和相关文档说明,以及执行命令文件等。
- rpcbind:CentOS6/7环境下RPC主程序。NFS可视为一个RPC程序,在启动任何一个RPC程序之前,需要做好端口和功能的映射工作,这个映射工作就是由rpcbind服务来完成的。因此,在提供NFS服务之前必须先启动rpcbind服务才行。
2.2 安装NFS软件包
[root@nfs01 ~]# rpm -qa nfs-utils rpcbind ---默认没安装,所以没显示结果
[root@nfs01 ~]# yum install -y nfs-utils rpcbind
[root@nfs01 ~]# rpm -qa nfs-utils rpcbind
rpcbind-0.2.0-48.el7.x86_64
nfs-utils-1.3.0-0.65.el7.x86_64
2.3 启动NFS相关服务
2.3.1 启动rpcbind服务
因为NFS及其辅助程序都是基于RPC协议的(使用的端口为111),所以首先要确保系统中运行了rpcbind服务。启动的实际操作如下:
[root@nfs01 ~]# systemctl status rpcbind ---检查rpcbind服务状态
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
Active: inactive (dead) ---停服状态
[root@nfs01 ~]# systemctl start rpcbind ---开启rpcbind服务
[root@nfs01 ~]# systemctl status rpcbind
● rpcbind.service - RPC bind service
Loaded: loaded (/usr/lib/systemd/system/rpcbind.service; enabled; vendor preset: enabled)
Active: active (running) since 一 2020-03-02 23:15:54 CST; 1min 10s ago
Process: 7125 ExecStart=/sbin/rpcbind -w $RPCBIND_ARGS (code=exited, status=0/SUCCESS)
Main PID: 7126 (rpcbind)
CGroup: /system.slice/rpcbind.service
└─7126 /sbin/rpcbind -w
3月 02 23:15:54 nfs01 systemd[1]: Starting RPC bind service...
3月 02 23:15:54 nfs01 systemd[1]: Started RPC bind service.
[root@nfs01 ~]# systemctl enable rpcbind ---设置开机自启动
[root@nfs01 ~]# netstat -lntup|egrep "rpcbind|111" ---查看启动端口和进程情况
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp6 0 0 :::111 :::* LISTEN 1/systemd
udp 0 0 0.0.0.0:941 0.0.0.0:* 7126/rpcbind
udp 0 0 0.0.0.0:111 0.0.0.0:* 1/systemd
udp6 0 0 :::941 :::* 7126/rpcbind
udp6 0 0 :::111 :::* 1/systemd
[root@nfs01 ~]# rpcinfo -p localhost ---查看NFS服务向RPC服务注册的端口信息,因为NFS服务还没启用,因此,没太多注册的端口映射信息。
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
值得注意的是,CentOS7.6环境下停止了rpcbind服务,服务依然继续,并没有真的停止。
[root@nfs01 ~]# systemctl stop rpcbind
Warning: Stopping rpcbind.service, but it can still be activated by:
rpcbind.socket ---提示说rpcbind还是活的状态,由rpcbind.socket支持的
[root@nfs01 ~]# 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
[root@nfs01 ~]# netstat -lntup|egrep "rpcbind|111" ---依然有进程和端口
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/systemd
tcp6 0 0 :::111 :::* LISTEN 1/systemd
udp 0 0 0.0.0.0:1000 0.0.0.0:* 7185/rpcbind
udp 0 0 0.0.0.0:111 0.0.0.0:* 1/systemd
udp6 0 0 :::1000 :::* 7185/rpcbind
udp6 0 0 :::111 :::* 1/systemd
[root@nfs01 ~]# systemctl stop rpcbind.socket ---把提示的rpcbind.socket也停了
[root@nfs01 ~]# netstat -lntup|egrep "rpcbind|111" ---没了
[root@nfs01 ~]# rpcinfo -p localhost ---没了
rpcinfo: can't contact portmapper: RPC: Remote system error - Connection refused
[root@nfs01 ~]# systemctl start rpcbind ---还原
2.3.2 启动NFS服务
[root@nfs01 ~]# systemctl start nfs ---启动NFS服务
[root@nfs01 ~]# 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@nfs01 ~]# systemctl status nfs ---查看NFS启动状态
● nfs-server.service - NFS server and services
Loaded: loaded (/usr/lib/systemd/system/nfs-server.service; enabled; vendor preset: disabled)
Active: active (exited) since 二 2020-03-03 00:30:55 CST; 42s ago
Main PID: 7428 (code=exited, status=0/SUCCESS)
CGroup: /system.slice/nfs-server.service
3月 03 00:30:55 nfs01 systemd[1]: Starting NFS server and services...
3月 03 00:30:55 nfs01 systemd[1]: Started NFS server and services.
[root@nfs01 ~]# rpcinfo -p localhost ---查看NFS服务向RPC服务注册的端口信息,NFS服务启动后,发现端口信息就增多了,有很多端口和功能的对应
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
100024 1 udp 53085 status
100024 1 tcp 60295 status
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 42767 nlockmgr
100021 3 udp 42767 nlockmgr
100021 4 udp 42767 nlockmgr
100021 1 tcp 31613 nlockmgr
100021 3 tcp 31613 nlockmgr
100021 4 tcp 31613 nlockmgr
2.4 NFS服务常见进程详解说明
从上面的NFS服务的启动过程可以看出,运行NFS服务默认需要启动的服务或进程有NFS daemon、NFS mountd(rpc.mound)、rpc.statd、rpc.idmapd等。可以通过执行以下命令查看启动NFS后系统中运行的NFS相关进程:
[root@nfs01 ~]# ps -ef | egrep "rpc|nfs"
root 6685 1 0 3月02 ? 00:00:00 /sbin/dhclient -1 -q -lf /var/lib/dhclient/dhclient--ens33.lease -pf /var/run/dhclient-ens33.pid -H nfs01 ens33
rpc 7206 1 0 3月02 ? 00:00:00 /sbin/rpcbind -w
rpcuser 7378 1 0 00:30 ? 00:00:00 /usr/sbin/rpc.statd
---检查文件一致性
root 7380 2 0 00:30 ? 00:00:00 [rpciod]
root 7424 1 0 00:30 ? 00:00:00 /usr/sbin/rpc.mountd ---权限管理验证
root 7425 1 0 00:30 ? 00:00:00 /usr/sbin/rpc.idmapd ---名称映射进程
root 7430 2 0 00:30 ? 00:00:00 [nfsd4_callbacks]
root 7436 2 0 00:30 ? 00:00:00 [nfsd] ---主进程,管理登录ID身份判别等
root 7437 2 0 00:30 ? 00:00:00 [nfsd]
root 7438 2 0 00:30 ? 00:00:00 [nfsd]
root 7439 2 0 00:30 ? 00:00:00 [nfsd]
root 7440 2 0 00:30 ? 00:00:00 [nfsd]
root 7441 2 0 00:30 ? 00:00:00 [nfsd]
root 7442 2 0 00:30 ? 00:00:00 [nfsd]
root 7443 2 0 00:30 ? 00:00:00 [nfsd]
root 7513 7333 0 00:56 pts/0 00:00:00 grep -E --color=auto rpc|nfs
NFS服务的主要任务是共享数据,而数据的共享离不开权限问题。所以NFS服务器启动时最少需要两个不同的进程,一个是管理NFS客户端是否能够登陆的rpc.nfsd主进程,另一个管理NFS客户端是否能够取得对应权限的rpc.mountd进程。如果还要管理磁盘配额,则NFS还需要加载rpc.rquotad进程。
image.png2.5 实战配置NFS服务器端
2.5.1 NFS服务器配置文件路径
NFS服务的默认配置文件路径为/etc/exports,并且默认该文件是空的。
[root@nfs01 ~]# ls -l /etc/exports
-rw-r--r--. 1 root root 0 6月 7 2013 /etc/exports
[root@nfs01 ~]# cat /etc/exports
2.5.2 exports配置文件格式
/etc/exports文件的两种格式如下:
NFS共享目录 NFS客户端地址1(参1,参2...) 客户端地址2(参1,参2...)
NFS共享目录 NFS客户端地址(参1,参2...)
查看exports语法文件格式帮助的方法为:执行man exports命令,然后切换到文件结尾,可以快速看如下样例格式:
EXAMPLE
# sample /etc/exports file
/ master(rw) trusty(rw,no_root_squash)
/projects proj*.local.domain(rw)
/usr *.local.domain(ro) @trusted(rw)
/home/joe pc001(rw,all_squash,anonuid=150,anongid=100)
/pub *(ro,insecure,all_squash)
/srv/www -sync,rw server @trusted @external(ro)
/foo 2001:db8:9:e54::/64(rw) 192.0.2.0/24(rw)
/build buildhost[0-9].local.domain(rw)
上述各例参数的含义如下:
1)NFS共享目录:为NFS服务器端要共享的实际目录,要用绝对路径,如(/data)。注意共享目录的本地权限,如果需要读写权限,一定要让本地目录可以被NFS客户端的用户(nfsnobody)读写。
2)NFS客户端地址:为NFS服务器端授权的可访问共享目录的NFS客户端地址,可以为单独的IP地址或主机名、域名等,也可以为整个网段地址,还可以用“*”来匹配所有客户端服务器,这里所谓的客户端一般来说是前端的业务服务器,如Web服务。
3)权限参数集:对授权的NFS客户端的访问权限设置。参数说明如下:
2.5.3 企业生产场景NFS exports配置实例
image.png这里以“配置例一”进行说明:
- /data为要共享的NFS服务器端的目录,注意,被共享的目录一定要用绝对路径。
- 172.16.1.0/24表示允许NFS客户端访问共享目录的网段范围。24表示255.255.255.0。
- (rw.sync)rw表示允许读写,sync表示数据同步写入到NFS服务器端的硬盘中。
- 也可用通配符*替代IP地址,表示允许所有主机,也可以写成10.0.0.*的形式。
2.6 NFS配置文件权限参数
NFS配置文件权限参数说明
NFS配置权限设置常用参数说明下图所示为NFS配置权限设置常用参数关系的图解。
NFS配置权限设置常用参数关系图解
网友评论