本文介绍 Microsoft System Center 2012 R2 Virtual Machine Manager(VMM 2012 R2)中群集过度提交算法的四种方法。 可 在此处 找到一个示例来帮助了解算法。
原始产品版本: Microsoft System Center 2012 R2 Virtual Machine Manager
原始 KB 数: 3023928
算法中方法概述
VMM 2012 R2 群集过度提交检查的目标是确定如果群集保留 (R) 节点发生并发故障,虚拟机是否不会重启。 假设群集被过度提交,直到证明否则。 尝试了四种方法,如果有任何方法表明群集未过度提交,则群集状态设置为 “确定”。 否则,群集状态设置为 “已提交”。
可以在表中可视化这四种方法,如下所示:
| 检查方法 | Proof 方法 | Slot 方法 |
|---|---|---|
| 简单检查 | 校对简单 | 槽简单 |
| 完整复杂性检查 | 证明完整 | 槽满 |
四种检查方法
Proof 方法
证明方法的工作原理是确定是否有足够的虚拟机来将所有主机填充到最大虚拟机无法在任何主机上启动的位置。 它考虑了最大的虚拟机是上次故障转移的最坏情况,也是每个主机内存不足 1 字节来启动虚拟机的最坏情况。
Slot 方法
槽方法的工作原理是将失败主机上的每个虚拟机分配给单个标准大小的槽,其大小等于所有失败主机上最大虚拟机的大小。 然后,它会计算每个剩余主机上的可用槽数,并检查是否有足够的可用槽来分配当前在发生故障的主机上的所有虚拟机。
简单检查
简单检查不考虑一组特定的失败主机。 相反,它会做出最坏情况的群集范围假设。 最大的虚拟机大小用作整个群集中最大的虚拟机。 故障转移虚拟机大小不是从一组特定的主机决定的。 相反,该方法使用可从 R 故障主机实现的理论最高总和。 同样,其他主机上可用的内存或槽数是最低 N R 主机(其中 N- 表示群集大小)的总和。
完整复杂性检查
完整复杂性检查会循环访问每个可能的 R 故障主机集。 它会重新计算槽大小、最大虚拟机大小、目标主机内存大小和槽计数。 它基于故障主机的每个可能组合执行此操作。 必须考虑的集数为 Choose(N,R)。 对于 N 和 R 的较大值,此数字可能会变得令人生气低。由于此数字与 N^R 大致成正比,因此仅当 N^R 小于 5,000 时,才会运行此检查。 因此,在实际情况下,仅在下表的情况中执行完整的复杂性检查:
| 群集预留 (R) | 最大群集大小 (N) |
|---|---|
| 1 | 4,999 |
| 2 | 70 |
| 3 | 17 |
| 4 | 8 |
注意
完整的复杂性检查只是简单检查的边际细化,而简单的证明检查提供了非常相似的结果。
计算和算法
算法中的值定义和预计算
重要
AdditionalMemory不能通过使用单个主机中的值计算这些值和AvailableSlots值。 源故障主机的值或源故障主机的值LargestClusterVMSlotSize必须已知。 在简单的检查中,它们等于群集中最大的虚拟机。 在完整的复杂性检查中,它们等于故障主机集中的最大高可用性(HA)虚拟机。 某些主机将失败,其他主机将收到该工作负荷。 除非为失败的主机而不是接收主机完成了可用空间的计算,否则可用空间的计算不正确。
群集值
下表显示了群集值的定义:
| 值名称 | 定义 |
|---|---|
| N | 群集中的主机总数 |
| R | 群集保留值(即模型并发失败的最大数目) |
| H | 要用作故障转移目标的剩余正常主机(H = N - R) |
主机值
为每个主机预计算以下值。 如果为或计算LargestClusterVMMBSlotSizeMB值,则会在完整复杂性检查的每个迭代中重新计算该值。
| 值名称 | 定义 |
|---|---|
AvailableMemory |
这是故障转移虚拟机要使用的总可用主机内存。AvailableMemory = 主机总内存 - 现有 VM - 主机预留 |
AdditionalMemory |
这是填充行,之后主机将无法再启动正在故障转移的最大虚拟机。AdditionalMemory = Max(AvailableMemory - LargestClusterVM,0) |
HAVMs |
这是此主机上的高可用性 (HA) 虚拟机总数。 |
AvailableSlots |
这是保证能够启动此主机的虚拟机的故障转移次数。AvailableSlots = AvailableMemory / SlotSize,向下舍入 |
UsedSlots |
这是此主机上的 HA 虚拟机数。 |
TotalSlots |
主机上的槽总数。TotalSlots = AvailableSlots + UsedSlots |
注意
- 将 64 兆字节(MB)缓冲区添加到每个虚拟机的内存中,以考虑虚拟机监控程序开销。
- 已停止、保存状态、已暂停和正在运行的虚拟机(VM)均进行计数。 当算法计算超额提交时,应考虑启动已停止虚拟机的租户用户。
- 如果群集中存在动态内存虚拟机,则使用其当前内存需求。
四种方法中的算法
槽简单
槽简单方法中的算法如下所示:
SlotSize= 群集中最大的 HA 虚拟机。- 计算每个主机的
AvailableSlots、UsedSlots值和TotalSlots值。 TotalSlotsRemaining= 的最小 H 值之和TotalSlots。- 如果 Sum(
UsedSlots) <=TotalSlotsRemaining,则群集不会过度提交。
槽满
迭代每个 R 故障主机集。 槽完全方法中的算法如下所示:
SlotSize= R 故障主机上的最大 HA 虚拟机。- 计算每个主机的
AvailableSlots、UsedSlots值和TotalSlots值。 TotalSlotsRemaining= 所有非故障主机的总TotalSlots和。- 比较 Sum(
UsedSlots)和TotalSlotsRemaining值:- 如果 Sum(
UsedSlots) >TotalSlotsRemaining,群集可能会过度提交。 - 如果 Sum(
UsedSlots) <=TotalSlotsRemaining针对每组失败主机,则群集不会过度提交。
- 如果 Sum(
校对简单
校对简单方法中的算法如下所示:
LargestClusterVM= 群集中最大的 HA 虚拟机。- 计算
AdditionalMemory所有HAVMs主机。 TotalAdditionalSpace= 最小 H 值的AdditionalMemory和 。TotalOrphanedVMs= (最大 R 值HAVMs之和) -LargestClusterVM。- 比较值:
- 如果
TotalOrphanedVMs<=TotalAdditionalSpace,则群集未过度提交。 - 如果
TotalOrphanedVMs为 0、LargestClusterVM>0 和 =TotalAdditionalSpace0,则群集可能会过度提交。
- 如果
证明完整
迭代每个 R 故障主机集。 校对方法中的算法如下所示:
LargestClusterVM= R 故障主机上的最大 HA 虚拟机。- 计算
AdditionalMemory所有HAVMs主机。 TotalAdditionalSpace= 非故障主机上的总AdditionalMemory和。TotalOrphanedVMs= (R 故障主机的总HAVMsMB和) -LargestClusterVM。- 比较值:
- 如果
TotalOrphanedVMs>TotalAdditionalSpace,群集可能已提交过度。 - 如果
TotalOrphanedVMs= 为 0、LargestClusterVM>0 和TotalAdditionalSpaceMB= 0,则群集可能会过度提交。 - 如果
TotalOrphanedVMs<TotalAdditionalSpace对于每个故障主机集,群集不会过度提交。
- 如果
组合方法与示例
没有任何方法表明群集已提交过度。 它们只能显示群集 未 过度提交。 如果所使用的方法都无法显示群集未过度提交,则群集将标记为已提交过度。 即使单个方法显示群集未过度提交,群集也会标记为 正常,并立即停止计算。
但是,对于完整的复杂性分析,即使单个 R 故障主机显示群集可能已过度提交,该方法将立即完成,并且不会将群集 标记为正常。
这些方法的示例
此示例专门设计为边框大小写。 只有一种方法(证明已满)可以证明群集未过度提交。
假设群集有四个 32 千兆字节(GB)主机。 主机内存保留设置为 9 GB。 此示例中不向虚拟机大小添加 64 MB 缓冲区,只是为了简化数字。 群集保留 (R) 设置为 2。
| 主机 | 虚拟机设置 | AvailableMemory | HAVM | 最大 VM |
|---|---|---|---|---|
| 主机 A | 4 GB HA、4 GB HA | 15 GB | 8 GB | 4 GB |
| 主机 B | 4 GB HA、4 GB HA | 15 GB | 8 GB | 4 GB |
| 主机 C | 8 GB HA、8 GB 非 HA | 7 GB | 8 GB | 8 GB |
| 主机 D | 6 GB 非 HA、2 GB HA、2 GB HA | 13 GB | 4 GB | 2 GB |
槽简单示例
槽大小 = 8 GB
| 主机 | AvailableSlots | UsedSlots | TotalSlots |
|---|---|---|---|
| 主机 A | 1 | 2 | 3 |
| 主机 B | 1 | 2 | 3 |
| 主机 C | 0 | 1 | 1 |
| 主机 D | 1 | 2 | 3 |
从表中,我们知道以下值:
TotalSlotsRemaining= 两个TotalSlots最小值 = (1+3) = 4TotalUsedSlots= 2+2+2+1 = 7
由于 TotalUsedSlots 方法大于 TotalSlotsRemaining,因此方法失败。
槽完整示例
TotalUsedSlots = 7,无论哪个主机都失败
| 失败的主机 | 槽大小 | 剩余主机上的 AvailableSlots | 剩余主机上的 TotalSlots |
|---|---|---|---|
| A, B | 4 GB | C:1、D:3 | C:2、D:5。 总计:7 - 良好 |
| A、C | 8 GB | B:1、D:1 | B:3、D:3。 总计:6 - 失败 |
| A、D | 4 GB | B:3、C:1 | B:5、C:2。 总计:7 - 良好 |
| B、C | 8 GB | 答:1、D:1 | 答:3、D:3。 总计:6 - 失败 |
| B、D | 4 GB | 答:3、C:1 | 答:5、C:2。 总计:7 - 良好 |
| C、D | 8 GB | 答:1、B:1 | 答:3、B:3。 总计:6 - 失败 |
由于某些故障主机集导致 TotalUsedSlots>TotalSlotsRemaining,此方法已失败。
校对简单示例
LargestClusterVM = 8 GB
| 主机 | AdditionalMemory |
|---|---|
| 主机 A | 7 GB |
| 主机 B | 7 GB |
| 主机 C | 0 GB |
| 主机 D | 5 GB |
从表中,我们知道以下值:
TotalAdditionalSpace= 两个AdditionalMemory最小值 = 0 GB + 5 GB = 5 GB。TotalOrphanedVMs= (8 GB + 8 GB) - 8 GB = 8 GB。
由于 TotalOrpanedVMsMB>TotalAdditionalSpace此方法失败。
证明完整示例
| 失败的主机 | LargestHAVM | AdditionalMemory | 孤立 VM | 孤立 VM - LargestHAVM <= AdditionalMemory |
|---|---|---|---|---|
| A, B | 4 GB | C:3、D:9。 总计 12. | 答:8、B:8、总计 16。 | 16-4<=12 - 好 |
| A、C | 8 GB | B:7、D:5。 总计 12. | 答:8、C:8、总计 16。 | 16-8<=12 - 好 |
| A、D | 4 GB | B:11,C:3。 总计 14. | 答:8、D:4、总计 12。 | 12-4=14< - 良好 |
| B、C | 8 GB | 答:7、D:5。 总计 12. | B: 8, C: 8, 总计 16. | 16-8<=12 - 好 |
| B、D | 4 GB | 答:11、C:3。 总计 14. | B: 8, D: 4, 总计 12. | 12-4=14< - 良好 |
| C、D | 8 GB | 答:7、B:7。 总计 14. | C: 8, D: 4, 总计 12. | 12-8<=14 - 好 |
由于每组失败的主机都导致 OrphanedVMsLargestHAVM< - = AdditionalMemory,因此该方法成功,并且整个群集可以标记为“确定”。