文档目录

适用场景

  • 产品:ZCF
  • 组件:ZCE-X
  • 涉及对象:双管理节点、OSD 硬盘、Ceph / ZCE-X 存储池
  • 版本:5.2.115.5
  • 触发条件: 存储环境中某块 OSD 盘已隔离,底层检查存在坏道,需要执行单盘更换。

问题现象

  • 存储环境中有一块 OSD 处于隔离状态。
  • 底层检查发现该盘存在坏道问题。
  • 需要执行热插拔更换硬盘,并确保数据恢复和平衡过程安全进行。

判断方法

  1. 确认当前环境属于本文适用范围,并记录当前版本、目标版本、系统架构、操作系统、部署形态和存储类型等关键信息。
  2. 检查 Ceph 集群状态必须为健康。
  3. 通过 xms-manage db show-replication-info 和 xms-manage -s 确认数据库、ES、ETCD 集群状态正常。
  4. 仅允许单次操作一台节点上的一个 OSD。

原因说明

目标 OSD 已隔离且底层检测存在坏道,因此需要先安全地下线故障 OSD,再执行硬盘热插拔更换,并在恢复阶段保持低速恢复以控制业务影响。

解决方案

1. 执行前准备

  • 风险等级:低风险
  • 变更前关闭云平台高可用并备份数据库。
  • 单次只能操作一个节点上的一个 OSD。
  • 在整个恢复过程中持续监控 ceph -s,避免长时间 peering 或 remapped。

2. 处理步骤

  1. 检查集群状态与云平台环境。
   xms-manage db show-replication-info
   xms-manage -s
   watch -n 1 ceph -s
  • 预期结果:数据库、ES、ETCD、Ceph 状态均正常。
  1. 云平台侧关闭全局高可用并备份数据库。
   zstack-ctl dump_mysql --file-name zstack-db-backup-master
   zstack-ctl dump_mysql --file-name zstack-db-backup-slave
  • 预期结果:高可用关闭成功,数据库备份完成。
  1. 在存储平台关闭数据恢复。
  • 预期结果:恢复流量停止,便于安全移除 OSD。
  1. 底层通过命令行调整待更换 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,服务停止且已离线。
  1. 持续观察 ceph -s,确认环境无持续 peering 状态后,在存储侧移除 OSD 并删除 OSD。
  • 预期结果:故障 OSD 已成功从存储池移除。
  1. 对离线坏盘执行热插拔更换。
  • 预期结果:更换后的新盘被系统正确识别。
  1. 在存储池中添加新磁盘。
  • 选择与原环境一致的读缓存配置。
  • 预期结果:新硬盘成功加入存储池。
  1. 开启数据平衡。
  • 在存储 UI 中将恢复 QoS 设置为低速,并开启数据恢复。
  • 预期结果:开始低速数据平衡恢复。
  1. 更换完成后,云平台侧开启云主机全局高可用。
  • 预期结果:平台恢复正常高可用状态。

验证方法

  • 执行 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}
存储节点更换硬盘 | 技术方案 · KB | ZStack 资源中心