1.1什么是NFS
NFS是Networt Flie System的缩写,中文意思是网络文件系统。它的主要功能是通过网络(一般是局域网)让不同的主机系统之间可以共享文件或目录。NFS客户端(一般微应用服务器,例如Web)可以通过挂载(mount)的方式将NFS服务器端共享的数据目录挂载共享的目录就好像是客户端自己的磁盘分区或者目录一样,而实际上却是远端的NFS服务器的目录。
NFS网络文件系统很想Windows系统的网络共享、安全功能、网络驱动器映射,这也与Linux系统的里的samba服务类似。只不过一般情况下,Windows网络共享服务或samba服务用于办公局域网共享,而互联网中小网站集群架构后端常用NFS进行数据共享,如果是大型网络,那么有可能还会用到更复杂的分布式文件系统。
1.2 为什么要共享储存
当集群中没有NFS共享存储时,用户访问图片的情况如图1.1所示。
例如:A用户传图片到Web1服务器,然后让B用户访问这张图片,结果B用户访问的请求分发到了Web2,因为Web2上没有这张图片,这就导致它无法看到A用户上传的图片。
如果集群中有NFS共享存储,用户访问图片的情况如图1.2所示。
如果如图所示有一个共享存储,A用户上传图片的请求无论是分发到Web1还是Web2上,最终都会存储到共享存储上,而在B用户访问图片时,无论请求分发到Web1还是Web2上,最终也都会去共享存储上找,这样就可以访问到需要的资源了。
2什么是RPC
因为NFS支持的功能相当多,而不同的功能都会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应大的端口无法固定。
要解决上面的困扰,就需要通过远程过程调用RPC服务来帮忙,NFS的RPC服务最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而确保客户端可以连接到正确的NFS端口上去,达到实现数据传输交互数据目的。这个RPC服务类似NFS服务端和NFS客户端之间的一个中介,流程如图1.4所示。
2.1 NFS的工作原理
前文描述的整个启动过程如图1.5所示。
当访问程序通过NFS客户端向NFS服务端存取文件时,其请求流程大致如下:
1)首先yoghurt访问网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端(即执行程序的服务端)的RPC服务(rpcbind服务)就会通过网络向NFS服务端的RPC服务的111端口发出NFS文件存取功能的询问请求。
2)NFS服务器端的RPC服务找到对应的已注册的NFS端口后,通知NFS客户端的RPC服务。
3)此时NFS客户端获取到的正确的端口,并与NFS daemon联机存储数据。
4)NFS客户端把数据存取成功后,返回给前端访问程序,告知用户存取结果,作为网站用户,就完成了一次存取操作。
3、NFS的安装
服务端设置
1、安装
yum install nfs-utils rpcbind -y
rpm -qa nfs-utils rpcbind
2、systemctl start rpcbind #<====打开RPC服务
systemctl enable rpcbind #<====开机自启RPC服务
3、rpcinfo -p 127.0.0.1 #<====查看RPC服务内无nfs的服务
4、 systemctl start nfs #<====开启NFS服务
systemctl enable nfs #<====开机自启NFS服务
5、rpcinfo -p 127.0.0.1 #<====查看RPC服务内有nfs的服务
6、配置nfs文件
1) /etc/exports
#oldboy shared dir at tiame
/data 172.16.1.0/24(rw,sync)
其中权限:
rw 表示可读写权限
ro 表示只读权限
sync 请求或写入数据时,数据同步写入到NFS服务器端的硬盘后才返回
7. systemctl reload nfs
exports -r
上述二者平滑重启
8、showmount -e 172.16.1.31查看配置文件/data是否生效
Export list for 172.16.1.31:
/ data 172.16.1.0/24
客户端
1、yum install nfs-utils rpcbind -y
rpm -qa nfs-utils rpcbind
2、systemctl start rpcbind #<====打开RPC服务
systemctl enable rpcbind #<====开机自启RPC服务
3、showmount -e 172.16.1.31 #<====查看NFS服务器提供的共享目录