1. NFS系统挂载结构图解与介绍
NFS服务器共享与客户端挂载结构图如上图所示,在NFS服务器端设置好一个共享目录/video后,其他有权限访问NFS服务器端的客户端都可以将这个共享目录/video挂载到本地客户端的某个挂载点(其实就是一个目录,这个挂载点目录可以自己随意指定),上图中的两个NFS本地客户端的挂载点分别为/v/video和/video,不同客户端的挂载点可以不相同。
客户端正确挂载完毕后,就进入到NFS客户端挂载点所在的/v/video或/video目录,此时可以看到NFS服务器端/video共享目录下的所有数据。在客户端上查看时,NFS服务器端/video目录就相当于本地客户端磁盘分区或目录,几乎感觉不到使用上的区别,根据NFS服务器端授予的NFS共享权限以及共享目录本地系统权限,只要在指定NFS客户端操作挂载/v/video或/video目录,就可以将数据轻松地存取到NFS服务器端的/video目录。
客户端挂载NFS后,本地挂载基本信息显示如下:
从挂载信息来看,和本地的磁盘分区几乎没什么差别,只是文件系统对应列的开头是以IP地址开头的形式了。
NFS系统是通过网络来进行数据传输的,因此NFS会使用一些端口来传输数据,那么,NFS到底使用哪些端口来进行数据传输呢?NFS服务两次重启向RPC服务注册的端口列表结果对比如下图:
由上面的实际测试得知,NFS在传输数据时使用的端口会随机选择。那么,NFS客户端是怎么指导NFS服务器端使用的是哪个端口的呢?
答案是通过RPC(Remote Procedure Call,远程过程调用)协议/服务来实现,这个RPC服务的应用在门户级的网站有很多,如百度。
2. 什么是RPC
因为NFS支持的功能相当多,而不同的功能会使用不同的程序来启动,每启动一个功能就会启用一些端口来传输数据,因此,NFS的功能所对应的端口无法固定,它会随机取用一些未被使用的端口作为传输之用。
因为端口不固定,这样一来就会造成NFS客户端与NFS服务器端的通信障碍,因为NFS客户端必须要知道NFS服务器端的数据传输端口才能进行通信,才能交互数据。
要解决上面的困扰,就需要通过远程过程调用RPC服务来帮忙了,NFS的RPC服务最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端发出请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,从而确保客户端可以连接到正确的NFS端口上去,达到实现数据传输、交互数据目的。这个RPC服务类似NFS服务器端和NFS客户端之间的一个中介,NFS工作流程如下图所示:
这就好比我们要找房子,这里的我们就相当于NFS客户端,中介介绍房子,中介就相当于RPC服务,房子所有者房东就相当于NFS服务,租房的人找房子就要找中介,中介要预先存有房东的信息,才能将房源信息高速租房的人。
那么RPC服务又是如何知道每个NFS端口的呢?
当NFS服务器端启动服务时会随机取用若干端口,并主动向RPC服务注册取用的相关端口及功能信息,如此一来,RPC服务就知道NFS每个端口对应的NFS功能了,然后RPC服务使用固定111端口来监听NFS客户端提交的请求,并将正确的NFS端口信息回复给请求的NFS客户端,这样一来,NFS客户端就可以与NFS服务器端进行数据传输了。
在启动NFS Server之前,首先要启动RPC服务(CentOS7环境下位rpcbind服务),否则NFS Server就无法向RPC服务注册了。另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会丢失,因此,此时RPC服务管理的NFS程序也需要重新启动以重新向RPC注册。要特别注意,修改NFS配置文件后是不需要启动NFS的,直接在命令行执行systemctl reload nfs或exportfs -rv即可使修改的/etc/exports生效。
3. NFS的工作原理
NFS工作原理简图当访问程序通过NFS客户端向NFS服务器端存取文件时,其请求数据流程大致如下:
1)用户访问网站程序,由程序在NFS客户端上发出存取NFS文件请求,这时NFS客户端(执行程序的服务器)的RPC服务(rpcbind服务)就会通过网络向NFS服务器端的RPC服务的111端口发出NFS文件存取功能的询问请求。
2)NFS服务器RPC服务找到对应已注册的NFS端口后,通知NFS客户端RPC服务。
3)此时NFS客户端获取到正确的端口,并与NFS daemon联机存取数据。
4)NFS客户端将数据存取成功后返回给前端访问程序,告知给用户存取结果,就完成了一次存取操作。
因为NFS的各项功能都需要向RPC服务注册,所以只有RPC服务才能获取到NFS服务的各项功能对应的端口号、PID、NFS在主机所监听的IP等信息,而NFS客户端也只能通过向RPC服务询问才能找到正确的端口。也就是说,NFS需要有RPC服务的写住才能成功对外提供服务。因此,无论是NFS客户端还是NFS服务器端,当要使用NFS时都需要首先启动RPC服务,NFS服务必须在RPC服务启动之后启动,客户端无须启动NFS服务,但需要启动RPC服务。
网友评论