NFS概念描述:
NFS是Network File System的缩写,它的主要功能是通过网络让不同的机器系统之间可以彼此共享文件或目录。NFS客户端(一般为应用服务器,如web)可以通过挂载(mount)的方式将NFS服务器端共享的数据文件目录挂载到NFS客户端本地系统中(就是某一个挂载点下)。从本地NFS客户端的面器看来,NFS服务器端共享的目录就好像是自己的磁盘分区或者目录一样
NFS系统在工作场景一般用来存储共享视频、图片、附件等静态资源文件(对于用户上传的文件都放到NFS共享里,图片、附件、头像),是当前互联网系统架构中最常用的数据存储服务之一,特别是中小公司应用频率很高,大公司或门户MFS,GFS,FASTFS分布式系统
NFS在企业生产集群架构中的位置:
提示:中小企业一般不会买存储,大公司业务发展很快,可能会临时买存储顶一下,并继续加大可能存储扩展就相对很费劲,且价格成几何级数增加。淘宝就替换了很多硬盘设备集群软件,用lvs+haproxy替换了netscaler,用fastfs,TFS替换了netapp,emc存储。
如果只有两台NFS服务器可以通过inotify+rsync做实时同步
NFS挂载结构图
NFS挂载原理详细介绍:
如上图所示,当我们在NFS服务器端设置好一个共享存储目录/video后,其它的有权限访问NFS服务器端的NFS客户端可以将这个/video共享目录,挂载到NFS客户端本地系统上的某个挂载点(其实就是一个目录,这个目录可以自己随意指定),上图中两个NFS客户端本地的挂载点分别为/v/video和/video。
当正确挂载完毕后,进入到指定nfs客户端的/v/video或/video目录,就可以看到NFS服务端/video共享出来的目录下的所有数据。看起来NFS服务端的/video目录就相当于nfs客户端本地的磁盘分区或目录一样,几乎感觉不到区别,根据NFS服务端授予的NFS共享权限,只要在指定的NFS客户端操作挂载/v/video或/video的目录,就可以将数据轻松的存取到NFS服务端上的/video目录中。
挂载NFS后,NFS客户端本地的挂载内容显示如下:
[[email protected] ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
/dev/sda3 18375548 1509856 15932268 9% /
tmpfs 118188 0 118188 0% /dev/shm
/dev/sda1 198337 28568 159529 16% /boot
192.168.1.121:/video 18375552 1525088 15917056 9% /video
#192.168.1.121为nfs server的ip地址
如上所示:从挂载信息看来,和本地的磁盘分区几乎没什么差别,只是文件系统列的开头是ip地址开头的形式。
NFS系统是通过网络来进行数据传输的,因此NFS会使用一些端口来传输数据。而NFS使用的这些端口是随机选择的,这些随机的端口是通过RPC协议/服务来实现的,RPC(中文意思远程过程调用,英文Remote Procedure Call简称RPC)
NFS RPC最主要的功能就是记录每个NFS功能所对应的端口号,并且在NFS客户端请求时将该端口和功能对应的信息传递给请求数据的NFS客户端,让客户端可以连接到正确的端口上去,从而实现数据传输。RPC服务就类似NFS服务端和客户端之间的一个中介。
那么RPC又是如何知道每个NFS的端口呢?
原因是,当NFS服务端启动服务时会随机取用数个端口,并主动向RPC服务注册取用的相关端口信息,这样,RPC服务就知道了每个端口对应的NFS功能了,然后RPC服务使用固定的端口号111来监听NFS客户端的提交请求,将将正确的NFS端口应答给NFS客户端,这样一来,就可以让NFS客户端与服务端进行数据传输了。
提示:在启动NFS SERVER之前,首先要启动RPC服务(Centos5.8下为portmap服务,Centos6.4下为rpcbind服务),否则NFS SERVER就无法向RPC服务注册,另外,如果RPC服务重新启动,原来己经注册好的NFS端口数据就会丢失,因此,此时RPC服务管理的NFS程序也需要重新启动以重新向RPC注册。特别注意:一般修改NFS配置文件后,是不需要重起NFS的,直接在命令行执行/etc/init.d/nfs reload或exportfs -rv即可使修改的/etc/exports生效 |
再次强调:NFS的RPC服务,在Centos5.X下名称为portmap,在Centos6.X下名称为rpcbind。
更多的NFS相关信息可以参考:
http://www.citi.umich.edu/projects/nfsv4/linux/