知识库故障排查物理机假死且存储心跳存活时云主机 HA 未触发

物理机假死且存储心跳存活时云主机 HA 未触发

故障排查ZCF · Cloud适用版本源素材未说明文章 IDKB-200145更新于2026-09-17

问题说明

本文整理了在物理机失联、其上的云主机在 UI 中进入 unknown 状态、但云主机 HA 未能触发、业务因此中断的场景中所使用的结构化排查流程。

现象

  • 一台物理机因管理面连接不可达而失联。
  • 该物理机上的所有云主机在 UI 中变为 unknown 状态,无法操作。
  • 尽管物理机实际上对平台已不可用,云主机 HA 触发。
  • 通过带外管理查看物理机时,存在硬件告警(例如硬盘背板告警)。
  • 重启各管理节点的 HA 服务无法恢复 HA,且可能破坏双管理节点数据库同步;平台可能需要回退到单管理节点模式以恢复 UI。

适用环境

  • 产品:ZCF
  • 版本:["4.x", "5.x"]
  • 组件:ZStack Cloud
  • Deployment form: 多物理机集群,使用共享主存储,且为双管理节点部署。

可能原因

  • 物理机处于假死(false-death / 假死)状态:操作系统已无响应,但部分内核层通道仍然存活。存储心跳仍存活,因此不满足 HA 前置条件。
  • 存储心跳探测未中断,导致 host checker 认为该物理机仍然可用,从而不触发 HA。
  • 平台仅在管理面 ping 失败 并且 存储心跳失败两个条件都满足时才触发 HA;在假死状态下,仅管理面检查失败。
  • 物理机上的 kvmagent 进程仍处于部分响应状态,并向平台汇报主机存活,即便它已无法承载云主机。

排查步骤

Note:

下方使用的标识符约定。 hostUuid 为受影响物理机的 UUID(例如 b0d4f7a62d6c4f3e8a9c1b2d3e4f5a6b)。vmUuid 为受影响云主机的 UUID。mgmtIp 是用于查询平台状态的管理节点 IP。

1. 确认物理机通过管理面不可达

  • 检查管理节点日志,确认平台首次发现物理机故障的时间。源案例中的观察示例:physical host 11 failed at 14:25:34; host self-check ping failed and the host was declared lost.
  • 命令(在管理节点上执行):
  zstack-cli LogInByAccount accountName=admin password='<password>'
  QueryHost uuid=b0d4f7a62d6c4f3e8a9c1b2d3e4f5a6b
  • 确认物理机状态在 UI 中变为 Disconnected(已断开)。

2. 观察云主机状态变化

  • 确认故障物理机上的云主机在 UI 中变为 unknown 状态。
  • 命令(列出受影响物理机上的云主机):
  zstack-cli LogInByAccount accountName=admin password='<password>'
  QueryVmInstance hostUuid=b0d4f7a62d6c4f3e8a9c1b2d3e4f5a6b
  • 记录时间戳以及受影响的云主机 UUID。

3. 跟踪 HA Worker 的决策

  • 检查管理节点的 HA 日志,确认 HA Worker 已针对故障物理机触发:
  grep "14:25" /usr/local/zstack/apache-tomcat/logs/management-server.log
  grep -i "b0d4f7a62d6c4f3e8a9c1b2d3e4f5a6b" /usr/local/zstack/apache-tomcat/logs/management-server.log
  • HA Worker 会调用 host checker 来评估 HA 前置条件。检查 host-checker 日志以判断存储心跳检查是否通过。
  • 查找形如 host checker success rate 0.83 exceeds threshold 0.5 的日志特征,以确认假死判定。
  • HA 决策由 host checker 的成功率阈值(源案例中为 > 0.5)控制。若成功率高于阈值,则 不会 触发 HA。

4. 通过存储心跳和 kvmagent 确认假死状态

  • 检查故障物理机上的 kvmagent 日志(若能通过带外管理访问),以判断该 agent 是否真的已被 kill,还是处于卡死状态无法迁移或重启云主机:
  tail -1000 /var/log/zstack/zstack-kvmagent.log | grep -iE "<vmUuid>|libvirt|qemu|kvm|destroy|kill|shutdown|poweroff|traceback|exception|error"
  • HA 决策基于 host checker 的聚合结果;只要存储心跳有一次部分响应,成功率就会保持在阈值之上,从而阻止 HA 触发。

5. 按物理机状态分流

  • 若物理机处于真死(存储心跳也失败): HA 预期会自动触发。若未触发,则作为可能的 HA Worker bug 上报研发。
  • 若物理机处于假死(存储心跳仍响应但云主机不可达): HA 不会自动触发。请按下方"手动恢复"流程继续。

手动恢复(假死分支)

Note:

警告:手动恢复具有侵入性。请仅在确认物理机已被宣告不可达、并优先考虑业务恢复时执行。以下操作可能破坏双管理节点同步;请准备好回退到单管理节点模式。

源案例采用了以下手动恢复路径。

  1. 重启 HA 管理服务,尝试在 UI 中恢复受影响云主机的状态:
   zsha2 stop-node
   zsha2 start-node
  1. 若恢复过程中双管理节点数据库同步被破坏(例如由于某一管理节点离线),VIP 上的 UI 服务可能无法启动。此时可回退到单管理节点模式:在剩余的管理节点上重启服务,并通过该单管理节点 IP 访问 UI。
  2. 在单管理节点模式下 UI 可达后,强制停止受影响云主机的自动 HA 恢复,以终止恢复循环。
  3. 故障物理机经过物理修复并重启后,验证该物理机已重新连接至平台、云主机状态恢复正常后,再重新启用双管理节点模式。

验证方法

  • 物理修复后,受影响的物理机在 UI 中显示为 Connected(已连接)。
  • 云主机状态恢复正常,没有卡住的 HA 任务。
  • 双管理节点数据库同步恢复,VIP 上的 UI 服务可成功启动。
  • 集群恢复正常后,云主机 HA 的前置条件可被正确重新评估。

补充信息

  • 推荐的后续动作:物理机恢复后,收集故障时段的 kvmagent 日志,以确认云主机当时是确实被 kill 掉,还是由于物理机处于假死状态而只是不可达。这些证据可用于确认根因并改进后续的假死处理。
物理机假死且存储心跳存活时云主机 HA 未触发 | KB-200145 | ZStack 资源中心