CephFs 多节点并发读写,mds0: Client XXX:XXX failing to respond to capability release

场景描述:

在大概10台机器上面起了50个consumer实例运行,在这10台中选了1台运行一个producer实例。其中每个实例都会挂载cephfs中的同一个目录/online/import到本机。

其中producer 会删除目录下的文件

其他节点约50多个实例只会读取目录下的文件

问题描述:

CephFs会产生偶发性warning
在Mgr dashboard界面可以看到如下信息
cephfs/ceph-fuse: mds0: Client XXX:XXX failing to respond to capability release

暂时性解决办法

方法一:通过ceph health detail命令查看到具体出问题的client,将该client加入blacklist,然后再移除
方法二:将出问题的实例,重新挂载fs
方法三:如果是多活MDS的话,ceph health detail命令也显示出来是哪个MDS将Client标记为warning,重启该MDS。(有风险哦,自行评估)

问题查找

1. 参考了一些博客:

https://blog.51cto.com/michaelkang/1950506
我们集群MDS配置的mds_cache_memory_limit大小为30GB,排除了内存不足的原因

2. 参考了下官网对此的解释:
https://access.redhat.com/documentation/en-us/red_hat_ceph_storage/2/html/ceph_file_system_guide_technology_preview/troubleshooting

出现上述错误是因为
capabilities就像一把锁,如果一个client占有了,但是当client需要访问的时候,MDS会通知client来释放,如果超时就出现上述错误。

比如这种情况下会需要caps release:
https://www.spinics.net/lists/ceph-devel/msg39777.html
如果释放失败,或者超时就会报错。

对于我上面服务的场景来说,情况就是consumer读取到了文件,处理成功之后,producer需要删除该文件,此时就涉及到了capabilities的释放。

3. 根据ceph官网记录,可能这个4.9 kernel 存在的bug
https://tracker.ceph.com/issues/18798
https://ceph-users.ceph.narkive.com/8cpL6ibq/cephfs-ceph-fuse-mds0-client-xxx-xxx-failing-to-respond-to-capability-release
根据上面帖子中的讨论,4.9和4.4的内核都有这个问题存在。Ceph开发人员也建议升级到高于4.9的版本。

其他讨论:

https://tracker.ceph.com/issues/11482

https://tracker.ceph.com/issues/11482

官网的介绍中也指出可能出现问题的地方:

https://docs.ceph.com/docs/master/cephfs/troubleshooting/

If operations are stuck on a specific inode, you probably have a client holding caps which prevent others from using it, either because the client is trying to flush out dirty data or because you have encountered a bug in CephFS’ distributed file lock code (the file “capabilities” [“caps”] system).

最终

将服务全部部署在4.11的内核的机器上之后,确实没再出现过问题了。

你可能感兴趣的:(Ceph)