问题现象
原因分析
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 -s
或ceph health detail
确认集群状态为HEALTH_OK