nfs工作原理流程
如上图所示,当访问程序通过NFS客户端向NFS服务端存取文件时,其请求数据流程如下几点:
1、首先用户访问网站程序,由程序在NFS客户端上发出NFS文件存取功能的询问请求,这时NFS客户端(即执行程序的服务器)RPC服务(portmap 或rpcbind服务)就会通过网络向NFS服务端的RPC服务(即portmap或rpcbind服务)的111端口发出NFS文件存取功能的询问请求。
2、NFS服务端的RPC服务(即portmap或rpcbind服务)找到对应的已注册的NFSdaemon端口后,通知NFS客户端的RPC服务(即portmap或rpcbind服务)。
3、此时NFS客户端就可获取到正确的端口,然后就直接与NFS daemon联机存取数据了。
4、NFS客户端把数据存取成功后,返回给前端程序,告诉用户存取结果,作为网站用户,我们就完成了一次存取操作。
由于NFS的各项功能都需要向RPC服务(即portmap或rpcbind)注册,所以RPC服务(即portmap或rpcbind服务)才能获取到NFS服务的各项对应的端口号(portnumber)、PID、NFS在主机所监听的IP等,而NFS客户端才能够通过向RPC服务(即portmap或rpcbind服务)询问从而找到正确的端口。也就是说,NFS需要有RPC服务(即portmap或rpc服务),NFS服务只需在服务端后于RPC服务启动,客户端无需启动NFS服务。
NFS的rpc服务,在CentOS5.X下名称为portmap,在CentOS6.x下名称为rpcbind。
[root@nfsserver /]# /etc/init.d/nfs restart
Shutting down NFS daemon: [ OK ]
Shutting down NFS mountd: [ OK ]
Shutting down NFS quotas: [ OK ]
Shutting down NFS services: [ OK ]
Shutting down RPC idmapd: [确定]
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: [ OK ]
Starting NFS daemon: [ OK ]
正在启动 RPC idmapd: [确定]
从上面NFS服务启动过程的提示,可以看护运行NFS服务默认需要启动的服务或进程至少有:NFS quotas(rpc.rquotad)、NFS daemon(nfsd)、NFS mountd(rpc.mountd)。可以通过如下命令查看启动NFS后,系统中运行的NFS相关进程:
[root@nfsserver /]# ps -ef | grep -E 'rpc|nfs' rpc 3631 1 0 21:29 ? 00:00:00 rpcbind rpc服务 root 3688 2 0 21:31 ? 00:00:00 [rpciod/0] root 3824 1 0 21:32 ? 00:00:00 rpc.rquotad 磁盘配额进程 root 3828 1 0 21:32 ? 00:00:00 rpc.mountd 权限管理进程 root 3834 2 0 21:32 ? 00:00:00 [nfsd4] root 3835 2 0 21:32 ? 00:00:00 [nfsd4_callbacks] root 3836 2 0 21:32 ? 00:00:00 [nfsd] root 3837 2 0 21:32 ? 00:00:00 [nfsd] root 3838 2 0 21:32 ? 00:00:00 [nfsd] root 3839 2 0 21:32 ? 00:00:00 [nfsd] NFS主进程 root 3840 2 0 21:32 ? 00:00:00 [nfsd] root 3841 2 0 21:32 ? 00:00:00 [nfsd] root 3842 2 0 21:32 ? 00:00:00 [nfsd] root 3843 2 0 21:32 ? 00:00:00 [nfsd] root 3869 1 0 21:32 ? 00:00:00 rpc.idmapd root 4039 3260 0 21:43 pts/1 00:00:00 grep -E rpc|nfs
以上的进程查看均可以执行“man 进程名”来查看进程的功能细节
例:[root@nfsserver /]# man rpcbind #查看rpcbind的信息
[root@nfsserver /]# man nfsd #查看nfsd的信息
NFS配置文件路径
[root@nfsserver /]# cat /etc/exports NFS服务主配置文件,配置NFS具体共享服务的地点,默认内容为空,以行为单位。 [root@nfsserver /]# /usr/sbin/exportfs NFS服务的管理命令 [root@nfsserver /]# /usr/sbin/showmount 常用来在客户端,查看NFS配置及挂载结果的命令;配置nfserver,分别在服务端以及客户端查看挂载情况。 [root@nfsserver /]# cd /var/lib/nfs/ [root@nfsserver nfs]# ls etab export-lock rmtab rpc_pipefs statd state v4recovery xtab [root@nfsserver nfs]# cat /var/lib/nfs/etab /data 192.168.161.0/24(rw,sync,wdelay,hide,nocrossmnt,secure,root_squash,no_all_squash,no_subtree_check,secure_locks,acl,anonuid=65534,anongid=65534,sec=sys,rw,root_squash,no_all_squash) NFS配置文件的完整参数设定的文件(有很多没有配置但是默认就有的NFS参数) [root@nfsserver nfs]# cat /var/lib/nfs/xtab 在CentOS-5.x 记录曾经挂载过的NFS客户端的信息,包括IP地址等,在CentOS-6.5中内容为空 [root@nfsserver nfs]# nfsstat #nfs状态 Server rpc stats: calls badcalls badclnt badauth xdrcall 100 0 0 0 0 Server nfs v4: null compound 1 1% 99 99% Server nfs v4 operations: op0-unused op1-unused op2-future access close commit 0 0% 0 0% 0 0% 5 3% 1 0% 0 0% create delegpurge delegreturn getattr getfh link 0 0% 0 0% 0 0% 31 20% 4 2% 0 0% lock lockt locku lookup lookup_root nverify 0 0% 0 0% 0 0% 2 1% 0 0% 0 0% open openattr open_conf open_dgrd putfh putpubfh 1 0% 0 0% 1 0% 0 0% 31 20% 0 0% putrootfh read readdir readlink remove rename 3 2% 0 0% 2 1% 0 0% 0 0% 0 0% renew restorefh savefh secinfo setattr setcltid 63 42% 0 0% 0 0% 0 0% 1 0% 2 1% setcltidconf verify write rellockowner bc_ctl bind_conn 2 1% 0 0% 0 0% 0 0% 0 0% 0 0% exchange_id create_ses destroy_ses free_stateid getdirdeleg getdevinfo 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% getdevlist layoutcommit layoutget layoutreturn secinfononam sequence 0 0% 0 0% 0 0% 0 0% 0 0% 0 0% set_ssv test_stateid want_deleg destroy_clid reclaim_comp 0 0% 0 0% 0 0% 0 0% 0 0%
1、NFS共享的目录:为NFS服务端要共享的实际目录,要用绝对路径。如(/data/bbs)
注意:共享目录的本地权限,如果需要读写共享,一定要让本地目录被NFS客户端的用户(nfsnobody)可以读写。
2、NFS客户端地址:为NFS服务端授权的可访问共享目录的NFS客户端地址,可以为单独的IP地址或主机名、域名等,也可以为整个网段地址,还可以用"*"来匹配所有客户端服务器可以访问,这里所谓的客户但端一般来说是前端的业务服务器,例如:web服务。