在企业集群架构的工作场景中,NFS网络文件系统一般被用来存储共享视频、图片、静态文件,通常网站用户上传的文件也都会放在NFS共享里,例如BBS产品(论坛)产生的图片、附件、头像等,然后前端所有的节点访问静态资源时都会读取NFS存储上的资源。
阿里云等公有云平台的NAS就是云版的NFS服务应用。
什么是共享存储
简单说就是将很多台服务器的数据,都可以保存在同一个存储服务器
上。
这样可以在服务器集群内,数据统一存储到一台机器上,以实现共享存储。
这样在基于负载均衡的web集群下,用户无论请求哪一台机器都可以获取到同样的数据。
什么是NFS
1.在服务器集群下,多台web服务器的图片、HTML、视频等静态资源,全都统一保存在NFS服务器上
2.以及NFS服务器也可以当做备份服务器
NFS服务架构(NFS原理)
NFS程序运行后,产生如下组件
----RPC(Remote Procedure Call Protocol): 远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,不需要了解底层网络技术的协议。
----rpcbind //负责NFS的数据传输,远程过程调用 tcp/udp协议 端口111
----nfs-utils //控制共享哪些文件,权限管理
NFS结合rpcbind通信原理
1.NFS服务端启动后、将自己的端口信息,注册到rpcbind服务中
2.NFS客户端通过TCP/IP的方式,连接到NFS服务端提供的rpcbind服务,并且从该服务中获取具体的端口信息
3.NFS客户端拿到具体端口信息后,将自己需要执行的函数,通过网络发给NFS服务端对应的端口
4.NFS服务端接收到请求后,通过rpc.nfsd进程判断该客户端是否有权限连接
5.NFS服务端的rpc.mount进程判断客户端是否有对应的操作权限
6.最终NFS服务端会将客户端请求的函数,识别为本地可以执行的命令,传递给内核、最终内核驱动硬件
结论、nfs的客户端、服务端之间的通信基于rpc协议,且必须运行rpcbind服务
NFS服务端部署
1.安装nfs工具包
yum install nfs-utils rpcbind -y
2.修改配置文件
设置一个共享 /nfs-data文件夹,运行172.16.1.0局域网内的用户可以访问,权限是只读
[root@nfs-31 ~]#cat /etc/exports
/nfs-data 172.16.1.0/24(rw,anongid=1500,anonuid=1500,sync)
3.注意要先启动rpcbind服务
确保如下2个进程都运行,rpc服务才正常,如果想停止rpc服务,也是关闭这俩进程
[root@nfs-31 ~]#systemctl start rpcbind.service
[root@nfs-31 ~]#systemctl start rpcbind.socket
4.运行nfs服务 ,每次重启nfs,nfs端口号,不断变化中
systemctl start nfs
nfs配置文件修改或,无需重启,使用重新加载,方式NFS端口号再次变化
方法1
systemctl reload nfs
方法2,更新nfs的配置文件设置
exportfs -r
5.检查nfs共享的情况
[root@nfs-31 ~]#showmount -e 172.16.1.31
Export list for 172.16.1.31:
/nfs-data 172.16.1.0/24
6.修改该共享文件夹的权限
[root@nfs-31 ~]#chown -R ppp:ppp /nfs-data/
关于nfs参数所有解释
共享目录 共享主机 共享选项
/nfs/share * :代表所有主机 *(ro,sync)
192.168.0.0/24:代表共享给某个网段
192.168.0.254:共享给某个IP
共享选项:
ro:只读,不常用
rw:读写
sync:实时同步,直接写入磁盘
async:异步,先缓存在内存再同步磁盘
anonuid:设置访问nfs服务的用户的uid,uid需要在/etc/passwd中存在
anongid:设置访问nfs服务的用户的gid
root_squash :默认选项 root用户创建的文件的属主和属组都变成nfsnobody,其他人nfs-server端是它自己,client端是nobody。
no_root_squash:root用户创建的文件属主和属组还是root,其他人server端是它自己uid,client端是nobody。
all_squash: 不管是root还是其他普通用户创建的文件的属主和属组都是nfsnobody
说明:
请用如下的参数,即可,生产环境用这个
anonuid和anongid参数和all_squash一起使用。
all_squash表示不管是root还是其他普通用户从客户端所创建的文件在服务器端的拥有者和所属组都是nfsnobody;服务端为了对文件做相应管理,可以设置anonuid和anongid进而指定文件的拥有者和所属组
NFS客户端部署
1、在客户端安装安装nfs工具包
yum install nfs-utils -y
2.查看机器的挂载情况
mount -l
3. 查看磁盘分区挂载情况
df -h
4.挂载nfs,查看nfs
[root@web-7 ~]#mount -t nfs 172.16.1.31:/nfs-data /test-nfs
[root@web-7 ~]#df -h
5.尝试读写数据
ls /test-nfs
touch /test-nfs/hello.log