NFS服务搭建用于实现共享磁盘
实例环境(centOs7):
三台服务器分别为:
192.168.2.12 节点1
192.168.2.13 节点2
192.168.2.15 共享点
1、在三台服务器上分别安装nfs服务
可以先用rpm -qa|grep nfs确认系统中是否有安装nfs服务,若没有则进行安装;
yum -y install nfs-utils
安装完成后再确认:
如图显示有nfs-utils和libnfsidmap说明正常安装
2、共享服务上配置
vim /etc/exports
添加 共享目录 节点IP(配置参数)
如:/share 192.168.2.13(rw,sync,no_root_squash,no_subtree_check)
-
客户端常用的指定方式
- 指定ip地址的主机:172.16.0.240
- 指定子网中的所有主机:192.168.0.0/24 192.168.0.0/255.255.255.0
- 指定域名的主机:david.bsmart.cn
- 指定域中的所有主机:.bsmart.cn
- 所有主机:
-
访问权限选项
- 设置输出目录只读:ro
- 设置输出目录读写:rw
-
用户映射选项,参数如下:
- ro 该主机对该共享目录有只读权限
- rw 该主机对该共享目录有读写权限
- root_squash 客户机用root用户访问该共享文件夹时,将root用户映射成匿名用户
- no_root_squash 客户机用root访问该共享文件夹时,不映射root用户
- all_squash 客户机上的任何用户访问该共享目录时都映射成匿名用户(nfsnobody)
- no_all_squash 与all_squash取反(默认设置)
- anonuid=XXX 将客户机上的用户映射成指定的本地用户ID的用户(UID=xxx)
- anongid=XXX 将客户机上的用户映射成属于指定的本地用户组ID (GID=xxx)
- sync 资料同步写入到内存与硬盘中,效率低,但可以保证数据的一致性
- async 资料会先暂存于内存中,而非直接写入硬盘
- insecure 允许从这台机器过来的非授权访问
- subtree_check 如果共享/usr/bin之类的子目录时,强制NFS检查父目录的权限(默认)
- no_subtree_check 和上面相对,不检查父目录权限
- wdelay 检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置)
- no_wdelay 如果多个用户要写入NFS目录,则立即写入,当使用async时,无需此设置。若有写操作则立即执行,应与sync配合使用
- hide 在NFS共享目录中不共享其子目录
- no_hide 共享NFS目录的子目录
- secure NFS通过1024以下的安全TCP/IP端口发送
- insecure NFS通过1024以上的端口发送
3、共享服务器运行nfs服务并设置为开机启动
systemctl start nfs
systemctl enable nfs.service
4、节点1和节点2上进行挂载
-
先创建挂载目录如:
mkdir -p /share
-
测试挂载,显示指定的(192.168.2.15 )NFS服务器上export出来的目录
showmount -e 192.168.2.15
-
进行挂载
mount -t nfs 共享路径 本地路径 -o nolock
其中共享路径为 共享服务器IP:共享路径
例如:mount -t nfs 192.168.2.15:/share /share -o nolock
-
如果有错误时,可以查看日志
cat /var/log/messages | grep mount
-
注意此时为临时挂载,在重启服务器后会失效,如果你需要重启服务器后还会生效,请要配置永久挂载
vim /etc/fstab
在末尾添加:
192.168.2.15:/share /share nfs defaults 1 1
5、可以进行测试确认使用情况
6、取消挂载
umount /share
若出现"umount.nfs: /XXX: device is busy",查看占用进程用户:fuser -m -v /XXX/
,杀死进程
7、一些命令
-
重启nfs
systemctl restart nfs
-
启动nfs
systemctl start nfs
-
关闭nfs
systemctl stop nfs
-
设置开机启动nfs
systemctl enable nfs
-
查看NFS的运行状态
nfsstat
-
查看rpc执行信息,可以用于检测rpc运行情况
rpcinfo
-
显示指定的(192.168.2.15 )NFS服务器上export出来的目录
showmount -e 192.168.2.15
9、防火墙相关
-
在设置了防火墙的环境中使用NFS,需要在防火墙上打开如下端口:
-
- portmap 端口 111 udp/tcp;
-
- nfsd 端口 2049 udp/tcp;
-
- mountd 端口 "xxx" udp/tcp
-
-
其中系统 RPC服务在 nfs服务启动时默认会为 mountd动态选取一个随机端口(32768--65535)来进行通讯
可以通过编辑/etc/services 文件为 mountd指定一个固定端口:vim /etc/services
在末尾添加:mountd 1011/udp mountd 1011/tcp
stopsrc -s rpc.mountd
startsrc -s rpc.mountd
exportfs -a
rpcinfo -p Hostname
现在我们会发现 mountd已经和端口 1011绑定了。
-
另外,nfs中需要通讯的服务还有 rpc.lockd和 rpc.statd,其中对lockd我们可以用类似的方法来指定固定端口,
vim /etc/services
添加lockd 35000/ucp lockd 35000/tdp
- stopsrc -s rpc.lockd
- startsrc -s rpc.lockd
- exportfs -a
- rpcinfo -p Hostname
-
但 rpc.statd无法通过该方法来指定端口,它只能使用随机端口,当然也可以不开放 rpc.statd需要的随机端口,带来的影响就是如果 nfs连接中断(比如server或client宕掉了),系统将无法通过statd来恢复连接中断前的状态,而必须重新 mount该nfs文件系统。
[NOTE]
实际操作中,我们可以先通过在共享服务器上输入rpcinfo -p 192.168.2.15
确认当前端口情况,然后在防火墙上打开相应的端口。