Skip to content

Latest commit

 

History

History
executable file
·
66 lines (55 loc) · 4.16 KB

yuanli.md

File metadata and controls

executable file
·
66 lines (55 loc) · 4.16 KB

NFS原理

NFS挂载原理介绍

如上图,当我们在nfs服务器设置好一个共享目录/data后,其他的有权访问NFS服务器的NFS客户端就可以将这个目录挂载到本地。并且能够看到服务端/data的所有数据。
因为挂载在本地的/data目录,其实就是服务器端的/data目录。
如果服务器端配置的客户端只读,那么客户端就只能够只读。
如果配置读写,客户端就能够进行读写。
挂载后,NFS客户端查看磁盘信息命令:#df –h
NFS是通过网络来进行服务端和客户端之间的数据传输。
两者之间要传输数据就要有想对应的网络端口来进行传输。
NFS服务器到底使用什么网络端口来传输数据的,
NFS服务器端其实是随机选择端口来进行数据传输。
那NFS客户端又是如何知道NFS服务器端到底使用的是哪个端口呢?
其实NFS服务器时通过远程过程调用(remote procedure call 简称RPC)协议/服务来实现的。也就是说RPC服务会统一管理NFS的端口,客户端和服务端通过RPC来先沟通NFS使用了哪些端口,之后再利用这些端口(小于1024)来进行数据的传输。
也就是RPC管理服务端的NFS端口分配,客户端要传数据,那客户端的RPC会先跟服务端的RPC去要服务器的端口,要到端口后再建立连接,然后传输数据。

《rpc与nfs》

rpc(portmap)就是用来统一管理NFS端口的服务,并且统一对外的端口是111。
NFS服务端需要先启动rpc,再启动NFS,这样NFS才能够到RPC去注册端口信息。
客户端的RPC可以通过向服务端的RPC请求获取服务端的NFS端口信息。
当获取到了NFS端口信息后,就会以实际端口进行数据的传输。(由于NFS端口为随机的。)

《RPC和NFS如何通讯》

因为NFS有很多功能,不同的功能需要使用不同的端口。因此NFS无法固定端口。
而RPC会记录NFS端口的信息,这样我们就能够通过RPC实现服务端和客户端的RPC来沟通端口信息。
那RPC和NFS之间又是如何之间相互通讯的?
首先当NFS启动后,就会随机的使用一些端口,然后NFS就会向RPC去注册这些端口。
RPC就会记录下这些端口。并且RPC会开机111端口,等待客户端RPC的请求,如果客户端有请求,那服务端的RPC就会将记录的NFS端口信息告知客户端。

####提示

在启动NFS SERVER之前,首先要启动RPC服务(即portmap服务,下同)否则NFS SERVER就无法向RPC服务区注册,
另外,如果RPC服务重新启动,原来已经注册好的NFS端口数据就会全部丢失。
因此此时RPC服务管理的NFS程序也要重新启动以重新向RPC注册。
特别注意:一般修改NFS配置文档后,是不需要重启NFS的,直接在命令执行/etc/init.d/nfs  reload或exportfs –rv即可使修改的/etc/exports生效。

####《客户端NFS和服务端NFS通讯过程》 1)首先服务器端启动RPC服务,并开启111端口 2)启动NFS服务,并向RPC注册端口信息 3)客户端启动RPC(portmap服务),向服务端的RPC(portmap)服务请求服务端的NFS端口 4)服务端的RPC(portmap)服务反馈NFS端口信息给客户端。 5)客户端通过获取的NFS端口来建立和服务端的NFS连接并进行数据的传输。 ####NFS相关协议及软件安装管理 协议: RPC(Remote Procedure Call Protocol)——远程过程调用协议 软件: nfs-utils-* :包括基本的NFS命令与监控程序  rpcbind-* :支持安全NFS RPC服务的连接

注:通常情况下,是作为系统的默认包安装的
        CentOS6.*之前rpcbind叫portmap。

####NFS系统守护进程

nfs:它是基本的NFS守护进程,主要功能是管理客户端是否能够登录服务器
rpcbind:主要功能是进行端口映射工作。当客户端尝试连接并使用RPC服务器提供的服务(如NFS服务)时,rpcbind会将所管理的与服务对应的端口提供给客户端,从而使客户可以通过该端口向服务器请求服务。