简单的问题,我有 3 台主机运行 4.1 Essentials Plus 和 vmware HA。我尝试创建多个虚拟机,以填充每台服务器 90% 的内存容量。我知道 vmware 在虚拟机中有非常复杂的内存管理,但我不明白 vCenter 如何允许我什至在超过临界内存级别的虚拟机上启动,而主机故障转移仍然可以处理。
是不是因为虚拟机没有使用内存,所以还是认为是空闲的,所以虚拟机才能开机?但是,如果所有 VM 在主机故障前都真正使用 RAM,将会发生什么情况——它们在故障后无法迁移到其他主机。
XenServer 中的默认行为是,它会自动计算群集内可以使用的最大内存级别,以便主机故障仍然受到保护。Vmware 做同样的事情?
准入策略已启用。已启用 VMware 高可用性。
HA 的准入控制使用一种称为“插槽”的东西来计算在配置的主机数量发生故障时是否有可用空间容纳所有 VM。插槽计算允许您继续启动 VM,即使集群中的内存资源开始看起来很糟糕。
准入控制和插槽
“插槽”机制旨在提供一种通用方法,将集群分解为虚拟机大小的估计块,然后确保在配置的主机数量丢失的情况下,每个运行的虚拟机仍有可用插槽。
计算插槽大小
插槽大小计算中发生的第一件事。它正在寻找的是reserved resources,或者更具体地说,就保留资源而言,是集群中最大的 VM。它这样做的原因是确保集群中的每个资源槽都能够提供足够的资源来满足最大 VM 上的资源预留,这样在发生HA 故障转移。
对于 CPU,将找到 VM 上的最高预留并将其用作插槽大小。如果没有预留,则使用集群
das.vmCpuMinMHz
设置中配置的最小值;4.1 中默认为 256Mhz,但在 5.0 中降至 32Mhz。对于内存,使用内存预留加上VM 的内存开销 - 因此,如果没有预留,您的插槽大小将是最高 VM 的内存开销数或集群
das.vmMemoryMinMB
设置之间的较大数字,如果已配置(文档目前说默认值为 256MB;那不是真的,在 4.1+ 中默认值为 0)。这些数字结合在一起可以为您提供集群的插槽大小。
假设您没有保留,您的插槽大小可能是最小值 - CPU 为 256Mhz,内存插槽大小将是开销最大的 VM 的内存开销大小。
在频谱的另一端,如果您有一个具有大量内存预留但没有 CPU 预留的 VM,以及另一个具有大量内存预留的 VM,则您的插槽大小将根据每个预留的大数量来计算 - 每个两个资源中的插槽都将非常大,这将非常有限——在您达到相关的资源使用水平之前很久,您将被准入控制阻止启动虚拟机。
为了解决这个特定问题,您可以手动为每个资源设置插槽大小的上限:
das.slotCpuInMHz
设置插槽计算的 CPU 部分的最大大小das.slotMemInMB
设置内存的最大值如果您使用这些,则这些数字上的 VM 将被分配多个插槽,以便在故障转移后它们仍然可以保证保留资源价值。
计数插槽和强制限制
确定插槽大小后,将计算集群中每个主机上的插槽数。
较低的资源决定了它们的限制 - 因此,如果主机在 CPU 资源方面可以容纳 100 倍的 CPU 插槽大小,但只能容纳 30 倍的内存限制,则主机有 30 个插槽。
该数字是为集群中的每个主机添加的。那是配置的准入控制限制开始的时候。如果您将集群配置为容忍 1 个主机故障,那么它会丢弃计算中插槽最多的主机;如果设置了 2 个主机故障,则丢弃插槽数最高的两个主机。它假定您将失去最大的主机。
完成后,集群中剩余主机上的插槽数将相加 - 这就是在阻止您启动 VM 之前允许运行 VM 的插槽数。
集群摘要选项卡中的“高级运行时信息”链接将告诉您插槽的设置。
(忽略 vCPU 计数;它不再用于插槽计算)
那样有用吗?
我知道你在想什么。
“等一下,我的 VM 有几个 RAM apeice!它们到底怎么能在像 256MB 这样的任意小尺寸的‘插槽’中运行? ”
它们应该以资源预留指定的最低级别运行;如果他们没有保留,那么他们不一定会运行良好。
如果在资源使用率已经相当高的情况下出现 HA 故障,那么当额外的 VM 被添加到负载上时,您可能会遇到严重的资源争用。
如果 CPU 资源处于争用状态,那仅意味着所有正在运行的 VM 的可用 CPU 时间有效减少。在某些情况下,这可能会产生相当严重的影响——当存在 CPU 时间争用时,在具有多个 vCPU 的机器上使用的虚拟对称多处理可能会真正开始受到影响。
如果内存是有争议的资源……好吧,那就是它变得有趣的时候。
ESX(i) 有多种技术来处理内存争用。这里有一篇关于它们的深入文档,但总而言之,管理程序采用以下方法:
Mem.ShareScanTime
设置确定的时间表 - 默认为每小时一次。它们的最小插槽大小与 VM 的内存开销有关,这绝非偶然。这是因为开销数实际上是运行 VM 绝对必需的唯一内存 - 尽管如果 VM 的整个内存最终都处于交换状态,“运行”这个词可能太强了。
因此,准入控制并不是要确保您的所有 VM 在 HA 故障转移后都运行良好,而是要确保您的所有 VM 都可以运行。
所以我该怎么做?
准入控制会尝试在 HA 故障转移时实施最低级别的服务。但是,这只有在您实际定义了最低服务水平时才会发生;许多环境不需要或不需要保留。
如果您要使用准入控制,我建议调查您的插槽大小并将它们推向对您有意义的值;如果您不需要它们只是为了影响准入控制,请不要开始创建保留。
如果由于集群中缺少任何预留而将您的插槽大小设置为或接近最小值,则将其调整为更适合您环境的“正常”VM 大小。在集群的高级设置中设置如下内容:
如果由于少量高预留 VM 而将插槽大小设置得太高,则将其适当下调。
确保准入控制为插槽大小提供的值对您的环境有意义 - 您绝对不希望从交换空间运行一半的 VM,因为准入控制认为您不关心它们的服务级别!