1. 故障现场
-
通过监控发现集群状态是HEALTH_ERR状态, 并且发现mds0: Metadata damage detected。 顾名思义,猜测应该是元信息损坏导致的。
image.png
2. 分析damage是啥原因导致
![2099201-86a82c56e96cb3cb.png](https://i-blog.csdnimg.cn/blog_migrate/69239344f76a1dccaa43602d6c4130b0.webp?x-image-process=image/format,png)
image.png
大概意思是:
- 从元数据存储池读取时,遇到了元数据损坏或丢失的情况。这条消息表明损坏之处已经被妥善隔离了,以使 MDS 继续运作,如此一来,若有客户端访问损坏的子树就返回 IO 错误。关于损坏的细节信息可用 damage ls 管理套接字命令获取。只要一遇到受损元数据,此消息就会立即出现。
3. 查看damage ls
-
通过指令查询到damage ls 显示的信息,可以发现里面有个ino编号。
image.png
4. 通过转换拿到十六进制ino
-
通过ino:1099519182934 -> ino: 10000734856
image.png
5. 检查是否属于目录(10000734856)
-
通过指令查找发现该ino确定是目录
image.png
6. 确定目录名
![2099201-1069c5b1987217ff.png](https://i-blog.csdnimg.cn/blog_migrate/a0e10d29726d4ebe76144378d47c314a.webp?x-image-process=image/format,png)
image.png
7. 该目录下面的所有文件
![2099201-88ee36a3547395a6.png](https://i-blog.csdnimg.cn/blog_migrate/f73c4519d40aab764d01d01356f6afde.webp?x-image-process=image/format,png)
image.png
8. 查看fs挂载的目录是否匹配
ceph fs ls -f json-pretty
9. 修复这个目录元信息
ceph --admin-daemon /var/run/ceph/ceph-mds.00.asok scrub_path /dir repair
![2099201-15d4a5a2d776dabb.png](https://i-blog.csdnimg.cn/blog_migrate/92cfdfe11b777a70ed94a1cf4d15cff6.webp?x-image-process=image/format,png)
image.png
10. 跟踪代码
参考文件:
- https://github.com/ceph/ceph/blob/5cdf9c3380098f5d2b1d988ab623c74baad55ee3/src/mds/MDSRank.cc#L2245
- https://github.com/ceph/ceph/blob/5cdf9c3380098f5d2b1d988ab623c74baad55ee3/src/mds/MDCache.cc#L12197
![2099201-6376697d8248b70f.png](https://i-blog.csdnimg.cn/blog_migrate/e8127bd5f7b9270ebf33145ce5987d71.webp?x-image-process=image/format,png)
image.png
![2099201-61580ab6b2892b1c.png](https://i-blog.csdnimg.cn/blog_migrate/72c4d15abbeeac612a59c23b2438bcdc.webp?x-image-process=image/format,png)
image.png
11. 总结
11.1 问题过程回顾
- 集群ERR
- 发现mds0: Metadata damage detected
- 查看damage ino
- 根据ino定位跟踪目录
- 根据目录名知道业务存储的数据
- 修复问题
12. 修复方案
12.1方案一:删除ino对应的目录(生产环境实战演练过)
1.业务方备份迁移数据
2.查看damage ls
![2099201-6f6a0cf39d94a7d9.png](https://i-blog.csdnimg.cn/blog_migrate/7c04d8c81990cedfdc6e76b20b594176.webp?x-image-process=image/format,png)
image.png
3.检查该ino确实没有对应的目录
![2099201-b605084d103a66ea.png](https://i-blog.csdnimg.cn/blog_migrate/adff91412c3669a51a4eb24e120a21bf.webp?x-image-process=image/format,png)
image.png
4.删除damage rm信息
![2099201-a2fe4d4e1a53501f.png](https://i-blog.csdnimg.cn/blog_migrate/eb819c7532cd27f5d55d102ecfa2664c.webp?x-image-process=image/format,png)
image.png
5.检查集群状态(集群状态从ERR恢复到WARN)
![2099201-e0d245d85e657396.png](https://i-blog.csdnimg.cn/blog_migrate/19305d6495146428d51f3d7471bf5484.webp?x-image-process=image/format,png)
image.png
12.2 方案二:修复该目录元信息
1.通过指令修复目录
ceph --admin-daemon /var/run/ceph/ceph-mds.ceph-newpublic-osd02.py.asok scrub_path /dir/xxx repair