文档目录

适用场景

  • 产品: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 或数据库状态异常。

判断方法

  1. 在两台 MN 上分别执行 zsha2 status,确认 HA 状态并定位当前 VIP 所在节点。
  2. 在两台 MN 上分别执行 zsha2 db-status,确认数据库已经不同步。
  3. 查看管理节点日志,确认异常节点的日志中出现 “abnormal” / “demote” / “sync error” 等关键词,以判定故障仅限于一台节点,而非两台同时故障。

原因说明

断电可能导致其中一台 MN 的 zsha2 和数据库服务处于半启动状态。数据库一旦在两台 MN 之间产生漂移,两侧都没有权威依据,必须将出错的节点降级,使健康节点成为数据源,再由健康节点发起单向数据库同步。

解决方案

1. 执行前准备

  • 在执行任何数据库操作前,请先在两台管理节点上分别执行一次新的 MySQL 备份。若数据库已出现“失同步”症状,应先备份,再进行任何 zsha2 db-sync,以避免不可恢复的状态。
  • 确认两台 MN 之间的管理节点网络(22 端口、管理节点集群链路)健康。

2. 处理步骤

  1. 检查双管理节点服务和数据库状态。
  • 在任一 MN 上执行:
     zsha2 status
     zsha2 db-status
  1. 在两台管理节点上分别备份数据库并停止管理服务。
  • 在每台 MN 上分别导出 MySQL:
     zstack-ctl dump_mysql
  • 然后停止本地节点:
     zsha2 stop-node
  1. 定位当前 VIP 所在节点。
  • 在任一 MN 上执行:
     zsha2 status
  • 记录哪个节点显示 VIP = yes,该节点将保留 VIP。
  1. 将 VIP 切换到健康的节点。
  • 在当前持有 VIP 且 仍报错的 MN 上执行降级:
     zsha2 demote
  • VIP 将被切换到另一台更健康的 MN。
  1. 在当前 VIP 所在节点上同步数据库。
  • 在已切换为 VIP 的 MN 上执行:
     zsha2 db-sync -p zstack.mysql.password
  • 等待同步完成后再进行后续步骤。
  1. 确认数据库状态并启动双管理节点服务。
  • 在 VIP 节点上执行:
     zsha2 db-status
     zsha2 start-node
  1. 最终状态检查。
  • 在任一 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。
ZStack Cloud 双管理节点 HA 部署断电后管理数据库重新同步 | 技术方案 · KB | ZStack 资源中心