一、系统环境
主机类型 | IP地址 |
系统 | CentOS7.6(客户端、服务端都一样) |
NFS服务器 | 192.168.174.134 |
NFS客户端(autofs) | 192.168.174.130 |
NFS客户端 | 192.168.174.136 |
============================================================================================
二、NFS工作原理
- 首先 NFS 服务器端开启 rpcbind
- 然后服务器端开启 NFS 服务,这里 NFS和各项功能都需要向 RPC 服务注册,这里 RPC 会通知 portmap 模块将可用的端口分配给 statd、rquotad 等
- 然后 NFS 客户端 RPC 服务就会通过网络向 NFS 服务器端的 111 端口发送 NFS 文件存取功能的询问请求
- NFS 服务端的 RPC 服务找到对应的已经注册的 NFSdeamon 端口后,通知 NFS 客户端的 RPC 服务
- 此时 NFS 客户端就可以获取到 NFS 服务端各个进程的正确端口,然后通过客户端 RPC 就直接与 NFS 服务器的 RPC 进行存取数据了(RPC 知道了 NFS 的具体端口,就可以实现远程调用,即传输)
============================================================================================
三、NFS 配置文件 /etc/exports 里面的权限介绍
3.1、格式:
/data/nfs 192.168.174.0/24(rw,sync)
3.2、权限介绍:
- ro:默认选项,以只读的方式共享
- rw:以读写的方式共享
- root_squash:将客户端使用的是 root 用户时,则映射到NFS服务器的用户为NFS的匿名用户(nfsnobody)
- no_root_squash:将客户端使用的是root用户时,则映射到FNS服务器的用户依然为root用户
- all_squash:默认选项,将所有访问NFS服务器的客户端的用户都映射为匿名用户,不管客户端使用的是什么用户
- anonuid:设置映射到本地的匿名用户的UID
- anongid:设置映射到本地的匿名用户的GID
- sync:默认选项,保持数据同步,数据同步写入到内存和硬盘
- async:异步,先将数据写入到内存,在将数据写入到硬盘(不推荐使用,会丢失数据)
- secure:默认选项,NFS客户端必须使用NFS保留端口(通常是1024以下的端口)
- insecure:允许NFS客户端不使用NFS保留端口(通常是1024以上的端口)
============================================================================================
四、NFS 常用的命令
4.1、nfsstat:查看系统的一些信息
- -c,--client:显示 NFS 客户端的统计信息(只能客户端上用)
- -s,--server:显示 NFS 服务器端的统计信息(只能服务端上用)
- -m,--mounts:显示已挂载的 NFS 文件系统的详细参数
- -2:显示 nfsv2 的统计信息
- -3:显示 nfsv3 的统计信息
- -4:显示 nfsv4 的统计信息
- -o[facility]:显示指定类型的统计信息
nfs:NFS 协议信息 rpc:一般 RPC 信息 net:网络统计信息 all:显示以上所有信息
4.2、rpcinfo:查看端口信息
- -p:显示注册的端口
- -m:显示 rpcbind 操作的统计信息表
- -s:显示所有已注册的 RPC 程序的简明列表
- -T:显示有关使用特定传输或协议的服务的信息
- -t:探测使用 TCP 的 RPC 程序
- -u:探测使用 UDP 的 RPC 程序
4.3、exports:管理NFS共享文件系统列表
- -r:重新共享目录
============================================================================================
五、NFS 部署(不是自动挂载)
5.1、安装 nfs-utils
# 服务器端安装 nfs 服务器主件: [root@nfs ~]# yum install nfs-utils -y # 客户端安装 nfs 服务器主件: [root@node_8 ~]# yum install nfs-utils -y
# 关闭防火墙和SELinux:
[root@node_8 ~]# systemctl stop firewalld && setenforce 0
5.2、配置服务端的 NFS 配置文件(客户端不用配置)
# 创建 NFS 共享目录 [root@nfs ~]# mkdir -p /data/nfs # 修改 NFS 配置文件 [root@nfs ~]# vim /etc/exports /data/nfs *(rw,sync)
5.4、服务器发布 NFS 服务
/* 启动的服务顺序千万别搞错了 先启动 “rpcbind” -> "nfs" */ [root@nfs ~]# systemctl start rpcbind && systemctl start nfs # 最后导出发布(不报错则说明成功了): [root@nfs ~]# exportfs -r # 也可以查看下是否启动成功: [root@nfs ~]# rpcinfo -p 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 41084 status
5.5、客户端挂载 NFS(客户端不需要启动 nfs,它有个 rpc 主件已经启动了)
# 创建 NFS 服务器的挂载目录 [root@node_8 ~]# mkdir -p /data/mount/nfs # 关闭防火墙和SELinux [root@node_8 ~]# systemctl stop firewalld && setenforce 0 # 查看 NFS 服务端的共享目录(测试是否能连接上去) [root@node_8 ~]# showmount -e 192.168.174.134 Export list for 192.168.174.134: /data/nfs * [root@node_8 ~]# /* [root@node_8 ~]# showmount -e 192.168.174.134 clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host) 这个错是服务端的防火墙或SELinux启动被拒绝连接引起,在服务端关闭防火墙和SELinux即可 */ # 挂载 [root@node_8 ~]# mount -t nfs -o soft,timeo=1 192.168.174.134:/data/nfs /data/mount/nfs /* -t:指定要挂载的文件类型 soft:软挂载,默认是硬挂载,软挂载只有在使用的时候才会挂载,不使用的时候不挂载,遇到问题时会终止挂载并返回信息,而硬挂载则是一直挂载 */ # 查看是否挂载成功 [root@node_8 ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/sda2 20G 1.3G 19G 7% / devtmpfs 900M 0 900M 0% /dev 192.168.174.134:/data/nfs 58G 33M 58G 1% /data/mount/nfs
============================================================================================
六、NFS 自动挂载部署方法
# 查看是否安装有nfs-utils,如果有就不安装了,没有就安装 [root@Node1_LNP ~]# rpcinfo -p -bash: rpcinfo: command not found # 像这个没有,所以要安装下 nfs-utils [root@Node1_LNP ~]# yum install nfs-utils -y # 安装 autofs [root@Node1_LNP ~]# yum install autofs -y # 修改 autofs 的配置文件 [root@Node1_LNP ~]# vim /etc/auto.master # 在 /misc /etc/auto.misc下面加入,/etc/nfs.misc可以自定义,但是 .misc必须是一致的,不能乱写 /data/mnf/nfs /etc/nfs.misc # 创建并设置刚刚自定义的配置文件 [root@Node1_LNP ~]# vim /etc/nfs.misc # 目录名 文件类型,权限 服务端共享的目录地址 nfs1 -fstype=nfs,rw,sync 192.168.174.134:/data/nfs nfs2 -fstype=nfs,ro,sync 192.168.174.134:/data/nfs # 启动 autofs [root@Node1_LNP ~]# systemctl start autofs #测试下是否成功,进入刚刚我们在配置文件里面设置的那两个文件目录,这两个目录是没有创建的 [root@Node1_LNP ~]# ls /data/mnf/nfs/ [root@Node1_LNP ~]# cd /data/mnf/nfs/nfs1 [root@Node1_LNP nfs1]# cd /data/mnf/nfs/nfs2 # 没有报错,说明成功了 # 在重启下服务器,重新测试是否成功 [root@Node1_LNP nfs2]# reboot [root@Node1_LNP ~]# systemctl start autofs [root@Node1_LNP ~]# ls /data/mnf/nfs/ [root@Node1_LNP ~]# cd /data/mnf/nfs/nfs1 [root@Node1_LNP nfs1]# cd /data/mnf/nfs/nfs2 [root@Node1_LNP nfs2]# # 没有报错,说明成功了
============================================================================================
七、NFS 的一般优化
主要优化 mount -o 的挂载参数:
- async:异步同步,数据不会立刻同步到磁盘,此参数会提高 I/O 性能 ,但会降低数据安全(除非对性能要求很高,对数据可靠性不要求的场合,一般生产环境不推荐使用)
- noatime:取消更新文件系统上的 inode 访问时间,提升 I/O 性能,优化 I/O 目的,推荐使用
- nodiratime:取消更新文件系统上的 directory inode 访问时间,高并发环境,推荐显示应用该选项,提高 系统性能
- noexec:挂载的这个文件系统,要不要执行程序(安全选项)
- nosuid:挂载的这个文件系统上面,可不可以设置 UID(安全选项)
- rsize/wsize:读取(rsize) / 写入(wsize) 的区块大小(block size),这个设置值可以影响客户端与服务端传输数据的缓冲存储量。一般来说,如果在局域网内,并且客户端与服务端都具有足够的内存,这个值可以设置大一点,比如说32768(bytes),提升缓冲区块将可提升 NFS 文件系统的传输能力。但是设置的值也不要太大,最好是实现网络能够传输的最大值为限