NFS 是Network File System的缩写,即网络文件系统。一种使用于分散式文件系统的协定,由Sun公司开发,于1984年向外公布。功能是通过网络让不同的机器、不同的操作系统能够彼此分享个别的数据,让应用程序在客户端通过网络访问位于服务器磁盘中的数据,是在类Unix系统间实现磁盘文件共享的一种方法。
NFS在文件传送或信息传送过程中依赖于RPC协议,RPC远程过程调用 (Remote Procedure Call) 是能使客户端执行其他系统中程序的一种机制,NFS本身是没有提供信息传输的协议和功能的。
NFS应用场景
常用于高可用文件共享,多台服务器共享同样的数据,可扩展性比较差,本身高可用方案不完善,取而代之的数据量比较大的可以采用MFS、TFS、HDFS、GFS等等分布式文件系统。
NFS(网络文件系统):让网络上的不同linux/unix系统机器实现文件共享
nfs本身只是一种文件系统,没有提供文件传递的功能,但却能让我们进行文件的共享,原因在于 NFS 使用RPC服务,用到NFS的地方都需要启动RPC服务,无论是NFS客户端还是服务端
nfs和rpc的关系:nfs是一个文件系统,负责管理分享的目录;rpc负责文件的传递
nfs启动时至少有rpc.nfsd和rpc.mountd2个daemon
rpc.nfsd主要是管理客户机登陆nfs服务器时,判断该客户机是否能登陆,和客户机ID信息。
Rpc.mountd主要是管理nfs的文件系统。当客户机顺利登录nfs服务器时,会去读/etc/exports文件中的配置,然后去对比客户机的权限。
协议端口:
RPC:111 tcp/udp
nfsd: 2049 tcp/udp
mountd:RPC服务在 nfs服务启动时默认会为 mountd动态选取一个随机端口(32768–65535)来进行通讯 ,可以在/etc/nfsmount.conf文件中指定mountd的端口
1、安装nfs软件
yum install -y nfs-utils rpcbind
2、编辑配置文加件添配置需要共享的目录
vim /etc/exports
/data/mysqlDIR *(rw,no_root_squash,no_all_squash,sync)
3、创建要共享的目录
mkdir /data/mysqlDIR
4、使配置文件生效,如果目录不存在就会报错,创建目录后再执行一下就好
[root@images1-linux ~]# exportfs -r
exportfs: Failed to stat /data/mysqlDIR: No such file or directory
5、启动nfs和rpcbind服务并查看端口情况
systemctl start nfs && systemctl start rpcbind
ss -ntl
NFS server启动时会随机启动多个端口并向RPC注册,这样如果使用iptables对NFS sever 端口进行限制就会有点麻烦,可以更改配置文件固定NFS服务相关端口
先看一下目前所使用的的端口情况
rpcinfo -p localhost
# 在配置文件中添加以下5行内容,其他的保持不动
# vim /etc/sysconfig/nfs
RQUOTAD_PORT=30001
LOCKD_TCPPORT=30002
LOCKD_UDPPORT=30002
MOUNTD_PORT=30003
STATD_PORT=30004
7、重启nfs和rpcbind服务
systemctl restart nfs && systemctl restart rpcbind
再次查看端口情况就会发现有的随机端口已经变成我们指定的端口了
查看共享目录信息
[root@NFS-Server ~]# exportfs -rv
exporting *:/data/mysqlDIR
[root@NFS-Server ~]# exportfs -v
/data/mysqlDIR <world>(sync,wdelay,hide,no_subtree_check,sec=sys,rw,secure,no_root_squash,no_all_squash)
8、如果是云主机或开了防火墙等,需要开启指定端口,111,2049,…等,我这里是把防火墙禁用了
9、linux客户端查看共享目录信息并挂载到本地
# 客户端也要安装nfs工具:
yum install -y nfs-utils
# 查看服务端共享的文件目录等
showmount -e + nfs服务端IP
# 挂载方法:mount -t 指定协议 IP:/共享目录位置 + 挂载点
mount -t nfs X.X.X.X:/data/mysqlDIR /mnt
# 卸载共享目录
umount + 挂载点
10、在windows客户端挂载
① 打开-控制面板-程序-打开或关闭windows功能-勾选NFS客户端
② 打开dos命令行进行挂载
挂载方法: mount IP:/共享目录位置 + 挂载点
卸载方法: umount + 挂载点
卸载挂载点
出错故障排除思路:
① 检查共享目录的配置文件,权限、目录等
② 是否开启了防火墙,如开启了请添加规则放行相应的端口号
③ 如果是云主机,要检查安全组里的规则是否放行端口等
④ 尽量在配置文件中定义使用固定的端口号,便于添加规则
⑤ 错误如下图(原因是windows端经常会使用大的端口号导致的)
错误截图:
linux客户端端和windows客户端挂载目录时可能遇到的错误:
① linux客户端挂载不上,提示访问拒绝错误
② windows端常出现的问题:提示网络错误-53
网络错误-53的解决方法:
NFS服务器有一个”在非安全模式工作(允许更高的端口号)“的选项。Windows NFS客户端经常使用的是大的端口号。你可以在你的共享项设置中添加insecure选项
例如:/data/xxx *(insecure,rw)
重启服务再次挂载就可以了