Press "Enter" to skip to content

CentOS 6.4安装配置NFS服务器

CentOS 6.4 64bit系统上设置NFS的过程,简单记录一下。

1,配置NFS服务端

$ yum install nfs-utils portmap  (适用centos 5)
$ yum install nfs-utils rpcbind  (适用centos 6)

假设服务端要挂载的目录是/mnt/koji,设置如下

$ vim /etc/exports
/mnt/koji       *(rw,async,no_root_squash,no_subtree_check)


参数说明:
rw:read-write,可读写;
ro:read-only,只读;
sync:同步写入(文件同时写入硬盘和内存),适用在通信比较频繁且实时性比较高的场合
async:异步写入(文件先写入内存,稍候再写入硬盘),性能较好(速度快),适合超大或者超多文件的写入,但有数据丢失的风险,比如突然断电等情况;
root_squash(默认):将来访的root用户映射为匿名用户或用户组;
no_root_squash:来访的root用户保持root帐号权限(可能会不安全);
no_all_squash(默认):访问用户先与本机用户匹配,匹配失败后再映射为匿名用户或用户组;
all_squash:将来访的所有用户映射为匿名用户或用户组;
secure(默认):限制客户端只能从小于1024的tcp/ip端口连接服务器;
insecure:允许客户端从大于1024的tcp/ip端口连接服务器;
anonuid:匿名用户的UID值,通常是nobody或nfsnobody,可以在此处自行设定;
anongid:匿名用户的GID值;
no_subtree_check:如果NFS输出的是一个子目录,则无需检查其父目录的权限(可以提高效率)

设置开机自启动

$ /etc/init.d/rpcbind start && chkconfig --level 2345 rpcbind on
$ /etc/init.d/nfs start && chkconfig --level 2345 nfs on

提示:
当每次向/etc/exports文件里添加了新的共享目录以后, 不需要重启NFS服务, 只需要执行以下命令即可:

$ exportfs -ra 

2,配置NFS客户端

客户端也需要安装以下两个软件包,否则会提示mount: wrong fs type, bad option, bad superblock on 192.168.1.xx:/mnt/koji的错误。

$ yum install nfs-utils portmap  (适用centos 5)
$ yum install nfs-utils rpcbind  (适用centos 6)

客户端不需要启动rpcbind和nfs服务即可挂载。

$ showmount -e 192.168.188.143  #查看服务端共享的目录
Export list for 192.168.188.143:
/mnt/koji 192.168.188.0/24

注意:如果这里提示clnt_create: RPC: Program not registered,只要在服务端运行一下rpc.mountd即可。

挂载到本地

$ mount -t nfs 192.168.188.143:/mnt/koji /mnt/koji -o nolock
也可以写成
$ mount -t nfs 192.168.188.143:/mnt/koji /mnt/koji -o nolock -o proto=tcp

NFS默认是用UDP协议,也可以加上-o proto=tcp换成TCP协议。

设置开机自动挂载

$ vi /etc/fstab
192.168.188.143:/mnt/koji    /mnt/koji  nfs  auto,nolock,intr,timeo=5,retrans=5,actimeo=10,retry=5,rsize=1048576,wsize=1048576,noatime,nodiratime,async 0       0

$ mount -a 全部挂载

如果执行mount -a时,一直没有返回,说明/etc/fstab里可能有一条有问题,那么如何找出之呢?

$ mount -vvv /mnt/nfs/    #一项一项的挂载,同时显示挂载日志
...
mount.nfs: mount(2): Stale NFS file handle
...

3,NFS相关参数

soft / hard
NFS请求超时后,决定NFS Client的重获行为。如果没有设置该值(默认值即为hard),NFS请求会无限期的重试。如果设置为soft,那么在retrans个请求重发失败后,触发NFS Client返回一个错误给调用的程序;

A so-called “soft” timeout can cause silent data corruption in certain cases. As such, use the soft option only when client responsiveness is more important than data integrity. Using NFS over TCP or increasing the value of the retrans option may mitigate some of the risks of using the soft option.
soft超时在特定的情况下,会导致无记载数据损坏。本身,在响应能力远比完整性重要时才使用soft选项。使用TCP或者增大retrans可以缓解使用soft的风险。

acdirmax=n
在目录更新后,只保留高速缓存的属性n秒。缺省值是60秒

acdirmin = n
在目录更新后,保留高速缓存的属性至少n秒。缺省值是30秒

acregmax=n
在文件修改后,只保留高速缓存的属性n秒。缺省值是60秒

acregmin=n
在文件修改后,高速缓存的属性保留至少n秒。缺省值是3秒

actimeo=n
为正常的文件和目录设置最小和最大时间是n秒。如果此选项设置,将覆盖所有的acregmin、acregmax、acdirmin、和 acdirmax选项的设置,该选项默认是没有启用。

timeo=n
NFS Client在重试NFS请求之前的等待响应时间(十分之一秒)。如果该选项没有设置,使用TCP协议时请求每60秒重新一次。使用TCP协议时,NFS Client不执行任何超时backoff;

对于UDP协议,client使用一个合适的算法,为常用的请求类型estimate合适的超时时间。但对不常用的请求类型使用timeo设置。如果timeo没有设置,不常用的请求类型1.1秒以后重试。在每次重发后,NFS Client会将timeout时间加倍,直到最大的60秒。

bg / fg
如果mount请求超时或失败,fg选项使mount命令退出返回失败状态。这就叫foreground mount,fg是默认值;

如果设置为bg,mount超时或者失败会使mount命令发起Child,持续的尝试mount。而父进程立即返回一个0。这就是background mount。如果缺少本地目录,mount命令表现为超时。

retry=n
mount(8)在前台或后台重试NFS mount放弃之前的分钟数。如果没有设置该选项,foreground mounts的默认值为2分钟,background mounts的默认值是10000分钟。

intr
允许通知中断一个NFS调用。当服务器没有应答需要放弃的时候有用处;

vers=n
挂载时指定服务器的版本,通常是3或者4;这里需要注意:
如果server全部是使用NFS3共享的目录,那么,client使用3或者4都可以;
如果server全部是使用NFS4共享的目录,那么,client使用3或者4都可以;
如果server共享出来的目录,即有NFS3又有NFS4,那么对于NFS3的目录,client在mount时需要加入vers=3的选项。

rsize=n,wsize=n
wsize和rsize设定了SERVER和CLIENT之间往来数据块的大小,这两个参数的合理设定与很多方面有关,不仅是软件方面也有硬件方面的因素会影响这两个参数的设定(例如LINUX KERNEL、网卡,交换机等等)。

下面这个命令可以测试NFS的执行效能,读和写的效能可以分别测试,分别找到合适的参数。对于要测试分散的大量的数据的读写可以通过编写脚本来进行测试。在每次测试的时候最好能重复的执行一次MOUNT和unmount。time dd if=/dev/zero of=/mnt/home/testfile bs=16k count=16384

用于测试的WSIZE,RSIZE最好是1024的倍数,对于NFS V2来说8192是RSIZE和WSIZE的最大数值,如果使用的是NFS V3则可以尝试的最大数值是32768。如果设置的值比较大的时候,应该最好在Client上进入mount上的目录中,进行一些常规操作(ls,vi等等),看看有没有错误信息出现。有可能出现的典型问题有LS的时候文件不能完整的列出或者是出现错误信息,不同的操作系统有不同的最佳数值,所以对于不同的操作系统都要进行测试。

Leave a Reply

Your email address will not be published. Required fields are marked *