不能单独调高full_ratio救急,因其仅临时放宽写入限制而不释放物理空间,osd仍处于full状态,会导致health_err持续、pg卡在backfill_toofull、新写入失败或延迟飙升;必须配合ceph osd pause、降权已满osd及后续删数据或扩容。

不能只调 full_ratio 就“救急”——它只是临时开个缝,不删数据或扩容,集群很快会再次卡死。
为什么 ceph osd set-full-ratio 不能单独用
调高 full_ratio 只是让 Ceph 暂时忽略“写满”状态,允许继续写入。但它不解决根本问题:磁盘物理空间已耗尽。OSD 仍处于 full 状态,ceph -w 里持续报 HEALTH_ERR,PG 会卡在 backfill_toofull 或 stuck unclean,新写入可能失败或延迟飙升。
常见错误现象包括:
-
rbd rm报client.xxx.objecter FULL, paused modify -
ceph pg dump | grep full显示大量backfill_toofullPG -
ceph osd df中个别 OSD used% 超过 95%,但其他 OSD 远未满
必须配合 ceph osd pause 和权重调整
直接调 full_ratio 后立刻写入,极易触发回填风暴,把本就吃紧的网络和磁盘压垮。正确顺序是:
- 先执行
ceph osd pause—— 立即停止所有新写入和自动恢复,避免恶化 - 再查哪几个 OSD 真正满了:
ceph osd df | sort -k7 -n -r | head -5 - 对满的 OSD 临时降权(比如从 1.0 降到 0.6):
ceph osd crush reweight osd.X 0.6,让 CRUSH 少往它上面分新对象 - 最后调
full_ratio:ceph osd set-full-ratio 0.97(红帽明确警告不要 ≥ 0.97)
注意:reweight 不会立即迁移数据,但能阻止新数据继续涌入已满 OSD,比纯调阈值更可控。
Luminous+ 版本只认 ceph osd set-full-ratio
旧版本(Luminous 之前)用 ceph pg set_full_ratio,但现在这个命令已废弃。如果在 Octopus 或 Quincy 集群里误用,会报错 command not found 或静默失败。
验证是否生效,必须用:
ceph osd dump | grep full_ratio
输出应为类似 full_ratio 0.97。如果仍是 0.95,说明命令没执行成功,常见原因有:
- 没在 mon 节点执行(
cephadm shell进去再跑) - 权限不足(需 root 或 ceph admin keyring)
- 集群正在重平衡中,命令被排队延迟生效
调完之后最易忽略的三件事
很多人调完 full_ratio 就以为万事大吉,结果几小时后又崩。真正关键的是后续动作:
- 必须监控
ceph -w输出,等状态从HEALTH_ERR变成HEALTH_WARN(nearfull)才可考虑ceph osd unpause -
ceph df查具体哪个 pool 占用最高,优先清理:rbd ls -p pool_name | xargs -I{} rbd rm -p pool_name {}(谨慎!确认无业务引用) - 调回默认值前,一定要先删够数据——否则还原
full_ratio 0.95会瞬间锁死集群
临时调高阈值不是解决方案,只是争取出一个安全窗口。真正的出口只有两个:删数据,或者加 OSD。











