原因
集群用的文件存储方式是中心式的,由一台运行着 PVE 的服务器提供 NFS 服务,但是时不时会有一些问题,比如这台服务器硬件/系统出现问题需要重启的时候。
默认的 NFS 配置存在一个检测 lease 状态的东西,但是真的出现异常的时候,nfsstat
里面这项 TEST_STATEID
会疯狂增加,网络带宽的相当大一部分都用来发送这个包,由于 home 目录就是挂载在 NFS 上的,这导致普通用户登录到客户机整体都会变得非常卡(需要文件交互)。
TEST_STATEID 有什么用
具体描述见 RFC 5661
大概就是在检测 seq 的状态,有没有锁,状态是否过期之类的。如果服务端 nfsd 重启了,这会涉及到非常多之前使用的 seq,就导致了上述的情况。
解决方法
很简单,关掉这个功能(这是一个可靠的小局域网环境),关闭命令很简单:
echo 0 > /proc/sys/fs/leases-enable
或者
sysctl -w fs.leases-enable=0
如果需要持久化这项设置,记得更改 /etc/sysctl.conf
关闭之后在服务端重启 NFS 服务即可。
补充
风险还是有的,从 RFC 的描述看这有锁的问题,不过没细研究具体的影响。Whatever, it works()。有疏漏或错误的地方,欢迎大佬斧正。