使用qBittorent使用NFS对接nas存储的时候遇到的性能问题排查方法

问题表现

单独搭了一台qBittorent作为nastools的自动化下载工具,然后使用NFSV4协议对接威联通NAS进行存储。

在使用过程中遇到了qBittorent异常的IO阻塞,时延高,但是查威联通存储池时延状态正常,磁盘读取速率很高。但是威联通到qBittorent的网络流量低,只有1-4M/s传输速度。

后面查了很多调优篇章,基本确定在以下几个问题

1、NFSV4协议下大批量读写文件操作为串行化,在客户端大量操作请求并发情况下,协议处理会形成阻塞

2、未启用async异步写,默认情况下为sync模式,写入时必须要落盘返回结果后这个IO线程才算完成,会影响IO时延,进而影响读写性能

3、开启noatime、nodiratime,这两个参数会更新文件和目录的时间戳,在高并发读写的情况下,会影响读写性能。

4、我使用的ZFS文件系统,底层文件系统为8k分页,传输时建议使用8k分页大小

优化方法也很简单

1、把NFS协议从V4修改为使用V3协议

2、关闭文件锁nolock,如无多客户端同时访问需求建议关闭

2、开启async异步写

3、禁用noatime、nodiratime参数

4、增加rsize和wsize参数为8192值

5、若你的NFS服务端支持UDP协议挂载,可以把NFS调整为使用UDP协议连接(仅内网环境使用)

通过调整NFS参数,目前qBittorent上传和下载性能恢复正常,时延大约在30-40ms左右,比起此前几乎10000+MS的时延以及几乎无速度的上传状态,基本上解决了性能问题。

实现到挂载/etc/fstab的参数效果如下

192.168.xx.xx:/dir1 /mnt/dir1 nfs  vers=3,nolock,proto=tcp,rsize=8192,wsize=8192,noatime,nodiratime,async,_netdev 0 0
192.168.xx.xx:/dir2 /mnt/dir2 nfs  vers=3,nolock,proto=udp,rsize=8192,wsize=8192,noatime,nodiratime,async,_netdev 0 0

下面是从原文网站摘抄的有关NFS参数的解析,可根据自己需要进行调整

1、查看当前挂载配置

cat /var/lib/nfs/etab	查看NFS服务器端配置参数的细节
cat /proc/mounts	查看客户端mount的挂载参数细节

2、NFS客户端mount挂载参数说明

fg/bg		默认[fg],在客户端执行挂载时,可以选择在前台(fg)执行还是在后台(bg)执行
soft/hart	默认[hart]当网络和server出问题时,soft参数会在超时后停止挂载,hard参数会一直挂载直到成功(但可能造成客户端无响应,常配合intr参数使用)
intr		当hard挂载资源timeout后,若使用intr参数可在超时后终端挂载,防止NFS锁死
resize/wsize	读出和写入的区块大小,影响客户端与服务器段传输数据的缓冲存储量
proto=tcp	默认[tcp]传输使用的协议,跨internet建议tcp有较好的纠错能力,内网建议用udp提高性能

3、原文作者推荐的挂载参数

极致性能
mount -t nfs -o fg,hart,intr,resize=13107,wsize=131072 172.16.1.31:/date/ /mnt
简单快捷
mount -t nfs 172.16.1.31:/date/ /mnt
# 默认参数能满足大部分需求

4、mount -o可以使用的参数

ro/rw	 	■以只读/读写方式挂载
dev/nodev	是否保留装置文件的特殊功能,如分区和光驱的区别,建议一般nodev
sync/async	●直接同步写入磁盘,还是异步先写入内存再后续写入硬盘
auto/noauto	允许/不允许以–a选项进行自动挂载
exec/noexec	●是否具有执行文件的权限,如果挂载的用途是数据存储,建议noexec
suid/nosuid	●挂载的文件系统,是否取消suid这个权限
user/nouser	是否允许一般用户的挂载与卸载功能
dirsync		●目录更新时同步写入磁盘
remount		尝试重新挂载已经挂载了的文件系统
noatime		■访问文件时不更新文件inode中的时间戳,高并发环境可提高性能
nodiratime	■同上,不更新目录的访问时间戳atime
defaults	使用所有选项的默认值(auto、nouser、rw、suid)
loop 	        挂载“回旋设备”以及“ISO镜像文件”

●表示安全优化参数,■表示性能优化参数,安全和性能是对立的

remount参数很重要,在文件系统变为只读后,进入单用户模式修复时,要使用mount -o remount,rw /** 来重新挂载目录

以上参数有部分只在fatab中有效,sync至在ext234\fat\vfat\ufat中有效

5、企业生产环境下NFS优化挂载3种常见用法

1)默认挂载
mount -t nfs IP:目录 /挂载点
# 其实centos的默认挂载性能已经非常不错了
2)性能优化
# 减少更新访问时间戳产生的磁盘I/O
mount -t nfs -o noatime,nodiratime IP:目录 /挂载点
3)安全优化
# 进行执行和提权执行,防挂马
mount -t nfs -o nosuid,noexec,nodev IP:目录 /挂载点
4)安全和性能都优化
mount -t nfs -o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072 IP:目录 /挂载点

注意:本地文件系统挂载时不能加odiratime选项,会报错

6、NFS内核优化说明和建议

proc/sys/net/core/rmem_default	指定接收套接字的缓冲区默认大小(默:124928)
proc/sys/net/core/rmem_max		指定接收套接字的缓冲区的最大值(默:124928)
proc/sys/net/core/wmem_default	指定发送套接字的缓冲区默认大小(默:124928)
proc/sys/net/core/wmem_max		指定发送套接字的缓冲区的最大值(默:124928)

优化命令如下:

cat >>/etc/sysctl.conf<<EOF
net.core.wmem_dafault = 8388608
net.core.rmem_dafault = 8388608
net.core.wmem_max = 16777216
net.core.rmem_max = 16777216
EOF
sysctl -p

7、企业场景NFS共享存储优化小结

硬件:SAS/SSD硬盘,组RAID10,网卡千兆,多块网卡做bond

NFS服务端配置优化:/目录 ip网段(rw,sync,all_squash,anonuid=65535,anongid=65534)

NFS挂载客户端优化:-o nosuid,noexec,nodev,noatime,nodiratime,intr,rsize=131072,wsize=131072

NFS服务器内核优化:命令见上面,要执行sysctl -p使配置生效

大型网站可用分布式文件系统替换NFS,Moosefs(mfs)和FastDFS适合小文件系统,GlusterFS适合大文件系统

如果卸载的时候提示umount: /mnt: device is busy,需要退出挂载目录再进行挂载,如果是NFS server宕机了,则需要强制卸载,执行命令umount -lf /mnt

原文:NFS文件系统-挂载和优化

发表回复

电子邮件地址不会被公开。必填项已用 * 标注