Proxmox VE (PVE) 的 HA(高可用性)切换(Failover)并不是瞬间完成的,它依赖于一套复杂的集群状态监控机制。触发切换的核心条件可以概括为:“集群认定节点已失效” 且 “法定人数(Quorum)正常”。

具体触发条件和流程如下:

1. 核心触发条件:节点丢失法定人数 (Quorum)

PVE HA 的基础是 Corosync。当一个节点发生以下情况时,会触发 HA 流程:

  • 网络中断: 节点间的 Corosync 通讯中断(如心跳包丢失)。
  • 硬件宕机: 电源故障、CPU 挂起或内核崩溃(Kernel Panic)。
  • 人为重启: 未经过正常维护模式(Maintenance Mode)的非预期重启。

2. 状态机触发流程 (CRM 与 LRM)

PVE 的 HA 由两个核心服务管理:pve-ha-crm(集群资源管理器)和 pve-ha-lrm(本地资源管理器)。

  • 隔离 (Fencing) 触发: 当节点 A 失去网络连接,无法在规定时间内更新它在集群共享锁(通常在 /etc/pve 中)中的状态时,该节点会被标记为 unknown。
  • 硬件看门狗 (Watchdog): 为了防止“脑裂”(Split-brain),失去 Quorum 的节点 A 必须自杀。LRM 会触发 Watchdog(硬件或软件驱动)强制重启该节点,确保它不再访问共享存储。
  • 资源重分配: 当集群其余节点达成共识,确认节点 A 已被隔离(Fence)且处于安全状态后,CRM 会将运行在节点 A 上的 VM/CT 状态从 started 转移到其他健康节点上并启动。

3. 服务/资源级别的失效

除了节点宕机,以下情况也会触发 HA 动作:

  • 服务进入错误状态: 如果 VM 进程因非预期原因崩溃,且 HA 状态设定为 started,LRM 会尝试在本地重启。
  • 最大重启限制: 如果 VM 在本地多次重启失败(超过 max_restart 次数),CRM 可能会尝试将其迁移到其他节点(取决于配置)。

4. 关键的时间参数 (Thresholds)

在你这种涉及 150ms 高延迟节点 的环境中,触发条件对时间非常敏感:

阶段默认行为/时长说明
Corosync Token通常为 1000ms节点间失去联系超过此时间,开始怀疑节点失效。
LRM 状态更新约 60 秒LRM 必须每隔一个周期更新一次锁。如果 60s 没更新,CRM 介入。
Fencing 等待约 1-2 分钟从节点失效到 VM 在新节点启动,通常有 60-120 秒的死区时间。

5. 必须具备的前置条件

即使满足了上述触发条件,HA 切换也可能由于以下原因不触发:

  • 失去 Quorum: 如果集群中半数以上的节点宕机,且没有 QDevice 维持法定人数,整个集群的 HA 会停摆,以保护数据安全(防止多点写入共享存储导致镜像损坏)。
  • 未配置共享存储: 如果 VM 磁盘在本地硬盘,HA 虽然会尝试切换,但由于目标节点找不到磁盘镜像,启动会失败。
  • 未启用 HA 标记: 仅在 Datacenter -> HA 中添加了该 VM ID 的资源才受 HA 保护。

针对你的高延迟集群建议:

对于150ms 延迟的跨地域集群,触发 HA 的最大风险是 “误判”。建议在 corosync.conf 中适当调大 token 值和 consensus 时间,避免因瞬时网络抖动触发节点 Watchdog 重启。