nfs优化与错误Lock reclaim failed、Input/output error
侧边栏壁纸
博主昵称
yuc

  • 累计撰写 291 篇文章
  • 累计收到 0 条评论

nfs优化与错误Lock reclaim failed、Input/output error

yuc
yuc
2023-07-31 / 最后修改: 2023-12-07 01:55 / 0 评论 / 5 阅读 / 正在检测是否收录...
0x0 异常

挂载目录卡住,查看 /var/log/messages 有如下错误:

NFS: nfs4_reclaim_open_state: Lock reclaim failed
0x1 参数优化

先说说系统参数优化:

_netdev,vers=4.0,rw,noatime,nodiratime,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,proto=tcp

基本上挂载的时候跟直接使用这些参数即可,其中 vers=4.0 需要显示的写出来,centos7测试使用 vers=4 或者不写的情况下,使用 mount 可以观察得到版本为 4.1 ,所以为了使用 4.0 版本,一定要显示写 4.0

0x2 服务优化

如果并发较大的情况下,可以增大 nfs 的进程数,以提高并发

0x3 系统优化

linux对nfs客户端同时请求数进行了限制,可以用下面的命令查询,大部分机器默认是2,是比较小的。可以通过以下命令查询当前的数值:

cat /proc/sys/sunrpc/tcp_slot_table_entries

内核编译的默认最大是2,可以增大设置成128,需要重新挂载nfs

echo "options sunrpc tcp_slot_table_entries=128" >> /etc/modprobe.d/sunrpc.conf
echo "options sunrpc tcp_max_slot_table_entries=128" >>  /etc/modprobe.d/sunrpc.conf
sysctl -w sunrpc.tcp_slot_table_entries=128

优化后重启机器,或者重新挂载nfs

PS.

服务器 fstab 或者命令挂载实例: /etc/fstab

192.168.xx.xx:/aaa/bbb      /opt/bbb   nfs     _netdev,vers=4.0,rw,noatime,nodiratime,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,proto=tcp 0 0

mount

mount -t nfs -o _netdev,vers=4.0,rw,noatime,nodiratime,rsize=1048576,wsize=1048576,hard,timeo=600,retrans=2,noresvport,proto=tcp 192.168.xx.xx:/mnt/dev1/aaa /tmp/aaa
2023.12.07 补充更新

上面的内核参数以及挂载方法只是当时临时解决了问题,但是后来在其他机器上无法解决。所以并不是一个最终方案。试过了nfs3、nfs4.0、nfs4.1版本,更换过机器多种版本内核,仍然无法解决,可以参考抓包内容:

  • 在挂载4.0版本的时候,ls文件卡住,包内容如下: 可以看到双方有非常多的设置 clientid、确认 的操作,这显然是不正常的

  • 在挂载4.1版本的时候,ls文件很快,创建文件、读取文件、vi文件错误,但是创建目录可以 抓包内容(仅对vi做抓包、后续观察more是同样的问题): 可以看到有非常多的 NFS4ERR_EXPIRED 这明显也是不正常的,因为不管是链接还是会话,都不可能这么快过期,在一个 vi 或者 more 的时间过期多次

    • 关于此错误代码的解释
13.1.5.3.  NFS4ERR_EXPIRED (Error Code 10011)

   A stateid or clientid designates locking state of any type that has
   been revoked or released due to cancellation of the client's lease,
   either immediately upon lease expiration, or following a later
   request for a conflicting lock.

在后续的查阅资料中也基本没有相关的案例、或者没有解决办法。于是猜测是 openbds 的 nfs BUG 之类。但是业务太多,其他几个挂载点目前没问题,不好重启 nfs 服务。


基于我们场景的现状,小文件非常多,有大量web项目war包解压出来的,还有jenkins打包的代码文件,所以目前的想法是采用多个 nfs 服务来提供这些不同服务的挂载。首先是避免大量读写小文件到一个 nfs 中处理不过来,再就是出现问题的时候,其中某个nfs重启也不影响其他的。

0

评论

博主关闭了当前页面的评论