针对集群的pg出现inconsistent状态进行处理
课程滞销,帮帮松鼠哥~
如果是价格问题,咱可以私聊嘛,发个优惠券什么的都好说,这年头真的难=.=
在经过长时间的运行或者某些故障后,集群容易出现inconsistent状态的pg,本篇针对pg的scrub后出现的inconsistent状态进行一些讨论。
inconsistent状态的pg
松鼠哥的课程中对各类常见的pg状态做了详细的讨论,其中inconsistent状态的pg是集群对其进行scrub后发现的数据问题,该状态的发生通常是由于磁盘自身的错误,导致数据的当前的校验值与预期的校验值不一致,这种情况下我们可以尝试使用pg的修复机制指示集群对其进行修复
1 | ceph pg repair PGID |
对于因个别磁盘错误导致的不一致,通常repair可以正常修复,值得注意的是,如果集群当前正常开启scrub和deep-scrub,我们手动指定PGID进行scrub,该pg可能会没有明显反应,看起来像不生效一样,这是因为scrub任务是有序进行的,pg显示为inconsistent,表示其必然进行过scrub,当我们手工指定其进行repair,它需要重新排队等待资源进行scrub和repair,因此,如果我们手工指示osd进行pg的scrub和repair,最好先设置ceph osd set noscrub
和ceph osd set nodeep-scrub
,将scrub任务停止后,让出资源,再手动指定pg进行scrub和reapir,这样就可以在短时间内进行inconsistent的pg的修复。
如果osd对这种不一致的数据进行尝试修复失败了,pg状态就会演变成inconsistent+failed_repair
,如下情况
1 | data: |
在某些情况下,如集群节点发生了掉电、暴力关机等特殊故障后,就会产生这种难以修复的数据不一致,这是非常麻烦的情况,首先ceph health detail
看一下详情
1 | HEALTH_ERR 39 scrub errors; Possible data damage: 13 pgs inconsistent; 2 slow ops, oldest one blocked for 93308 sec, daemons [osd.4,osd.5] have slow ops. |
定位第一个pg 1.cb
它的osd为[2,22,27]
,分别查看它的日志
1 | osd.2 |
看起来是相同的数据对象在3个副本pg中都发生了错误,读取到的校验值与预想的不一致,这时ceph就无法自动处理了,
处理failed_repair
涉及的数据是rbd块存储,一个数据对象出错意味着对应的rbd对象4M数据都有问题,简单的处理办法就是删掉出错的对象,但直接删除4M过于简单粗暴,损坏的面积过大,我们可以尝试取3个pg副本中的其中一个来覆盖写这个出错的数据,尽可能将损坏面积降低。
首先把主osd停了,然后在这个osd对应的pg中导出目标数据块,然后再拉起这个osd
1 | systemctl stop ceph-osd@2.service |
osd的操作相当于restart,当osd起来后,对应的pg它的failed_repair状态会消失,因为重启后就没法保存这个状态了,只有再进行scrub才能重新发现不一致,这里我们不在意这点。
现在我们有了导出的数据,尽管它可能有损坏,接下来我们将这个数据重新导入集群
1 | rados -p rbd_data_pool put rbd_data.464a7ac7701b01.0000000000004d30 ./4d30 |
这个操作会使用导出的数据,重新覆盖写对应的对象,也就是rbd_data.464a7ac7701b01.0000000000004d30
这个对象,它对应的osd[2,22,27]
上的数据也将会被覆盖写,重新填入校验值,不过,在业务上,它的数据肯定是有一定程度损坏的,这个没办法避免,接下来重新对它进行scrub和repair
1 | ceph pg repair 1.cb |
osd完成pg的scrub后,对应的pg就正常了,接下来就是通知业务进行rbd的检查,评估可能故障的位置和面积。
总结
因异常导致的3个pg上同一个数据发生损坏,常规的repair是没办法修好的,松鼠哥也是第一次发现这种failed_repair
,查了半天没有太多有用的信息,邮件列表倒是有人提出,但是后面也没有解决。
本篇使用主osd导出对应的pg中的数据对象,然后重新在rados中覆盖导入,在一定程度上保留这个数据块的部份数据,损坏部份就无法完全恢复了,这也是尽力了。
- 本文作者: 奋斗的松鼠
- 本文链接: http://www.strugglesquirrel.com/2024/04/19/pg的inconsistent精讲/
- 版权声明: 本博客所有文章除特别声明外,创作版权均为作者个人所有,未经允许禁止转载!