NFS是Network FileSystem的缩写,即网络文件系统,它可以实现挂载远程电脑上的设备到本地从而像访问本地磁盘一样操作,有点类似于windows 的网上邻居。是SUN公司1984年开发的,v1版本只在SUN公司内部使用过,v2, v3, v4是公开版本,一般红帽5默认是v3版本,红帽6默认目前最新的v4版本。
How it works
我们知道一个程序是不可以直接操作硬件资源的,当一个程序需要读写硬盘数据时,需要把请求提交给内核Kernel, 然后由kernel再相关的结果返回给进程,这个过程我们称为本地过程调用Local Procedure Call. 如果当应用程序的进程要调用的库不在本地而是在远程主机上,这时我们就需要一种可以提供我们远程调用的技术,也就是我们经常会提到的RPC--Remote Procedure Call,那么RPC我们天天说,到底什么是RPC呢,简单的说RPC是为了简化公布式程序开发而开发出的一种编程技术,是一种技术框架,有了RPC开发人员就不用考虑本地如何去调用远程主机的库等资源,是透明的就像调用本地的一样,一切RPC就给办的妥妥的了。而著名的portmap就是RPC在Linux上的一种具体实现,工作在TCP和UDP的111号端口。
回到NFS上来简单说一下,NFS客户端要请求NFS服务器时,首先会先把请求发给本地的RPC stub存根调用,可以理解成RPC客户端然后通过RPC客户端与RPC服务端联系,RPC服务端通过分析知道请求的NFS资源,然后申请相应的空闲端口给NFS进程并通知给RPC客户端,这样NFS客户端就可以通过得到的端口号和服务器通信啦。
安装和配置
1、安装
使用rpm –qa | grep nfs-utils 查看软件包是否已安装
如果未安装 yum install –y nsf-utils 安装即可
简单说几个安装生成比较重要的文件或程序
/etc/rc.d/init.d/nfs
/etc/rc.d/init.d/nfslock
/etc/rc.d/init.d/rpcgssd
/etc/rc.d/init.d/rpcidmapd
/etc/rc.d/init.d/rpcsvcgssd //以上几个是生成的脚本
/etc/sysconfig/nfs //nfs的配置文件
/sbin/rpc.lockd //管理文件锁,防止同一文件多人同时读写造成文件损坏
/usr/sbin/exportfs //这个命令很重要,修改了exports文件后不需要重启nfs服务就可以刷新服务资源靠的就是他
/usr/sbin/mountstats //可以按挂载点查看客户端各种状态信息,很详细
/usr/sbin/nfsiostat //按挂载点查看客户端IO详细状态信息
/usr/sbin/nfsstat //可以查看服务端或客户端各种NFS状态信息
/usr/sbin/showmount //查看NFS服务器和挂载上的客户端各种信息
2、配置使用
I) /etc/exports 这个文件控制NFS服务器共享出去的资源以及访问权限等
在NFS服务器上编辑此文件加上一行
/nfs(服务器上要共享出去的目录) 192.168.0.0/24(rw,sync) 可以是单一的IP地址,也可以指定网段, rw-可读写,sync-同步写入, ro-只读, rsync-异步写入
mkdir /nfs 创建共享的目录
II) 保存退出启动nfs服务 service nfs start
启动后可以用以下命令查看已经成功共享
[root@ha1 hbase]# showmount -e localhost
Export list for localhost:
/nfs 192.168.188.0/24
III) 客户端挂载设备
mkdir /mnt/nfs 创建挂载点
mount –t nfs 192.168.188.128:/nfs /mnt/nfs
然后就可以切到/mnt/nfs目录下像操作本地磁盘一样了
此时在服务器上可以用showmount –a localhost查看都有哪些客户端挂载上来了
3、一些小缺陷和高级应用
nfs一个比较薄弱的环节在于对用户的身份认证,因为他是通过连接上来的用户的UID来识别用户的,所以只要你的UID和服务器上的某个存在的用户UID相同,你就可以拥有和此用户相同的权限,千说万说不如一看,上图:
在服务器上建立uid为8888的用户Hadoop,在/nfs目录创建hadoop目录并改属主属组为hadoop
在客户端创建一个用户openstack其uid也为8888,切换到已挂载的/mnt/nfs目录下,可以看到hadoop这个目录的属主属组已经变成openstack了,
再来测试一下权限:服务端用hadoop创建文件,客户端修改,删除完全无压力,呵呵是不是挺危险的呢。
没问题,nfs开发大神当时也意识到了这个缺陷,所以还是一点小小的补救措施的。
相关阅读:
Ubuntu 12.04安装NFS server
NFS服务器安装配置实现Ubuntu 12.04与ARM文件共享
Heartbeat_ldirector+LB+NFS实现HA及LB、文件共享
CentOS 5.5配置NFS服务器教程