适用场景
- 产品:ZCF
- 组件:ZCE-X
- 涉及对象:双管理节点、OSD 硬盘、Ceph / ZCE-X 存储池
- 版本:5.2.115.5
- 触发条件: 存储环境中某块 OSD 盘已隔离,底层检查存在坏道,需要执行单盘更换。
问题现象
- 存储环境中有一块 OSD 处于隔离状态。
- 底层检查发现该盘存在坏道问题。
- 需要执行热插拔更换硬盘,并确保数据恢复和平衡过程安全进行。
判断方法
- 确认当前环境属于本文适用范围,并记录当前版本、目标版本、系统架构、操作系统、部署形态和存储类型等关键信息。
- 检查 Ceph 集群状态必须为健康。
- 通过
xms-manage db show-replication-info和xms-manage -s确认数据库、ES、ETCD 集群状态正常。 - 仅允许单次操作一台节点上的一个 OSD。
原因说明
目标 OSD 已隔离且底层检测存在坏道,因此需要先安全地下线故障 OSD,再执行硬盘热插拔更换,并在恢复阶段保持低速恢复以控制业务影响。
解决方案
1. 执行前准备
- 风险等级:低风险
- 变更前关闭云平台高可用并备份数据库。
- 单次只能操作一个节点上的一个 OSD。
- 在整个恢复过程中持续监控
ceph -s,避免长时间peering或remapped。
2. 处理步骤
- 检查集群状态与云平台环境。
xms-manage db show-replication-info
xms-manage -s
watch -n 1 ceph -s
- 预期结果:数据库、ES、ETCD、Ceph 状态均正常。
- 云平台侧关闭全局高可用并备份数据库。
zstack-ctl dump_mysql --file-name zstack-db-backup-master
zstack-ctl dump_mysql --file-name zstack-db-backup-slave
- 预期结果:高可用关闭成功,数据库备份完成。
- 在存储平台关闭数据恢复。
- 预期结果:恢复流量停止,便于安全移除 OSD。
- 底层通过命令行调整待更换 OSD 类型并停止 OSD。
echo xstore3 > /var/lib/ceph/osd/ceph-{osd_id}/type
cat /var/lib/ceph/osd/ceph-{osd_id}/type
systemctl stop ceph-osd@{osd_id}
systemctl status ceph-osd@{osd_id}
- 预期结果:目标 OSD 类型切换为
xstore3,服务停止且已离线。
- 持续观察
ceph -s,确认环境无持续peering状态后,在存储侧移除 OSD 并删除 OSD。
- 预期结果:故障 OSD 已成功从存储池移除。
- 对离线坏盘执行热插拔更换。
- 预期结果:更换后的新盘被系统正确识别。
- 在存储池中添加新磁盘。
- 选择与原环境一致的读缓存配置。
- 预期结果:新硬盘成功加入存储池。
- 开启数据平衡。
- 在存储 UI 中将恢复 QoS 设置为低速,并开启数据恢复。
- 预期结果:开始低速数据平衡恢复。
- 更换完成后,云平台侧开启云主机全局高可用。
- 预期结果:平台恢复正常高可用状态。
验证方法
- 执行
ceph -s,确认集群恢复健康。 - 检查新盘已正确识别并加入存储池。
- 检查高可用恢复后业务正常。
风险与回滚
- 风险:UI 移除 OSD 操作必须在底层完成对应处理后执行,否则可能引发异常。
- 风险:若
peering或remapped持续时间过长,可能影响业务。 - 风险:缩容/恢复会带来重平衡流量,建议恢复 QoS 保持低速。
- 回滚:已提供紧急处理思路,当 PG 卡住时可定位卡住的 PG 并执行:
ceph -s
ceph pg dump | grep -E "peering|remapped"
ceph pg dump | grep {pg_id}
ceph osd down {osd_id}
