pg Incomplete和inconsistent状态源码逻辑和解决

本文详细介绍了Ceph集群中PG(Placement Group)处于Incomplete和Inconsistent状态的原因及解决方法。Incomplete状态通常由于peering未完成或异常导致,而Inconsistent状态则是数据副本间存在不一致。解决这些问题需要手动干预,如对比和修复PG数据,确保集群恢复正常。
摘要由CSDN通过智能技术生成

            首先我们从字面意思理解下这2个pg状态。

             Incomplete : 没完成

             inconsistent : 不一致

             那么是什么没完成和不一致呢? 简单来说Incomplete是pg peering没完成。inconsistent 是pg三副本中的数据不一致


一, Incomplete解说


                     pg Incomplete的实验方式:设置min_size足够大并且
osd_allow_recovery_below_min_size为false。 当设置好上述两个条件以后,那么需要将集群变为peering状态,这时只需要手动将一个osd down掉即可,然后ceph -s 发现集群有imcomplete状态了

                     pg Incomplete状态常见于ceph集群在peering状态下,来回重启服务器,或者掉电。peering本来是ceph一个全自动化的过程,为什么会造成没有完成?任何程序都会走到未知的异常流程里,也就是说这个异常是不符合逻辑的,根据逻辑是不会产生的,但他确实产生了,下面我们来看看Incomplete状态在什么时候抛出。

                    1,Incomplete状态在peering-->getLog状态中出现,也就是说,在选择权威日志的时候,权威日志没法完成,或者权威日志完成后和本地日志对比逻辑不正常,此时抛出Incomplete状态

                      

                     getLog里有2处地方抛出Incomplete。第1处地方是选择权威日志,如果选择权威日志失败,并且want_acting为空,那么就Incomplete。 第2处,如果权威日志选择成功,但是本地日志最后一次更新小于权威日志的日志尾,那就说明本地日志和权威日志不能重叠,那就有矛盾了,既然权威日志能选出来,那肯定日志重叠的,所以抛出Incomplete。

                     我们再看第1处,为什么权威日志不能选出来?原因如下(暂时不考虑EC):


              Getlog()调用choose_acting()来选择权威日志,choose_acting()调用find_best_info()选择权威日志,如果find_best_info()选择权威日志失败,那么创建临时pg,要么保持want_acting为空。 而这2个条件必然导致Getlog()里触发Incomplete。

    我们再看find_best_info()为什么会没有选出权威日志


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值