一、NFS介绍
1.什么是共享存储
简单来说就是多台服务器的数据保存在同一个存储服务器上,这样无论用户请求在哪一台服务器上看到的数据都是一样的。
2. 什么是NFS
NFS(Network File System)网络文件系统,是一种基于TCP/IP传输的网络文件系统协议。通过使用NFS协议,客户机可以像访问本地目录一样访问远程服务器中的共享资源。
NFS 主要功能是通过局域网络让不同的主机系统之间可以共享文件或目录。
NFS 系统和 windows 网络共享、网络驱动器类似,只不过 windows用于局域网,NFS 用于企业集群架构中,如果是大型网站,会用到更复杂的分布式文件系统GlusterFS, Ceph等
3. NFS应用场景
多台web服务器的图片和视频数据都保存在NFS服务器上
多台服务器的备份数据都保存在NFS服务器上
4. NFS通讯原理
NFS 服务的实现依赖于 RPC(Remote Process Call,远端过程调用)机制,以完成远程到本地的映射过程。
所以需要安装 nfs-utils
和 rpcbind
软件包来提供 NFS共享服务,前者用于 NFS 共享发布和访问,后者用于 RPC 支持。
1.服务端启动后将自己的端口信息注册到rpcbind
2.NFS客户端通过TCP/IP的方式连接NFS服务端的rpcbind并获得真实的端口信息
3.NFS客户端获得真实的端口后,将自己需要的操作函数通过网络发送给NFS服务端对应的端口
4.NFS服务端接收到请求后,由rpc.nfsd进程判断NFS客户端是否拥有连接权限
5.NFS服务端的rpc.mount进程判断客户端是否有对应的操作权限
6.最后NFS服务端会将对应请求的函数转换为本地能识别的命令,传递至内核,由内核驱动硬件
注意:rpc 是一个远程过程调用,那么使用 nfs 必须有rpc 服务

