4. vSphere HA准入控制策略实战

准入控制(Admission Control)是 vSphere HA 中最容易被忽视、却直接决定“故障时能不能真正重启虚拟机”的机制。它的作用不是限制你开机,而是在你开机、迁移或维护时,提前判断集群是否还保留足够的资源余量来承受预设数量的主机故障。如果准入控制判定资源不足,虚拟机的开机或迁移会被直接拒绝,从而避免集群在故障发生后因资源不够而无法完成 HA 重启。

准入控制的核心问题是:集群需要为故障预留多少资源?vSphere HA 提供三种策略来回答这个问题——集群资源百分比(预留内存百分比)、插槽策略、专用故障切换主机。三者互斥,同一时刻只能启用一种。理解它们的计算逻辑,才能正确设置“可容忍的主机故障数”。

三种策略的计算逻辑

预留内存百分比(集群资源百分比)是最常用的策略。它按“预留 CPU 与内存的百分比”来保留资源。假设集群有 4 台主机,每台 128 GB 内存,总内存 512 GB,准入控制设置为“预留 25% 内存”,则集群保留 128 GB 不参与分配,剩余 384 GB 可供虚拟机使用。当主机故障时,HA 需要把故障主机上的虚拟机在剩余主机上重启,只要这些虚拟机的内存总和不超过预留量,重启就能成功。该策略的优点是粒度细、按实际资源计算;缺点是百分比设置需要结合主机数量推算,容易设得过大或过小。

插槽策略是较早期的算法。它把每台主机抽象为若干“插槽”,每个插槽能容纳一台虚拟机,插槽大小由集群中最大虚拟机的 CPU 与内存决定。例如集群中最大虚拟机为 4 vCPU / 16 GB,则每个插槽按 4 vCPU / 16 GB 计算。主机可提供的插槽数 = 主机资源 ÷ 插槽大小。HA 通过“当前使用插槽数 + 需要保留的插槽数”判断是否允许开机。插槽策略的优点是计算简单、结果保守;缺点是当虚拟机规格差异大时,会因按最大值计算而浪费大量资源,因此在新环境中通常不推荐。

专用故障切换主机是最直观的策略:指定一台或多台主机专门作为故障切换备用,不承载生产虚拟机(或只承载少量)。当其他主机故障时,HA 把虚拟机重启到这些专用主机上。它的优点是预留量明确、可预测;缺点是备用主机平时资源闲置,成本较高,适合对可用性要求极高、且资源预算充足的关键业务集群。

vSphere HA 准入控制三策略对比与可容忍故障数推算 策略一:预留内存百分比 集群:4 主机 × 128 GB = 512 GB 预留比例:25% → 保留 128 GB 可用:384 GB 故障 1 台:需重启内存 ≤ 128 GB 故障 2 台:需 ≤ 256 GB 故障 3 台:需 ≤ 384 GB 可容忍故障数 = 预留量 ÷ 单主机内存 策略二:插槽策略 最大虚拟机:4 vCPU / 16 GB 插槽大小 = 4 vCPU / 16 GB 单主机插槽数 = 128 ÷ 16 = 8 集群总插槽 = 4 × 8 = 32 已用插槽 + 保留插槽 ≤ 32 保留 1 台 = 8 插槽 按最大规格计算,资源偏保守 策略三:专用故障切换主机 指定 1 台主机为备用 备用主机:128 GB 不承载生产 生产主机:3 台 × 128 GB 故障时虚拟机重启到备用机 预留量明确、可预测 代价:备用机资源闲置 可容忍故障数 = 备用主机数 示例推算:4 主机 × 128 GB,预留 25%,当前已用 300 GB 总内存 512 GB 预留 128 GB → 可用 384 GB 已用 300 GB → 剩余 84 GB 不足以重启 1 台 → 开机被拒 需扩容 判断依据:故障 1 台主机时,该主机上虚拟机内存总和若超过 84 GB,HA 无法完成重启,准入控制会阻止继续开机。 调整方向:降低预留比例、增加主机、迁移部分虚拟机,或改用专用故障切换主机策略。 注:以上为教学示例参数,实际容量需结合集群真实资源与虚拟机内存预留计算。

