什么是NFS
NFS(Network File System)即网络文件系统,它允许网络中的计算机之间通过TCP/IP网络共享资源。
NFS服务器可以让PC将网络中的NFS服务器共享的目录挂载到本地端的文件系统中,而在本地端的系统中来看,那个远程主机的目录就好像是自己的一个磁盘分区一样,在使用上相当便利;
为什么要部署NFS存储服务
在没有NFS文件共享存储时的原理解释:
当A用户上传图片到web1服务器时,然后B用户访问这张图片,结果B用户访问图片的请求到了负载均衡器的时候,被分发到web2服务器上,因为web2没有A用户上传的图片,所以B用户就无法看到A用户上传的图片。
实例:淘宝卖家将新出的产品资料上传到淘宝服务器。如果没有存储服务器,那么当大量的用户访问到这个淘宝卖家店里的时候,分发器将用户的请求都分发给淘宝的其他服务器,那么用户就无法看到卖家新出的产品了,这就导致了降低了用户体验。这样对一个户门网站来说是一个很大的错误。
在有NFS文件共享存储时的原理解释:
当A用户上传一张图片到web服务器中,分发器不论是转发到那一台web服务器,其内容最后都会被存放到NFS共享文件存储中。而当B用户访问A用户上传的图片时,无论请求被分发器分发web1还是web2上,最终都会到共享存储上找,都可以找到A用户上传的图片。
NFS原理
当我们在NFS服务器设置好一个共享目录/home/public后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到自己文件系统的某个挂载点,这个挂载点可以自己定义,如上图客户端A与客户端B挂载的目录就不相同。并且挂载好后我们在本地能够看到服务端/home/public的所有数据。如果服务器端配置的客户端只读,那么客户端就只能够只读。如果配置读写,客户端就能够进行读写。挂载后,NFS客户端查看磁盘信息命令:#df –h。
既然NFS是通过网络来进行服务器端和客户端之间的数据传输,那么两者之间要传输数据就要有想对应的网络端口,NFS服务器到底使用哪个端口来进行数据传输呢?基本上NFS这个服务器的端口开在2049,但由于文件系统非常复杂。因此NFS还有其他的程序去启动额外的端口,这些额外的用来传输数据的端口是随机选择的,是小于1024的端口;既然是随机的那么客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?这时就需要通过远程过程调用(Remote Procedure Call, RPC)协议来实现了!
什么RPC服务
RPC指远程过程调用。
因为NFS支持的功能比较多,而不同的功能都会使用不同的程序来启动,为启动一个功能就会启用一些未被使用的端口来作为传输只用,因为端口的不固定,这样一来就会造成NFS客户端与NFS服务器端的通信障碍没因为NFS客户端必须要知道NFS服务器端的数据传输端口才能进行通信,才能交互数据。
为了解决上述的问题,就需要RPC服务,NFS服务的RPC服务最主要的功能就是记录每个NFS功能所对饮的端口号,并且NFS客户端请求时将该端口和功能对应的信息传输给请求数据的NFS客户端,从而保证客户端可以连接到正确的NFS端口上去,达到实现数据交互的目的。
服务端的RPC服务如何知道每个NFS的端口的:
当NFS读取端启动服务时会随机取用若干端口,并主动向RPC服务注册相关端口的对应的功能,然后RPC服务使用固定的111端口来监听NFS客户端提交的请求,并将正确的NFS端口信息回复给请求的NFS客户端。
NFS的挂载基本使用过程
请求数据的流程:
- 首先用户访问网站程序,由程序在NFS客户端上发出存取NFS文件的请求,这时NFS客户端的RPC服务就通过网络向NFS服务器端的RPC服务的111端口发出NFS文件存取功能的查询请求,包括要实现的什么功能。
- NFS服务器端的RPC服务找到对应的已注册的NFS端口,通知NFS客户端的RPC服务。
- 此时NFS客户端获取到正确的端口,并与NFS联机存取数据。
- NFS客户端把数据存取成功后,返回给客户端程序,告知用户存取结果。
注意:因为NFS的各项功能都需要向RPC服务注册端口,所以只有RPC服务才能获取到NFS服务的各项功能对应的端口号,PID、NFS在主机监听的Ip等信息,而客户端也只能通过向RPC服务询问才能找到正确的端口,因此,无论是NFS服务端还是NFS客户端都需要RPC服务的协助才能完成对外服务及请求。