问题现象

原因分析

Ceph有磁盘保护机制,当磁盘使用率超过 osd_backfill_full_ratio = 0.85 的设置,0.85这个是集群默认的配置。以osd.1为例,可以通过以下命令对这个值进行查询:

    场景一 当前集群的OSD使用率比较高,有其中一个OSD对应的磁盘出现故障,这时集群会自动进行数据平衡,把数据平衡到其他的OSD,此时如果使用率达>到0.85,那么数据就不会backfill到对应的OSD

    场景二 当前集群的OSD使用率比较高,此时增加了新的OSD,而仍有新的数据写入,此时集群在进行数据平衡时也是有可能部分OSD的使用率超过0.85

    处理过程

    当集群出现backfill_toofull时有可能是数据平衡导致部分OSD的使用率临时比较高,建议通过 命令先观察一段时间,看看是否有PG还在进行backfill的操作。如果有这种状态,建议观察一段时间,看看是否能够恢复正常。如果过了一段时间之后集群状态静止,没有再进行backfill的操作,对应的状态可以参考故障描述中提供的状态信息,到了不调整 osd_backfill_full_ratio 就过不去的时候,可以参考以下方案先临时调高 osd_backfill_full_ratio 的值再对集群状态进行观察。不过在调整时,建议这个值不要一下调整的太高,建议一点点的往上调,同时调整的上限不要超过0.9,否则是有可能对集群造成不可预料的影响的。

    找出PG对应的UP set和acting set,然后确认这些OSD的磁盘利用率是否已经超过 osd_backfill_full_ratio 的设置。

    找到对应的OSD之后使用以下命令,调高一些

      等到PG recovery完成之后,重新将其调整过来

        出现backfill_toofull意味着OSD的使用率比较高,建议如果此时集群整体的OSD使用率比较高的话,可以考虑对集群进行一下扩容。

        结果验证

        通过ceph -sceph health detail确认集群状态为HEALTH_OK