ceph pg inconsistent不一致,ceph pg repair无效

更多ceph相关文章详见知乎ceph专栏聊聊ceph


ceph pg repair指令执行后,无效原因分析

ceph pg repair这一操作会先进行pg scrub,得到该PG中不一致的对象,然后再进行recovery。
pg scrub时主副本和从副本均会进行资源预约,只有当scrubs_pending + scrubs_active < cct->_conf->osd_max_scrubs时scrub才能继续进行,也即repair才能进行,否则,repair会失效。

其中:

scrubs_pending: 该osd已经预约成功,即将进行scrub的pg
scrubs_active: 该osd正在进行scrub的对象
osd_max_scrubs: 一个osd同一时刻默认只能有一个pg做Scrub

资源预约的函数如下,倘若预约失败,主副本或从副本的日志中便会打印出相关日志

bool OSDService::inc_scrubs_pending()
{
    if (scrubs_pending + scrubs_active < cct->_conf->osd_max_scrubs)   //osd_max_scrubs默认是1
    {
        ....  
    }
    else
    {
        dout(20) << "inc_scrubs_pending " << scrubs_pending << " + " << scrubs_active << " active >= max " << cct->_conf->osd_max_scrubs << dendl;
    }
}

解决办法:

把三副本的osd的osd_max_scrubs都先调大,等到修复好后再调回为1。
有可能调大osd_max_scrubs也没用,因为可能一大波正在等待scrub的pg占满了调大的资源,故而可以先关闭scrub(ceph osd set noscrub,ceph osd set nodeep-scrub)

要点

  • osd有三副本,当不一致时修复时会以谁为权威?
    以三副本的osd id排序,以id小的为主,如果id小的对应的不一致的文件能够stat得到,也没有其他什么异常,便会以其为权威。不一定以主为权威。

若权威副本损坏导致的不一致是不能直接使用ceph pg repair的,主副本损坏的修复可参见

  • 主副本和从副本均有可能因为资源预约失败
  • 初始调大为2,依然无效,调大为5,成功

更多ceph相关文章详见知乎ceph专栏聊聊ceph

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值