2. vSphere HA核心机制解析

vSphere HA 的高可用能力并不是单一功能,而是由一组彼此协作的机制共同构成:集群内每台主机持续监控自身与邻居的存活状态,通过代理通信交换心跳与状态信息,在主机失联时区分“真故障”与“网络隔离”,最后依据优先级和准入控制决定哪些虚拟机在何处重启。理解这条链路,才能在生产环境中正确设置参数、判断告警含义,并在故障后快速定位问题。

一、主机故障检测:三种信号共同判定

vSphere HA 不会仅凭一次心跳丢失就宣布主机故障。它综合三类信号:

  • 管理网络心跳:主机之间通过管理网络周期性交换心跳,默认间隔约 1 秒。这是最直接的存活证据。
  • 数据存储心跳:每台主机在集群挂载的共享数据存储上写入自己的心跳文件(通常位于 .vSphere-HA 目录下)。当管理网络中断但存储仍可达时,其他主机可通过该文件判断对方是否仍在运行。
  • 主机自身状态:主机若发生紫屏(PSOD)、断电或硬件故障,会直接停止写入心跳,此时其他主机在超时后判定其故障。

判定故障的关键参数是主机故障检测时间,由“故障检测间隔”和“每主机最大故障数”共同决定。默认情况下,检测间隔约 1 秒,最大故障数通常为 3,因此大约 3 秒内未收到心跳即进入疑似故障状态。生产环境中不建议把该值调得过小,否则管理网络瞬时抖动可能触发误判;也不宜过大,否则虚拟机重启会被明显延迟。常见做法是保持默认,或在管理网络质量较差时适度放宽到 5~10 秒。

二、代理通信:FDM 与主机代理的协作

HA 的核心组件是FDM(Fault Domain Manager)代理。集群中会选举一台主机作为主主机(Master),其余为从主机(Slave)。主主机负责汇总状态、执行准入控制、决定虚拟机重启位置;从主机负责上报自身状态并执行主主机下发的重启指令。

代理之间的通信走管理网络,同时借助数据存储心跳作为补充通道。主主机与从主机之间持续交换“我还在”“我管理的虚拟机状态如何”等信息。当主主机自身故障时,集群会重新选举新的主主机,这一过程通常在数十秒内完成。需要注意的是,主主机选举依赖管理网络与数据存储的可达性,如果两者同时异常,集群可能进入无法选举的状态,此时需要人工介入。

vSphere HA 故障检测与隔离响应链路 主主机 Master FDM 代理 · 准入控制 决定重启位置 汇总集群状态 从主机 Slave-1 FDM 代理 上报心跳与 VM 状态 执行重启指令 从主机 Slave-2 FDM 代理 上报心跳与 VM 状态 执行重启指令 管理网络心跳 管理网络心跳 共享数据存储 · 心跳文件 .vSphere-HA 目录 · 每主机独立心跳文件 写入心跳 写入心跳 写入心跳 故障判定 心跳超时 ≈ 检测间隔 × 最大故障数 默认约 3 秒进入疑似故障 确认后触发虚拟机重启流程 隔离响应 管理网络断 · 存储仍可达 隔离主机不重启 VM 由其他主机接管重启 重启优先级 高 · 中 · 低 高优先级先分配资源 受准入控制约束 注:图中参数为默认参考值,实际以集群 HA 高级设置为准

三、隔离响应:区分“真故障”与“网络隔离”

主机故障检测中最容易误判的场景是网络隔离:主机本身仍在运行,虚拟机也正常,但它与管理网络、其他主机失去联系。此时如果该主机主动重启自己的虚拟机,而其他主机也认为它故障并尝试重启同一批虚拟机,就会出现“双活”冲突,导致数据损坏。

vSphere HA 的隔离响应策略正是为此设计。当主机发现自己被隔离时,它会先尝试通过数据存储心跳确认其他主机是否仍在运行。如果数据存储可达且能确认其他主机存活,隔离主机会选择不重启虚拟机,把重启责任交给其他主机;如果数据存储也不可达,隔离主机无法确认外部状态,默认策略是关闭虚拟机并重启,以避免脑裂。生产环境中更推荐使用“隔离时关闭虚拟机”或“隔离时保持虚拟机运行”的明确策略,并结合电源管理(如 IPMI/iLO)实现隔离主机的强制断电,从而让其他主机安全接管。

隔离响应策略必须与存储心跳、电源管理配合使用。仅依赖管理网络判断,容易在交换机故障或 VLAN 配置错误时产生误判。

四、虚拟机重启优先级与准入控制

当主主机确认某台主机故障后,会按照虚拟机配置的重启优先级依次分配资源。优先级分为高、中、低三档,默认是中。高优先级虚拟机优先获得重启机会,低优先级虚拟机在资源不足时可能被延迟或无法重启。

重启能否成功,还取决于准入控制。准入控制确保集群始终保留足够的资源,以便在故障发生后仍能容纳计划内的虚拟机。常见策略包括:

  • 集群资源百分比:预留一定比例的 CPU 和内存,例如预留 25% CPU、25% 内存。
  • 插槽策略:按虚拟机规格划分插槽,预留固定数量的插槽。
  • 专用故障切换主机:指定一台主机作为备用,不运行生产虚拟机。

举例来说,一个 6 主机集群,每台主机 64 GB 内存,若采用 25% 内存预留,则集群可用内存为 6×64×75% = 288 GB。当一台主机故障时,剩余 5 台主机需承载原本 6 台主机上的虚拟机,只要总需求不超过 288 GB,重启即可成功。若超出,则低优先级虚拟机将无法重启。因此,优先级设置应与业务重要性一致,准入控制则要与实际资源水位匹配。

五、生产环境中的关键检查点

要让上述机制真正可靠,建议在部署后逐项确认:

  • 管理网络与数据存储网络是否冗余,避免单点故障导致误判。
  • 主机故障检测时间是否与网络质量匹配,是否出现过误报。
  • 隔离响应策略是否明确,是否配置了电源管理以实现强制隔离。
  • 虚拟机重启优先级是否按业务分级,是否存在全部默认“中”的情况。
  • 准入控制策略是否与集群实际资源水位一致,是否做过故障切换演练。

只有把故障检测、代理通信、隔离响应和重启优先级作为一个整体来设计和验证,vSphere HA 才能在真实故障中按预期工作,而不是在关键时刻因为一个参数或一条网络链路而失效。