NFS是Network File System的缩写,它可通过网络,让远端的不同的操作系统可以共享彼此的文件。类似windows系统中的文件共享。
实际上就是将NFS服务器中的一个或多个目录共享出来,使得远端的NFS客户端系统可以挂载此共享的文件系统,在远端系统的角度来看,那个远程主机共享来的目录就好像是自己的一个磁盘分区一样,实用无差异感;
NFS一般用于存储共享视频,图片,配置文件等静态的数据(考虑延迟等,不适合动态场景)。
NFS挂载示例:
图1:NFS服务挂载示例图
(如图1)NFS服务器设置一个共享目录/nfsdata/mugo后,有权访问NFS服务器的NFS客户端系统将此共享目录挂载到客户端服务器系统的期望挂载点(自定义一个挂载点即可),客户端A与客户端B挂载的目录不相同。此时在服务端/nfsdata/mugo目录中写入的文件,客户端A的/nfsc1和客户端A2的/nfsc2中都可以查看到。NFS服务器共享目录是设置的共享权限控制了此共享目录下客户端是否有读写的权限,如果配置了客户端可读写,客户端就能够进行读写。挂载的共享目录使用和本地目录实用没有明显区别。
如果客户端是linux系统,可使用df -h查看
如果客户端是windows系统,则可以直接在资源管理器中看到网络挂载的磁盘。
NFS既然是网络文件系统,客户端和服务端就需要网络来传输数据,NFS服务器端基本会使用2049端口,但因文件系统非常复杂,NFS还会有其他的程序去启动额外的端口用于数据传输,这些额外的传输数据的端口是随机选择小于1024的端口;客户端需要通过远程过程调用(Remote Procedure Call,RPC)协议来找到对应的端口。
基于RPC通讯调用的NFS实现原理:
NFS运行过程中需要支持的相当多的功能,不同的功能会使用不同的程序来启动,相对应的就需要启用一些端口来传输数据,所以NFS的功能对应的端口并不固定,客户端需要清楚NFS服务器端的相关端口才能建立连接进行数据传输,RPC就是用来统一管理NFS端口的服务,并且统一对外的端口是111(有点类似Nginx,当然这里没有负载均衡,仅仅有点类似代理),RPC会记录NFS每个功能服务的端口的信息,客户端通过RPC实现双方沟通端口信息。
NFS启动就会向RPC去注册自己的所有功能的端口信息,RPC记录下这些端口信息,而RPC会开启111端口对外服务,等待客户端RPC的请求,有客户端请求,服务器端的RPC就会将记录的NFS端口信息发送给客户端,以实际端口进行数据的传输。因此在启动NFS服务之前,需要先启动RPC服务(即centos5.x以下的系统中是portmap服务,centos6.x以上是rpc-bind服务,red hat enterprise linux同理),RPC服务重新启动,原来已注册好的NFS端口数据就会全部丢失。此时RPC服务管理的NFS程序需要重新启动以重新向RPC注册。
注意:修改NFS配置文件后,不要重启NFS服务,直接命令执行exportfs –rv即可使修改的/etc/exports配置文件重新载入而生效。
NFS工作流程
大致原理赘述之后,开始我们实操部分--CentOS7部署NFS服务
小提示:如需要自动部署脚本,请私信,供大家互相学习交流。
安装系统环境:CentOS7
所需软件:
NFS服务主要文件说明:
主要配置文件:/etc/exports
NFS 的主要配置文件,NFS的配置只需在此文件中配置即可。此文件需要手动生成。
NFS 文件系统维护命令:/usr/sbin/exportfs
维护 NFS 分享资源的命令,可使用此命令重新载入 /etc/exports内容、实现将NFS服务端共享的目录卸除或重新共享。
查询服务器共享资源详情的命令:/usr/sbin/showmount
exportfs 用在 NFS 服务端,showmount 主要用在客户端。showmount 主要用来察看 NFS 客户端共享的目录资源详情。
第一步:安装所需软件
yum install -y nfs-utils rpcbind
第二部:启动RPC、NFS服务
systemctl start rpcbind #先启动rpc服务
systemctl enable rpcbind #设置开机启动
systemctl start nfs-server #启动nfs服务
firewall-cmd --permanent --add-service=nfs #配置防火墙放行nfs服务
firewall-cmd --reload #防火墙重载生效
第三部:新建共享目录
mkdir -p /nfsdata01 #创建共享目录
mkdir -p /nfsdata02 #创建共享目录
第四步:编辑配置文件:
vim /etc/exports #vim编辑共享配置文件
内容:
/nfsdata01 10.211.55.0/24(rw,async,all_squash,insecure)
/nfsdata02 *(rw,async,all_squash,insecure)
exports文件内容
配置内容说明:
格式: 共享目录的路径 允许访问的NFS客户端(共享权限参数)
如上,共享目录为/nfsdata01 , 允许访问的客户端为10.211.55.0/24网络用户,权限为可读写,优先将数据保存到内存然后在写入到硬盘,无论客户端是说明账户都映射为nfsnobody账户。
请注意,NFS客户端地址与权限之间没有空格。
参数:作用
第五步:重新载入共享配置使之生效
exportfs -rv
第六步:查看共享状态
showmount -e localhost
共享生效
第一步:从客户端远程查看服务端共享状态
showmount -e 10.211.55.20
客户端操作查看nfs服务器共享状态
第二步:挂载nfs
mount 10.211.55.20:/nfsdata01
第三步:查看挂载
df -h
挂载并查看
至此,NFS服务搭建完毕,有好的意见或建议,可交流。
小提示:如需要自动部署脚本,请私信,供大家互相学习交流。