Ceph erasure coding 3+2场景下单节点下线致写入失效求助
3+2纠删码集群单节点下线导致写入阻塞的排查方案
环境信息
- 集群规模:5台主机,每台搭载24块9.1TiB HDD,总存储容量1.2PiB,当前可用容量700TiB
- 存储配置:纠删码(EC)3+2,共128个placement group(PG),4个存储池,
min_size设为3
问题现象
单节点下线后,集群写入操作完全被禁用,不符合3+2纠删码可容忍2台节点故障的理论预期。
排查步骤
1. 检查PG状态与分片分布
- 执行
ceph pg stat查看整体PG健康状态,确认是否存在大量undersized或degraded的PG;用ceph pg dump_stuck unclean定位异常PG。 - 对异常PG执行
ceph pg map <pg-id>,查看该PG的3个数据分片是否集中在已下线的节点上——这种极端分布会导致单节点下线后可用数据分片数低于min_size=3,直接触发写入阻塞。
2. 验证存储池核心配置
- 执行以下命令确认存储池的
size和min_size配置:
3+2纠删码的ceph osd pool get <pool-name> size ceph osd pool get <pool-name> min_sizesize应等于5(3数据分片+2校验分片),min_size=3需确保可用数据分片数达标。若size配置错误(如小于5)或min_size过高,会触发写入保护机制。
3. 确认OSD状态与集群健康
- 用
ceph osd tree检查下线节点的OSD是否被标记为out:- 若OSD仅处于
down状态未被标记为out,集群会持续等待其上线,无法启动分片重建,导致PG无法满足min_size要求,进而阻塞写入。可手动执行ceph osd out <osd-id>标记OSD为下线状态。
- 若OSD仅处于
- 查看集群健康状态
ceph health detail,排除容量不足、网络分区等其他导致写入阻塞的因素。
4. 检查PG数量合理性
- 当前4个池共128个PG,单池仅32个PG,对于120个OSD(5*24)的集群来说数量过少,极易导致分片分布不均。EC池推荐PG数计算公式为:
(总OSD数 * 100) / 纠删码总分片数,即(120*100)/5=2400,建议每个池调整为600个PG(总2400),重新均衡分片分布。
5. 验证纠删码配置细节
- 执行
ceph osd erasure-code-profile get <profile-name>确认:k=3(数据分片数)、m=2(校验分片数)配置正确;crush-failure-domain设置为host,确保每个分片分散在不同主机上。若该参数设置为osd,可能出现同一主机承载多个数据分片的情况,单节点下线会丢失多份数据分片。
内容的提问来源于stack exchange,提问作者Deba Dey
相关产品推荐
相关产品推荐

