应用场景
A、B、C三台机器上需要保证被访问到的文件是一样的,A机器共享数据出来,B和C机器别去挂载A机器共享的数据目录,从而使B和C机器访问到的数据和A机器上的一致。原理图
NFS不监听任何端口,监听端口实现TCP\IP通信的是rpcbind。它监听111端口。
NFS服务端安装配置
(1)在服务端机器上安装软件包nfs-utils,会将rpcbind一并安装上
yum install -y nfs-utils
(2)在/etc/exports中添加需要共享的目录信息
/home/zcylinux
192.168.244/0(rw,sync,all_squash,anonuid=1001,anongiu=1001)
第一段是要共享出去的目录
第二段是指定与哪个(些)机器共享上面的目录,并设定它的选项
(3)保存退出后,给予共享目录777权限
chmod 777 /home/zcylinux
(4) 默认安装完nfs-utils,会默认开启rpcbind服务,在centos7中查看发现它监听111端口,后面为systemd,并无影响
tcp6 0 0 :::111 :::* LISTEN 1/systemd
(5)启动NFS
systemctl start nfs
启动nfs后,会自动开启一些rpc服务(rpcbind相关的一些服务。例如
root 11481 0.0 0.0 19320 400 ? Ss 22:08 0:00 /usr/sbin/rpc.idmapd
root 11487 0.0 0.0 42564 948 ? Ss 22:08 0:00 /usr/sbin/rpc.mountd
rpcuser 11482 0.1 0.0 42376 1760 ? Ss 22:08 0:00 /usr/sbin/rpc.statd
在客户端上没有这些相关服务的
(6)设置为开机启动
systemctl enable nfs
(7)关于NFS挂载选项的解释
客户端挂载
(1)安装软件包
yum install -y nfs-utils
(2)查看本机是否对共享目录有权限
[root@localhost ~]# showmount -e 192.168.244.139
clnt_create: RPC: Port mapper failure - Unable to receive: errno 113 (No route to host)
该IP为服务端IP。这里提示错误网络不通,原因有二点:1. 对方服务为开启.
2 . 防火墙导致
(3)2台机器都关闭防火墙,并关闭selinux
systemctl stop firewalld
setenforce 0 //临时关闭selinux
这是就可以看到共享的目录了
(4)挂载共享目录
mount -t nfs 192.168.244.139:/home/zcylinx /mnt/
再使用df -h就可以看到共享的目录。
exportfs命令
该命令是与nfs-utils软件包一起安装的,它的作用是当服务端进行比如新增共享目录后,不用重启nfs服务,配置文件生效,客户端不受影响。如果当客户端正在对共享目录进行读写时,关闭服务端的NFS服务,会造成客户端进程异常(僵尸进程)。nfs服务不能随便重启,如果服务端需要重启需要在客户端上卸载共享目录后,才可以进行重启。
exportfs命令可以帮助我们解决多台客户端逐流卸载的繁琐。
- 常用选项
(1 -a 全部挂载或全部卸载
(2 -r 重新挂载
(3 -u 卸载某一个目录
(4 -v 显示共享目录
常用方式
exportfs -arv /服务端执行
NFS客户端问题题
- 在centos6以及之前的版本中,可能会出现客户端文件属主属组nobody。该问题针对NFS 4版本
- 客户端挂载共享目录后,不管是谁创建的文件属主属组都是nobody
- 可以在客户端挂载时,使用-o选项来指定nfs服务的版本为3
mount -t nfs -o nfsvers=3 192.168.244.139:/home/zcylinux /mnt/ //初次挂载
mount -t nfs -oremount,nfsvers=3 192.168.244.139:/home/zcylinux /mnt/ //再次挂载
4 另一种方法是编辑/etc/idmapd.conf——2台机器都需要
将#Domain = local.domain.edu修改为Domain = xxx.com(自定义)
然后再重启rpcbind服务