关于nfs4.1客户端负载超高,挂载hang住的问题排查
【问题现象】
多台NFS客户端,挂载同一服务端目录。新增两台客户端后,发现这两台NFS客户端系统负载不正常的高,CPU和磁盘监控数据都正常。 且运行一段时间后会偶发出现挂载丢失,hang住。df -h和ls命令查询无反应的情况。
16U的服务器,hang住之后,负载持续上升到300多,重新mount也无反应,此时只能reboot进行重启
【问题排查】
1、查看nfs服务端cat /var/log/messages,查看到有持续输出的日志:
kernel: NFSD: client x.x.x.x testing state ID with incorrect client ID
且其中的IP为新增两台服务器
2、umount其中一台服务器的挂载,tail -f /var/log/messages,NFSD告警日志停止输出
3、怀疑是新增服务器的NFS挂载请求的问题,检查客户端nfsstat -m和服务端nfsstat -s
原其他客户端服务器linux7.3,nfsstat -m 检查版本vers=4.0,nfs-utils版本1.3.0-0.33
NFS服务端linux7.4,nfsstat -S版本为nfsv4,nfs-utils版本1.3.0.-0.33
新客户端服务器为linux 7.9,nfsstat -m 版本是vers=4.1,nfs-utils版本1.3.0-0.68。
4、nfs4.1版本中新增了session分配clientid的特性,但是对于服务端还是4版本的,可能不支持该特性,导致有多台4.1客户端连接的时候,产生数据读写的冲突,也引发了在客户端服务器上,对挂载数据的读写使得系统负载很高的问题。
https://www.likecs.com/show-305428643.html
具体负载原因未进一步分析。
【问题解决】
调整高版本服务器的挂载命令,mount -t nfs -o vers=4.0
重新执行挂载,查看nfs server的messages,kernel NFSD的日志消失
运行进程,持续一段时间观察load average,恢复正常。
【后续补充】
服务端和客户端都升级到linux 7.9,nfs-utils版本1.3.0-0.68时,
默认mount -t nfs4客户端v4.1版本挂载,仍会导致客户端负载过高以致hang住的问题。
调整为mount -t nfs vers=4.0,则会出现多个客户端无法同时访问同一目录的问题。
调整为mount -t nfs vers=3,使用3版本挂载正常。
原因未明。