如何计算集群可容忍故障数

可容忍故障数(Number of Host Failures to Tolerate)是准入控制的核心输出。它的计算方式随策略不同而不同:

  • 预留内存百分比:可容忍故障数 ≈ 预留资源总量 ÷ 单台主机资源量。例如预留 25%、4 台主机,预留量相当于 1 台主机的资源,因此可容忍 1 台主机故障。若预留 50%,则可容忍 2 台。
  • 插槽策略:可容忍故障数 = 保留插槽数 ÷ 单主机插槽数。保留插槽数由“当前使用插槽 + 预留插槽”与总插槽的关系决定。
  • 专用故障切换主机:可容忍故障数 = 专用备用主机数量。指定 1 台备用机即可容忍 1 台生产主机故障。

需要特别注意的是,可容忍故障数并不等于“随便拔掉几台主机都没事”。它成立的前提是:故障主机上的虚拟机内存总和不超过预留资源,且剩余主机有足够的 CPU 与内存承载这些虚拟机。如果虚拟机配置了较大的内存预留,实际可容忍故障数可能低于理论值。

配置与验证步骤

在 vSphere Client 中,进入集群 → 配置 → 可用性 → vSphere HA → 编辑 → 准入控制,即可选择策略并设置参数。配置完成后,必须通过以下方式验证:

  1. 查看集群摘要中的“当前故障切换容量”,确认可容忍故障数与预期一致。
  2. 尝试在集群资源接近预留边界时开机一台虚拟机,观察是否被准入控制拒绝,并查看任务与事件中的具体原因。
  3. 使用“模拟主机故障”或维护模式,观察 HA 是否能在预留资源内完成虚拟机重启。
  4. 检查“高级选项”中的 das.reserveMemoryPercentage 等参数是否与界面设置一致。
# 查看集群 HA 准入控制配置(PowerCLI 示例)
Get-Cluster "Prod-Cluster" | Select-Object Name,
  @{N="AdmissionControl";E={$_.HAAdmissionControlEnabled}},
  @{N="Policy";E={$_.HAAdmissionControlPolicy}},
  @{N="FailuresToTolerate";E={$_.HAFailuresToTolerate}}

# 查看集群当前故障切换容量
Get-Cluster "Prod-Cluster" | Get-View |
  Select-Object -ExpandProperty ConfigurationEx |
  Select-Object -ExpandProperty DasConfig
建议:生产集群优先使用“预留内存百分比”,并将预留比例设置为“单主机资源占比”的整数倍,例如 4 台主机设 25%、5 台设 20%,这样可容忍故障数恰好为 1。若业务要求容忍 2 台故障,则预留比例应设为 50%(4 台主机)或 40%(5 台主机)。
常见误区:把“预留内存百分比”理解为“限制虚拟机内存使用量”。实际上它只影响准入控制的判断,不会限制虚拟机实际可用的内存。真正限制虚拟机内存的是资源池的预留与限制设置。

策略选择建议

三种策略没有绝对优劣,只有适用场景不同。资源规格统一、追求高资源利用率的集群,适合预留内存百分比;虚拟机规格差异大、且希望计算简单的旧环境,可继续使用插槽策略;对可用性要求极高、且愿意承担资源闲置成本的关键业务集群,适合专用故障切换主机。无论选择哪种策略,都应在变更后重新核对“当前故障切换容量”,确保它与你期望的可容忍故障数一致,而不是仅凭界面上的绿色对勾判断。

最后,准入控制不是一次配置就永久有效的。当集群扩容、主机下线、虚拟机规格调整或内存预留变化时,可容忍故障数都会随之改变。建议把“检查 HA 准入控制容量”纳入日常巡检,在每次重大变更后重新验证,避免故障真正发生时才发现预留不足。