5. NFS优点与缺点
对于大多数负载均衡群集来说,使用NFS协议来共享数据存储是比较常见的做法,NFS也是NAS存储设备必然支持的一种协议。但是由于NFS没有用户认证机制,而且数据在网络上明文传输,所以安全性很差,一般只能在局域网中使用。
二、NFS服务端配置
1. 安装软件
yum install nfs-utils -y
#安装 nfs-utils 时,会自动安装依赖 rpcbind 和 mount 相关包。
2. 编辑配置文件 /etc/exports
格式如下:
directory machine(option)
# directory:NFS共享的目录路径
# machine:允许NFS客户端访问的IP地址。支持 DNS 和 IP,使用 IP 地址更可靠一些。
# option:选项。
# 举例:
/data 172.16.1.0/24(rw,sync,all_squash)
/install/installer *(rw,async,no_subtree_check,no_root_squash)
/home *(rw,async,no_subtree_check,no_root_squash)
/opt/ohpc *(ro,no_subtree_check)
/opt/lico/pub *(ro,sync,no_subtree_check,no_root_squash)
# 注意:访问地址和选项之间没有空格!!!
配置文件解释:
可以执行man exports
命令查看配置说明。
ro # 只读权限,这是默认值
rW # 读写权限
root_squash # 当NFS客户端以root管理员访问时,映射为NFS服务器的匿名用户(不常用)
no_root_squash # 当NFS客户端以root管理员访问时,映射为NFS服务器的root管理员(不常用)
all_squash # 无论NFS客户端使用什么账户访问,均映射为NFS服务器的匿名用户(常用)
no_all_squash # 无论NFS客户端使用什么账户访问,都不进行压缩
sync # 同时将数据写入到内存与硬盘中,保证不丢失数据。在1.0.0之后的版本中,这是默认值
async # 优先将数据保存到内存,然后再写入硬盘,这样效率更高,但可能会丢失数据
anonuid # 配置a11_squash使用,指定NFS的用户UID,必须存在系统
anongid # 配置a11_squash使用,指定NFS的用户GID,必须存在系统
no_subtree_check # 如果配置了共享子目录,则不检查父目录的权限。如果还设置了 no_root_squash,则此选项没必要;因为 root 具有所有权限。
secure # 在小于 1024 的端口上发起请求,这是默认值。应使用 insecure 来关闭它。
insecure # 在大于 1024 的端口上发起请求。
3. 启动NFS
一般使用 exportfs -ra
命令重新加载配置文件 /etc/exports
。
注意一:NFS 依赖于端口映射器(portmapper)守护程序,一般的 Linux 系统都会默认启动它。可以使用 rpcinfo 查看:
[root@head ~]# rpcinfo -p 127.0.0.1
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
注意二:需要确保先启动 rpcbind 服务,再启动 nfs,不然使用 showmount
时会报错 clnt_create: RPC: Program not registered
,不过一般启动 nfs 时会自动先启动 rpcbind。
验证 NFS 是否正常运行:
[root@head ~]# rpcinfo -p 127.0.0.1
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
100024 1 udp 36051 status
100005 3 tcp 20048 mountd
100024 1 tcp 38583 status
100003 3 tcp 2049 nfs
100003 4 tcp 2049 nfs
100227 3 tcp 2049 nfs_acl
100021 1 udp 52191 nlockmgr
100021 3 udp 52191 nlockmgr
100021 4 udp 52191 nlockmgr
100021 1 tcp 37623 nlockmgr
100021 3 tcp 37623 nlockmgr
100021 4 tcp 37623 nlockmgr
NFS 服务包含五个守护程序:(包含在 nfs-utils 软件包中)
- rpc.nfsd:完成大部分工作。
- rpc.lockd 和 rpc.statd:处理文件锁定。从 2.2.18 开始,nfsd 会根据需要调用 lockd。
- rpc.mountd:它处理初始安装请求。
- rpc.rquotad:处理导出的卷上的用户文件配额。
4. 查看共享信息
[root@head ~]# showmount -e 127.0.0.1
Export list for 127.0.0.1:
/opt/lico/pub *
/opt/ohpc *
/home *
/install/installer *
showmount命令的用法
- -e:显示NFS服务器的共享列表
- -a:显示本机挂载的文件资源的情况NFS资源的情况
- -v:显示版本号
三、NFS客户端配置
1. 安装软件
yum -y install nfs-utils
2. 查看共享信息
[root@c1 ~]# showmount -e 10.240.208.20
Export list for 10.240.208.20:
/opt/lico/pub *
/opt/ohpc *
/home *
/install/installer *
3. 编辑并挂载共享目录
编辑配置文件 /etc/fstab
:
10.240.208.20:/install/installer /install/installer nfs nfsvers=4.0,nodev,nosuid,noatime 0 0
10.240.208.20:/home /home nfs nfsvers=4.0,nodev,nosuid,noatime 0 0
10.240.208.20:/opt/ohpc /opt/ohpc nfs nfsvers=4.0,nodev,noatime 0 0
10.240.208.20:/opt/lico/pub /opt/lico/pub nfs nfsvers=4.0,nodev,noatime 0 0
挂载目录(挂载前需要先创建对应的目录,否则无法挂载):
mount /opt/ohpc
mount /home
mount /opt/lico/pub
mount /install/installer
# 临时挂载,可以不用写入配置文件
mkdir -p /opt/ohpc
mount -t nfs 10.240.208.20:/opt/ohpc /opt/ohpc
查看挂载结果:
[root@c1 ~]# df -h
Filesystem Size Used Avail Use% Mounted on
devtmpfs 7.7G 0 7.7G 0% /dev
tmpfs 7.7G 0 7.7G 0% /dev/shm
tmpfs 7.7G 298M 7.5G 4% /run
tmpfs 7.7G 0 7.7G 0% /sys/fs/cgroup
/dev/mapper/rl-root 70G 3.3G 67G 5% /
/dev/sda2 1014M 215M 800M 22% /boot
/dev/sda1 599M 5.8M 594M 1% /boot/efi
10.240.208.20:/opt/lico/pub 397G 75G 322G 19% /opt/lico/pub
10.240.208.20:/home 397G 75G 322G 19% /home
10.240.208.20:/opt/ohpc 397G 75G 322G 19% /opt/ohpc
10.240.208.20:/install/installer 397G 75G 322G 19% /install/installer
四、NFS故障案例
1. NFS服务故障导致目录卡住
故障现象:
如果NFS客户端挂载期间,NFS服务端服务停止了服务,会导致客户端与目录或文件相关的操作卡住。
问题解决:
第一种方法:修复NFS服务端的服务,使其正常工作
第二种方法:强制卸载NFS挂载目录(示例:umonut -lf /data)
2. NFS服务故障导致开机卡住
故障现象:
如果NFS客户端服务器设置了开机自动挂载,但是NFS客户端系统启动的时候NFS服务端并没有提供服务,就会导致开机自检的时候卡在挂载那一步,至少会卡住1分30秒。
问题解决:
第一种方法:修复NFS服务端的服务,使其正常工作
第二种方法:进入单用户模式,注释掉/etc/fstab里的挂载信息,然后重新启动系统
3. 防火墙阻拦
查看nfs端口:
rpcinfo -p
firewall防火墙配置:
firewall-cmd --add-service=nfs --permanent
firewall-cmd --add-service=mountd --permanent
firewall-cmd --add-service=rpc-bind --permanent
firewall-cmd --reload