我收到了添加请求不亲和性/反亲和性规则在运行 VMware vSphere 4.1 的 VMware HA/DRS 群集中的一组虚拟机上。
客户有四主机,并希望在主机发生故障时阻止某些虚拟机在同一主机上运行。
通常情况下,这种类型的请求很简单,你可以简单地避免运行app01和app02在同一台机器上...上游有一个单独的应用程序负载均衡器。
然而,这一请求要求app01,app02,app03,app04,app05 和 app06在不同的主机上运行。
六台虚拟机,四台主机。我们的第一反应团队补充道app01-app06变成一个“单独的虚拟机”DRS 规则。这似乎不正确,因为在维护模式或升级管理器修复中结果可能是不可预测的。
就像是:
这样做有什么影响四主机?这能达到预期目标吗?缺点是什么?
答案1
如果 6 台虚拟机已经启动,则 DRS 将尝试尽可能地将它们分开。然后它将显示 DRS 故障,表示无法修复反亲和性规则违规,但不会关闭任何虚拟机:
如果 6 个中的 4 个在不同的主机上打开并运行,并且您尝试启动剩余 2 个中的其中一个,则 DRS 规则将拒绝启动它并显示以下错误:
明显的缺点是您无法让所有 6 个都运行。可以想象,如果您在创建规则之前让它们运行,那么它们会继续运行,但几乎不可避免的是,它们最终会因为某种原因在某个时候关闭,并且由于规则而无法重新启动。根据捕获,它们处于关闭状态,因此它们无法打开所有 6 个(实际上,捕获中的规则中有 8 个,因此 4 个将保持关闭状态)。
另一种解决方案(未经测试)将允许启动所有虚拟机,但您仍然会在 2 台主机上运行至少 2 台虚拟机,无法满足客户在资源有限的情况下不可能实现的需求:
你可以创建 2 条“独立虚拟机” DRS 规则,将虚拟机 1-4 放在一个虚拟机中,将虚拟机 5-6 放在另一个虚拟机中。这样可以打开所有 6 个虚拟机,但因维护而丢失或关闭主机也意味着您最多可以运行 5 个虚拟机,这仍然比原始解决方案中所有主机均可运行的情况下运行 4 个虚拟机要好。