Rook部署Ceph集群后PG出现inactive、undersized+peered故障如何解决
问题原因
你部署的Ceph集群所有OSD都运行在同一个主机节点storage1-kube-domain-tld上,Ceph默认的CRUSH分布规则要求多副本必须跨不同主机存储,避免单节点故障导致数据丢失。当前4个OSD都属于同一主机,CRUSH算法无法找到足够多的独立主机存放3副本,因此所有PG都无法完成激活流程,卡在undersized+peered状态,且所有PG被集中调度到了同一个OSD上。
修复方案
根据你的部署场景选择对应方案即可:
场景1:单节点测试部署(仅有一台存储节点)
你可以调整CRUSH规则或池副本数适配单节点环境:
- 方案A:调低池副本数为1(仅适合测试,无数据冗余能力)
- 先查询当前池名称:
ceph osd pool ls - 调整对应池的副本数:
ceph osd pool set <你的池名称> size 1 --yes-i-really-mean-it
- 先查询当前池名称:
- 方案B:修改CRUSH故障域为OSD级别(保留多副本冗余,可容忍单OSD故障)
执行以下命令重建默认副本规则:ceph osd crush rule rm replicated_rule ceph osd crush rule create-replicated replicated_rule default osd
场景2:多节点生产部署(有多台存储节点)
你需要排查OSD调度异常问题:
- 检查Rook的OSD配置文件,确认节点选择器没有限制仅允许在
storage1-kube-domain-tld上调度OSD - 检查其他存储节点的磁盘是否满足要求:无残留分区/LVM、未被挂载、磁盘权限配置正确
- 重新部署OSD,确保至少3台存储节点都有可用OSD,满足默认跨主机副本要求
验证
调整完成后等待3-5分钟,执行ceph -s查看集群状态,正常情况下PG会逐步变为active+clean状态,集群健康等级恢复为HEALTH_OK。
内容的提问来源于stack exchange,提问作者roman
相关产品推荐
相关产品推荐

