NFS的一个坑

杂七杂八的小寄巧

原因

集群用的文件存储方式是中心式的,由一台运行着 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()。有疏漏或错误的地方,欢迎大佬斧正。

发表回复

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

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据