适用场景
- 产品:ZStack Cloud 双管理节点(MN)HA 部署。
- 版本:适用于所有使用
zsha2提供双管理节点 HA 的 ZStack Cloud 版本。 - 组件:ZStack Cloud 管理节点、
zsha2双 MN HA 工具包、MySQL 数据库(zstack-ctl dump_mysql)。 - 触发条件:发生断电后,ZStack MN 服务进入异常状态,其中一台管理节点失联且 UI 无法访问;两台 MN 的数据库已经发生漂移。
问题现象
- 客户环境发生断电,恢复供电后,其中一台管理节点失联,UI 无法访问。
- 备管理节点的 ZStack 服务处于异常状态,两台 MN 之间的数据库已经失同步。
zsha2 status与zsha2 db-status显示 HA 或数据库状态异常。
判断方法
- 在两台 MN 上分别执行
zsha2 status,确认 HA 状态并定位当前 VIP 所在节点。 - 在两台 MN 上分别执行
zsha2 db-status,确认数据库已经不同步。 - 查看管理节点日志,确认异常节点的日志中出现 “abnormal” / “demote” / “sync error” 等关键词,以判定故障仅限于一台节点,而非两台同时故障。
原因说明
断电可能导致其中一台 MN 的 zsha2 和数据库服务处于半启动状态。数据库一旦在两台 MN 之间产生漂移,两侧都没有权威依据,必须将出错的节点降级,使健康节点成为数据源,再由健康节点发起单向数据库同步。
解决方案
1. 执行前准备
- 在执行任何数据库操作前,请先在两台管理节点上分别执行一次新的 MySQL 备份。若数据库已出现“失同步”症状,应先备份,再进行任何
zsha2 db-sync,以避免不可恢复的状态。 - 确认两台 MN 之间的管理节点网络(22 端口、管理节点集群链路)健康。
2. 处理步骤
- 检查双管理节点服务和数据库状态。
- 在任一 MN 上执行:
zsha2 status
zsha2 db-status
- 在两台管理节点上分别备份数据库并停止管理服务。
- 在每台 MN 上分别导出 MySQL:
zstack-ctl dump_mysql
- 然后停止本地节点:
zsha2 stop-node
- 定位当前 VIP 所在节点。
- 在任一 MN 上执行:
zsha2 status
- 记录哪个节点显示
VIP = yes,该节点将保留 VIP。
- 将 VIP 切换到健康的节点。
- 在当前持有 VIP 且 仍报错的 MN 上执行降级:
zsha2 demote
- VIP 将被切换到另一台更健康的 MN。
- 在当前 VIP 所在节点上同步数据库。
- 在已切换为 VIP 的 MN 上执行:
zsha2 db-sync -p zstack.mysql.password
- 等待同步完成后再进行后续步骤。
- 确认数据库状态并启动双管理节点服务。
- 在 VIP 节点上执行:
zsha2 db-status
zsha2 start-node
- 最终状态检查。
- 在任一 MN 上执行:
zsha2 status
zsha2 db-status
- HA 状态与数据库状态应均显示健康。
验证方法
zsha2 status显示两台 MN 状态健康,且只有唯一 VIP 持有者。zsha2 db-status显示两台 MN 数据库已同步。- ZStack UI 可通过 VIP 访问并成功登录。
- 受影响集群上的云主机业务可达、未受干扰。
风险与回滚
- 风险:
zsha2 db-sync -p zstack.mysql.password会以单方向覆盖一端数据库。若源节点选错,可能销毁最近一次写入。 - 缓解措施: 在执行
db-sync前,务必在两台节点上分别执行zstack-ctl dump_mysql。若db-sync选错一侧,可从本地备份恢复。 - 回滚: 从执行同步前在失同步一侧导出的
zstack-ctl dump_mysql备份中恢复 MySQL。
