3. vSphere HA工作原理深入
vSphere HA 的可靠性并不来自某一个开关,而是由多条相互配合的机制共同保证:主机是否真的“死了”、由谁来裁决、被隔离的主机该不该自杀、故障后哪些虚拟机先起来、以及集群还能不能接纳新虚拟机。理解这五件事,才能把 HA 从“打开就行”变成“可控可预期”。
一、主机故障检测:三层信号叠加判断
HA 集群中的每台主机都运行 FDM(Fault Domain Manager)代理。主机状态不是靠单一心跳判断,而是三类信号叠加:
- 管理网络心跳:主机之间通过管理网络周期性交换心跳,默认约每秒一次。这是最快、最直接的存活信号。
- 存储心跳:每台主机在集群数据存储上写入自己的心跳文件(.vSphere-HA 目录下),其他主机读取这些文件判断对方是否仍在写。它绕开管理网络,用于识别“网络断了但主机还活着”的情况。
- 主机与 vCenter 的连接状态:vCenter 通过 FDM 汇总各主机上报的信息,作为集群级视图。
关键在于:只有管理网络心跳和存储心跳同时失效,主机才会被判定为故障。如果管理网络断了但存储心跳仍在更新,说明主机还活着,只是网络隔离——这属于“隔离”而非“故障”,处理方式完全不同。默认检测间隔与容错窗口可通过 das.failuredetectiontime 调整,取值通常为 10000~30000 毫秒;调大更保守,调小更激进但易误判。
二、代理选举:谁来做主节点
集群中必须有一个“主节点”(Master)负责决策:收集各主机状态、决定重启哪些虚拟机、下发重启指令。主节点由 FDM 代理选举产生,规则是:
- 优先选择已连接数据存储数量最多的主机,因为它能看到最多的虚拟机文件与心跳。
- 数量相同时,比较主机 UUID 或 MOID,取较小者,保证结果确定、不震荡。
- 主节点故障后,其余主机在数秒内重新选举,产生新的主节点。
从节点(Slave)持续向主节点上报自身状态和所运行虚拟机清单。主节点维护一份“集群成员 + 虚拟机归属”的权威视图,这是后续重启决策的数据基础。
三、隔离响应:主机自己“拔电源”
当一台主机发现管理网络和存储心跳都断了,它无法确认自己是否被集群抛弃。此时最危险的情况是:它仍在运行虚拟机,而主节点也认为它已死并开始在别处重启同一批虚拟机,导致同一虚拟机被两台主机同时运行,数据损坏。
HA 的隔离响应(Isolation Response)就是解决这个冲突:被隔离的主机在确认无法与集群通信后,按策略处理自己:
- Power Off(关闭电源):默认策略,直接断电,确保虚拟机不再运行。
- Shut Down(关机):向虚拟机发送关机请求,较温和但可能因客户机无响应而失败。
- None(无操作):不处理,风险最高,仅用于特殊场景。
隔离响应生效的前提是主机能访问隔离地址(Isolation Address,默认网关或指定 IP)。如果连隔离地址都不可达,主机将无法执行任何响应,只能等待。因此隔离地址的可靠性直接决定隔离响应是否有效。
四、虚拟机重启优先级:先救谁
主机故障后,主节点需要决定重启顺序。HA 为每台虚拟机提供三个优先级:
- 最高(High):最先重启,适合核心业务、数据库主节点。
- 中等(Medium):默认值,普通业务虚拟机。
- 最低(Low):最后重启,适合测试、辅助、可延迟的虚拟机。
重启顺序还受重启延迟影响:可为虚拟机设置 0~86400 秒的延迟,避免所有虚拟机同时启动造成存储与网络风暴。例如数据库主节点设为 High + 0 秒,应用服务器设为 Medium + 120 秒,报表类设为 Low + 300 秒,形成有节奏的恢复序列。
此外,HA 会遵守虚拟机与主机的亲和/反亲和规则(DRS 规则)以及虚拟机依赖关系(如 vApp 启动顺序),避免把互相依赖的虚拟机拆散或乱序启动。
五、接入控制策略:集群还能不能接新虚拟机
接入控制(Admission Control)决定“集群在保留多少故障切换余量后,还允许启动多少虚拟机”。它防止集群被塞满,导致故障时无处重启。常见策略:
| 策略 | 保留方式 | 适用场景 |
|---|---|---|
| 集群资源百分比 | 按 CPU/内存百分比预留,默认各 25% | 通用,最常用 |
| 专用故障切换主机 | 指定一台或多台主机作为备用,不承载生产 VM | 关键业务,要求确定性 |
| 槽位策略 | 按“槽位”计算,每个槽位取最大 VM 的 CPU/内存 | 虚拟机规格统一时简单直观 |
以“集群资源百分比”为例:8 台主机、每台 64 GB 内存,集群总内存 512 GB,预留 25% 即 128 GB,可分配 384 GB。若每台虚拟机 8 GB,则最多约 48 台。当第 49 台尝试启动时,vCenter 会因违反接入控制而拒绝,并给出“Insufficient resources to satisfy HA failover level”提示。此时应扩容主机、降低预留百分比,或改用专用故障切换主机策略。
六、把五件事串起来看
一次典型的主机故障处理流程是:主机 C 的管理心跳与存储心跳同时中断 → 主节点 A 判定 C 故障 → A 根据重启优先级和延迟,在 B 等存活主机上依次重启 C 的虚拟机 → 同时 C 若仍存活,会因隔离响应自行断电,避免双跑 → 接入控制确保 B 有足够余量接纳这些虚拟机。若接入控制预留不足,重启会失败并告警,这正是需要提前规划的地方。
实际运维中建议定期检查:das.failuredetectiontime 是否与网络收敛时间匹配、隔离地址是否可达、重启优先级是否与业务重要性一致、接入控制预留是否与“N+1”目标一致。把这四项对齐,HA 才能在真正故障时按预期工作。