系统:CentOS-7
一. 准备3台干净的虚拟机(nfs-server nfs-client1 nfs-client2),以root的身份进行登录后作如下配置:
- 配置3个节点的时区 需要保证三个节点的时区相同
timedatectl set-timezone Asia/Shanghai
- 配置3台机器的主机名(可以在安装的时候进行配置 也可以通过命令的方式进行配置)
nfs-server:hostnamectl set-hostname nfs-server
nfs-client1:hostnamectl set-hostname nfs-client1
nfs-client2:hostnamectl set-hostname nfs-client2
确认所有节点是否能够进行顺利的网络连接
对所有节点的yum进行更新(
yum upgrade
)对所有节点安装vim工具(
yum install vim
)对所有节点安装net-tools工具(
yum install net-tools
)配置所有节点之间的网络互通(使用vim 命令打开文件 /etc/hosts 添加下面的参数)
192.168.60.132 nfs-server
192.168.60.133 nfs-client1
192.168.60.134 nfs-client2
配置所有节点的ssh远程连接(link:https://blog.csdn.net/tuntun1120/article/details/65443757)
关闭所有节点的防火墙
sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
setenforce 0
systemctl disable firewalld
systemctl stop firewalld
- 查看当前节点防火墙状态
设置iptables service:yum -y install iptables-services
查看防火墙状态:service iptables status
二. Service节点配置
- 一般在Service节点,NFS服务的安装非常简单,只需要两个软件包即可(nfs-utils-*以及rpcbind),注意:在CentOS6.x里面,rpcbind服务命名为portmap服务
安装nfs-utils(yum -y install nfs-utils
)
安装rpcbind(yum -y install rpcbind
)
查看是否安装成功:
yum list installed | grep nfs-utils
yum list installed | grep rpcbind
- 启动rpcbind服务:
service rpcbind start
- 启动nfs服务:
service nfs start
- 查看rpcbind状态:
service rpcbind status
- 查看nfs状态:
service nfs status
- 停止rpcbind服务:
service rpcbind stop
- 停止nfs服务:
service nfs stop
- 重启rpcbind服务:
service rpcbind restart
- 重启nfs服务:
service nfs restart
- 重新平滑加载rpcbind服务:
service rpcbind reload
- 重新平滑加载nfs服务:
service nfs reload
- 设置nfs rpcbind服务开机启动
chkconfig rpcbind on
chkconfig nfs on
- 在Service节点建立共享目录/data 配置共享目录之前需要查看nfs rpcbind服务状态是否正常
1)使用查看状态命令查看两个服务运行是否正常
2)创建目录data(mkdir /data
) 并修改data目录权限
chmod 777 /data
3)修改Service端配置文件(/etc/exports
)
添加如下几行,遵循格式(服务端共享目录 客户机IP(rw,sync,no_root_squash,no_subtree_check))
/data 192.168.60.133(rw,sync,no_subtree_check,no_root_squash)
# ^
#这里的IP和后面的括号之间,千万不能有空格,否则会造成 Read-only file system 错误,导致客户端只能是只读模式
/data 192.168.60.134(rw,all_squash)
4)配置文件exports修改完成后,保存退出,重新启动nfs rpcbind服务,并查看系统加载的配置(cat /var/lib/nfs/etab)
5)确认系统加载的配置正确后,则共享目录设置成功
备注:NFS共享目录配置参数:
- ro 只读访问
- rw 读写访问
- sync 所有数据在请求时写入共享
- async nfs在写入数据前可以响应请求
- secure nfs通过1024以下的安全TCP/IP端口发送
- insecure nfs通过1024以上的端口发送
- wdelay 如果多个用户要写入nfs目录,则归组写入(默认)
- no_wdelay 如果多个用户要写入nfs目录,则立即写入,当使用async时, 无需此设置
- hide 在nfs共享目录中不共享其子目录
- no_hide 共享nfs目录的子目录
- subtree_check 如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
- no_subtree_check 和上面相对 不检查父目录的全向
- all_squash 共享文件的UID和GID映射匿名用户anonymous,适合公用目录。
- no_all_squash 保留共享文件的UID和GID(默认)
- root_squash root用户的所有请求映射成如anonymous用户一样的权限(默认)
- no_root_squas root用户具有根目录的完全管理访问权限
- anonuid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的UID
- anongid=xxx 指定nfs服务器/etc/passwd文件中匿名用户的GID
三.client节点配置
client端需要安装nfs-utils rpcbind服务,同时启动nfs-utils rpcbind服务
安装成功后,建立想要挂载的目录,确认服务端防火墙是否完全关闭(
showmount -e 服务端IP
)若上一步骤不能正确显示服务器端共享目录状态,则需要将服务器端防火墙完全关闭
iptables -F
iptables -X
- 将客户端建立的目录挂载到服务端
mount -t nfs -o nolock <服务端IP>:<服务端共享目录> <客户端共享目录>
- 将客户端卸载
umount <客户端共享目录>
对于多个客户端挂载到同一个服务端节点,对服务端节点的文件共享目录中的文件进行同时修改的时候,会不会破坏共享文件的问题?
经过个人实验得知,当多个客户端节点挂载到NFS共享目录的时候,不同的客户端之间就像是拥有了一个共有的目录一样,举例子来说,当一个客户端打开共享文件,
若另一个客户端想要打开相同的文件,会出现和使用vim重复打开本机文件多次出现的效果相同。在客户端同时对文件进行修改后,若其中一个客户端先一步进行保存,
后执行保存操作的客户端也会得到提示文件已经进行修改,是否还要保存内容。
对于在服务端执行showmount -e
命令出现RPC: Program not registered
错误的时候解决办法?
在服务器端先停止rpcbind(service rpcbind stop
) 再停止nfs(service nfs stop
)
然后在重启rpcbind和nfs,一定要按照顺序启动和停止:
service rpcbind start
service nfs start
使用阿里云作为nfs服务器配置
使用阿里云作为nfs服务端并使用本地客户端主机进行连接和使用本地客户端主机连接本地nfs服务器略微有一定区别
原因是因为阿里云的服务器并不能完全关闭防火墙,只能通过开通端口的形式绕过防火墙进行连接,所以,相对于本地nfs服务器配置来说,阿里云服务器的配置需要对端口进行设置
阿里云服务器的相关组件安装和配置大多数均和本地服务端配置相同,以下是几点不同之处:
- 当配置/etc/exports文件内容的时候,在其中添加允许客户端连接的IP地址需要添加本地外网的地址,有些时候并不是客户机本身的地址
此种情况下可以在百度搜索栏里面搜索"IP"关键字查看本机IP地址
- 由于阿里云服务器不能直接通过关闭所有端口防火墙的形式进行连接 所以需要查看nfs服务需要使用的端口 并对开放这些端口即可
查看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
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 49964 nlockmgr
100021 3 udp 49964 nlockmgr
100021 4 udp 49964 nlockmgr
100021 1 tcp 46502 nlockmgr
100021 3 tcp 46502 nlockmgr
100021 4 tcp 46502 nlockmgr
会出现以上的这些提示信息 由以上的信息可知 nfs体系所需要的端口号为111 20048 2049这三个端口号,只要在当前阿里云服务器将这3个端口号开放即可
但看见很多博客上说 mountd的端口号会一直变化 需要设置mountd的端口号为指定端口号(没有设置过 重启过nfs系统 发现mountd端口号并没有发生变化),若出现上述
情况可以查看博客:http://network.51cto.com/art/201007/215274.htm
开放以上三个端口号的时候,重启nfs rpcbind服务, 客户端即可正常挂载到阿里云服务器
最后在说明一下在配置nfs体系结构的时候经常会用到的一些命令:
1.查看nfs体系结构使用到的端口号:rpcinfo -p
2.若客户端挂载服务器端出现问题的时候,可以通过cat /var/log/messages | grep mount
命令查看服务器端的日志 分析是什么原因