部署 NFS 客户端时,需要在所有 OBServer 机器上进行操作。
以下以在某一台 OBServer 上的操作为例,提供操作指导。
登录 OBServer。
执行以下命令,通过 YUM 包管理器安装 NFS。
sudo yum install nfs-utils设置 Slot Table。
执行
sudo vim /etc/sysctl.conf命令,打开sysctl.conf配置文件,在文件中添加一行如下信息:sunrpc.tcp_max_slot_table_entries=128执行以下命令,将同时发起的 NFS 请求数量修改为 128。
sysctl -w sunrpc.tcp_max_slot_table_entries=128命令执行成功后,可以通过
cat /proc/sys/sunrpc/tcp_max_slot_table_entries命令查看设置是否生效,如果返回值为 128,则说明修改成功。(可选)重启机器。
选择一个合适的目录作为 Mount 点, 执行以下命令,挂载 NFS。
例如,本文档中假设 Mount 到
/data/nfs目录,如果没有合适的目录可以新建一个目录。sudo mount -tnfs4 -o rw,nfsvers=4.1,sync,lookupcache=positive,hard,timeo=600,wsize=1048576,rsize=1048576,namlen=255 100.xx.xx.xx:/data/nfs_server /data/nfs语句中:
nfsvers=4.1:由于备份依赖 nfs 4 原生的文件锁,建议使用 nfs 4.1 及以上版本。nfs 4.0 有一个已知 Bug,在重命名文件以后可能会读到旧文件。sync:使用同步写保证数据能及时刷到服务端,从而保证数据的一致性。lookupcache=positive:用于避免并发访问目录或者文件时误报目录或文件不存在的问题,保证数据的一致性。hard:在 NFS 不可用的情况下,系统会卡住应用的读写请求,以保证数据的一致性。不能使用soft选项,会有数据错误的风险。timeo:用于指定重试的等待时间,单位为 0.1s。在设置时,建议不要设置得过大,建议值为600。wsize:表示读的数据块大小,建议设置为1048576。rsize:表示写的数据块大小,建议设置为1048576。namlen:建议设置为255。100.xx.xx.xx:表示 NFS 服务器的 IP 地址。
注意
- 在挂载 NFS 时,必须保证备份挂载环境的参数中包含
nfsvers=4.1、sync、lookupcache=positive及hard。 - Docker 环境需要在宿主机上挂载 NFS,然后映射到 Docker 里面。如果 Docker 内部直接挂载 NFS,可能会出现客户端 Hung 住的场景。
挂载完成后,可执行以下命令,验证 NFS 的性能。
fio -filename=/data/nfs/fio_test -direct=1 -rw=randwrite -bs=2048K -size=100G -runtime=300 -group_reporting -name=mytest -ioengine=libaio -numjobs=1 -iodepth=64 -iodepth_batch=8 -iodepth_low=8 -iodepth_batch_complete=8例如,执行结果如下:
Run status group 0 (all jobs): WRITE: io=322240MB, aggrb=1074.2MB/s, minb=1074.2MB/s, maxb=1074.2MB/s, mint=300006msec, maxt=300006msec




