NFS服务简介
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
NFS在文件传送或信息传送过程中依赖于RPC协议。RPC(Remote Procedure Call Protocol)——远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不需要了解底层网络技术的协议。RPC协议假定某些传输协议的存在,如TCP或UDP,为通信程序之间携带信息数据。在OSI网络通信模型中,RPC跨越了传输层和应用层。RPC使得开发包括网络分布式多程序在内的应用程序更加容易。NFS服务安装
查看系统是否已安装NFS所需的软件包(CentOS5检查portmap,CentOS6检查rpcbind)
[@JCluster01 ~]# rpm -qa|grep nfs
nfs-utils-1.2.3-64.el6.x86_64
nfs-utils-lib-1.1.5-11.el6.x86_64
[@JCluster01 ~]# rpm -qa|grep rpcbind
rpcbind-0.2.0-11.el6.x86_64
系统默认已安装了nfs-utils、rpcbind两个软件包。
如果当前系统没有安装FNS所需的软件包,需要手动安装。
在NFS服务器上配置/etc/exports
NFS主要有3类选项:
访问权限选项
设置输出目录只读:ro
设置输出目录读写:rw
用户映射选项
all_squash:将远程访问的所有普通用户及所属组都映射为匿名用户或用户组(nfsnobody);
no_all_squash:与all_squash取反(默认设置);
root_squash:将root用户及所属组都映射为匿名用户或用户组(默认设置);
no_root_squash:与rootsquash取反;
anonuid=xxx:将远程访问的所有用户都映射为匿名用户,并指定该用户为本地用户(UID=xxx);
anongid=xxx:将远程访问的所有用户组都映射为匿名用户组账户,并指定该匿名用户组账户为本地用户组账户(GID=xxx);
其它选项
secure:限制客户端只能从小于1024的tcp/ip端口连接nfs服务器(默认设置);
insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
sync:将数据同步写入内存缓冲区与磁盘中,效率低,但可以保证数据的一致性;
async:将数据先保存在内存缓冲区中,必要时才写入磁盘;
wdelay:检查是否有相关的写操作,如果有则将这些写操作一起执行,这样可以提高效率(默认设置);
no_wdelay:若有写操作则立即执行,应与sync配合使用;
subtree:若输出目录是一个子目录,则nfs服务器将检查其父目录的权限(默认设置);
no_subtree:即使输出目录是一个子目录,nfs服务器也不检查其父目录的权限,这样可以提高效率;
[@JCluster01 ~]# vi /etc/exports
/opt/uploadfiles 10.2.176.134(rw,sync,no_root_squash)
/opt/uploadfiles 10.2.176.135(rw,sync,no_root_squash)
/opt/uploadfiles 10.2.176.136(rw,sync,no_root_squash)
[@JCluster01 ~]# exportfs -rf
启动NFS服务
为了使NFS服务能正常工作,需要启动rpcbind和nfs两个服务,并且rpcbind一定要先于nfs启动。
[@JCluster01 ~]# service rpcbind start
Starting rpcbind: [ OK ]
[@JCluster01 ~]# service nfs start
Starting NFS services: [ OK ]
Starting NFS quotas: [ OK ]
Starting NFS mountd: rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
rpc.mountd: svc_tli_create: could not open connection for udp6
rpc.mountd: svc_tli_create: could not open connection for tcp6
[ OK ]
Starting NFS daemon: rpc.nfsd: address family inet6 not supported by protocol TCP
[ OK ]
Starting RPC idmapd:
查看NFS服务状态
[@JCluster01 ~]# service rpcbind status
rpcbind (pid 3028) is running...
[@JCluster01 ~]# service nfs status
rpc.svcgssd is stopped
rpc.mountd (pid 93356) is running...
nfsd (pid 93376 93375 93374 93373 93372 93371 93370 93369) is running...
rpc.rquotad (pid 93339) is running...
停步NFS服务
[@JCluster01 ~]# service rpcbind stop
Stopping rpcbind: [ OK ]
[@JCluster01 ~]# service nfs stop
Shutting down NFS daemon: [ OK ]
Shutting down NFS mountd: [ OK ]
Shutting down NFS quotas: [ OK ]
Shutting down NFS services: [ OK ]
Shutting down RPC idmapd: [ OK ]
设置NFS服务自动启动
对于实际的应用系统,每次启动LINUX系统后都手工启动nfs服务器是不现实的,需要设置系统在指定的运行级别自动启动rpcbind和nfs服务。
[@JCluster01 ~]# chkconfig --list rpcbind
rpcbind 0:off 1:off 2:on 3:on 4:on 5:on 6:off
[@JCluster01 ~]# chkconfig --list nfs
nfs 0:off 1:off 2:off 3:off 4:off 5:off 6:off
设置rpcbind和nfs服务在系统运行级别3和5自动启动。
[@JCluster01 ~]# chkconfig --level 35 rpcbind on
[@JCluster01 ~]# chkconfig --level 35 nfs on
服务器端使用showmount命令查询NFS的共享状态
[@JCluster01 ~]# showmount -e
Export list for JCluster01:
/opt/uploadfiles 10.2.176.136,10.2.176.135,10.2.176.134
客户服务器挂载
[@JCluster02 ~]mkdir /opt/uploadfiles
[@JCluster02 ~]# mount -t nfs 10.2.176.133:/opt/uploadfiles/ /opt/uploadfiles/
[@JCluster02 ~]# mount |grep nfs
10.2.176.133:/opt/uploadfiles/ on /opt/uploadfiles type nfs (rw,vers=4,addr=10.2.176.133,clientaddr=10.2.176.134)
启动自动挂载nfs文件系统
[@JCluster02 ~]# vi /etc/fstab
10.2.176.133:/opt/uploadfiles /opt/uploadfiles nfs defaults 0 0
[@JCluster02 ~]# mount -a
[@JCluster02 ~]# reboot
如果重启机器后,未挂载成功,参考下面修改方式,添加标黄的脚本
[@JCluster02 ~]# vi /etc/rc.d/rc.local
#!/bin/sh
#
# This script will be executed *after* all the other init scripts.
# You can put your own initialization stuff in here if you don't
# want to do the full Sys V style init stuff.
touch /var/lock/subsys/local
/opt/monitor/sec/bin/monitor > /dev/null 2>&1
mount -t nfs 10.2.176.133:/opt/uploadfiles /opt/uploadfiles
[@JCluster02 ~]# reboot