You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

移除OSD后修复Ceph集群active+undersized+degraded状态

集群恢复健康方案及正确OSD移除步骤

一、当前HEALTH_WARN状态恢复操作

1. 先排查核心问题

执行以下命令确认关键信息:

  • 查看存储池副本配置:ceph osd pool get <pool-name> size
  • 查看OSD拓扑与状态:ceph osd tree
  • 查看PG整体状态:ceph pg stat

2. 针对性修复操作

情况1:数据未完成迁移就移除OSD

  • 强制将osd.2权重设为0,排除其参与数据调度:ceph osd reweight osd.2 0
  • 触发PG重新扫描映射:ceph osd pg-scan
  • 用ceph -w监控数据迁移进度,等待所有PG状态变为active+clean

情况2:存储池副本数超过可用OSD承载能力

  • 下调存储池副本数至当前可用OSD能支撑的数值(比如剩余3个OSD则设为3):ceph osd pool set <pool-name> size 3
  • 同步调整min_size参数(需小于等于size):ceph osd pool set <pool-name> min_size 2

情况3:CRUSH规则与当前集群拓扑不匹配

  • 导出当前CRUSH规则:ceph osd crush rule dump
  • 修改规则适配剩余节点拓扑(比如将原4节点故障域调整为3节点)
  • 更新存储池使用的CRUSH规则:ceph osd pool set <pool-name> crush_rule <new-rule-name>

情况4:残留健康警告

当所有PG状态正常后,清除警告:ceph health reset

二、Rook集群正确的OSD移除步骤

  1. 标记OSD为Out并等待数据迁移

    • 查看目标OSD状态:kubectl -n rook-ceph get osd
    • 标记osd.2为out:ceph osd out osd.2
    • 执行ceph -w监控,直到osd.2的used数据完全迁移至其他OSD
  2. 从CRUSH Map中移除OSD

    • 删除osd.2的CRUSH权重:ceph osd crush remove osd.2
  3. 清理OSD认证与实例

    • 删除osd.2的认证密钥:ceph auth del osd.2
    • 删除osd.2实例:ceph osd rm osd.2
  4. 清理Kubernetes层面资源

    • 找到osd.2对应的PVC:kubectl -n rook-ceph get pvc | grep osd-2
    • 删除该PVC:kubectl -n rook-ceph delete pvc <osd-2-pvc-name>
    • 确认OSD Pod已被清理:kubectl -n rook-ceph get pods | grep osd-2
  5. 验证集群健康

    • 执行ceph -s确认集群状态为HEALTH_OK,所有PG处于active+clean

内容的提问来源于stack exchange,提问作者JDev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 22:18:33