代管式实例组 (MIG) 将其虚拟机分布在一个区域中的多个可用区之间,也称为区域级 MIG。受限于单个可用区的 MIG 也称为可用区级 MIG。
您可以使用区域级 MIG 来提高基于 MIG 的工作负载的弹性。将工作负载分布在一个区域中的多个可用区之间有助于防范单个可用区中的所有实例都发生故障的极端情况。
本文档包含有关区域级 MIG 的概念信息:
如需了解如何创建区域级 MIG,请参阅在多个可用区中创建 MIG。
为什么要选择区域级代管式实例组?
Google 推荐区域级 MIG 而不推荐可用区级 MIG,原因如下:
- 您可以使用区域级 MIG 来管理多达 2000 个实例(相当于可用区级 MIG 实例数的两倍)。 如果您需要管理更多实例,可以进一步提高区域级 MIG 的大小限制,达到 4,000 个实例。
- 您可以使用区域级 MIG 将应用负载分布到多个可用区,而不是将应用限制在单个可用区中或者跨不同区域管理多个可用区级 MIG。
使用多个可用区可避免可用区性故障,或单个可用区中的整个实例组发生故障等无法预料的情况。如果确实发生了这种情况,您的应用仍可以继续处理来自同一区域的另一个可用区中运行的实例的流量。
如果发生可用区性故障,或者某个可用区的一组实例停止响应,区域级 MIG 会继续通过如下方式支持您的实例:
其余可用区中属于区域级 MIG 的实例会继续处理流量。除此之外,系统不会添加任何新实例,也不会重新分布任何实例(除非您设置了自动扩缩功能)。
待发生故障的可用区恢复正常后,MIG 会开始重新处理来自该可用区的流量。
如果要设计可靠且可扩缩的应用,请使用区域级 MIG。
区域级 MIG 的其他配置选项
创建区域级 MIG 的方法与创建可用区级 MIG 的方法相似,只不过您还可以选择额外的选项:
- 您可以选择要在一个区域内的哪些可用区中创建实例。
- 您可以选择目标分布形状以确定如何在所选可用区之间分布实例。
- 您可以选择停用或重新启用主动式实例重新分布功能,该功能会尝试在所选可用区之间均匀分布实例组的虚拟机。
以下部分介绍了这些选项。
可用区选择
默认情况下,区域级 MIG 会在三个可用区中均匀分布其代管实例。但出于各种原因,您可能需要为应用选择特定可用区。例如,如果您的实例需要 GPU,那么您只能选择支持 GPU 的可用区,或者您的永久性磁盘或预留仅在某些可用区提供。
如果要选择可用区数或选择实例组在其中运行的特定可用区,则必须在首次创建实例组时执行此类操作。如果您在创建实例组的过程中选择了特定可用区,日后将无法更改或更新这些可用区。
如果您希望 MIG 自动使用支持您在 MIG 的配置中指定的硬件的可用区,则可以将 MIG 的目标分布形状设置为 BALANCED
、ANY
或 ANY_SINGLE_ZONE
,然后选择区域中的所有可用区。MIG 会自动检查资源可用性,并仅在具有资源的可用区中安排实例。如需了解详情,请参阅目标分布形状。
要在一个区域内选择三个以上可用区,您必须明确指定各个可用区。例如,如需选择一个区域内的所有四个可用区,您必须在请求中明确提供所有四个可用区。否则,Compute Engine 默认选择三个可用区。
如需在一个区域中选择两个或更少的可用区,您必须明确指定各个可用区。并且,即使该区域只包含两个可用区,您也必须在请求中明确指定这些可用区。
Google 会在更多可用区提供专用硬件,从而定期扩展其基础架构。区域 MIG 会定期检查硬件可用性,并自动在支持所需机器的可用区中开始安排实例。如果您因任何原因不想在某些可用区运行实例,请在创建实例组时不要选择这些可用区。
如需了解如何创建区域 MIG 和选择可用区,请参阅创建区域 MIG。
目标分布形状
默认情况下,区域级 MIG 会在所选可用区中均匀分布其代管实例。但是,如果您需要并非所有可用区都提供的硬件,或者需要优先使用可用区级预留,则可以选择其他分布方式。
如需配置区域级 MIG 在区域内的选定可用区分布其实例的方式,请设置 MIG 的目标分布形状。您可以使用以下选项:
- 均匀(默认):实例组会适当地创建和删除虚拟机,以实现并维持所选可用区中的虚拟机数量相同。在
EVEN
分布中,任意两个可用区之间的虚拟机数量之差不超过 1 个。建议用于可用性高的服务工作负载。 - 平衡:实例组会优先考虑在提供资源的可用区中创建虚拟机,同时尽可能在所选可用区中均匀分布虚拟机,以最大限度地减少可用区故障的影响。建议用于高可用性服务工作负载或批处理工作负载。
- 不限:实例组会选择可用区来创建虚拟机实例,以满足当前资源限制条件中所请求的虚拟机数量,并最大程度提高未使用的可用区级预留的利用率。建议用于不需要高可用性的批处理工作负载。
- 任意单个可用区:实例组会在单个可用区中创建所有虚拟机实例。系统会根据硬件支持、当前资源和配额可用性以及匹配的预留来选择可用区。建议与紧凑实例放置政策结合使用,用于需要在 VM 之间进行广泛通信的工作负载。
创建 MIG 时,如果将其形状设置为 BALANCED
、ANY
或 ANY_SINGLE_ZONE
,您无需手动验证哪些可用区支持您在 MIG 的配置中指定的硬件。您可以选择区域中的所有可用区,当区域 MIG 的形状设置为 BALANCED
、ANY
或 ANY_SINGLE_ZONE
时,区域 MIG 会为您检查资源可用性,并仅在具有资源的可用区中安排实例。
根据您的工作负载要求和所需的 MIG 功能选择一个选项。如需了解详情,请参阅对照表和使用场景。
如需了解如何为新的或现有 MIG 配置目标形状,请参阅设置在各个可用区中分布实例的政策。
主动式实例重新分布
默认情况下,区域级 MIG 内的实例会尽量在区域内的各个可用区中均匀分布,以便在出现可用区级别的故障时最大限度地提高应用的可用性。
如果您对实例组中的实例执行 delete 或 abandon 操作,导致各可用区的分布不均匀,则实例组会主动重新分布实例以恢复到分布均匀的状态。
为了在各个可用区之间重建均匀的分布,实例组会删除具有较多实例的可用区中的实例,并为具有较少实例的可用区添加实例。实例组会自动选择要删除的实例。
例如,假设您有一个包含 12 个实例的区域级 MIG,这些实例分布在 3 个可用区:a
、b
和 c
。如果您删除 c
中的 3 个代管式实例,则实例组会尝试重新平衡,以使实例再次均匀分布在各个可用区。在此示例中,实例组会删除 2 个实例(一个来自 a
,另一个来自 b
),然后在可用区 c
中创建 2 个实例;如此一来,每个可用区都会有 3 个实例,从而实现了均匀分布。请注意,无法选择性地确定要删除的实例。在新实例启动时,实例组的容量会暂时丢失。
如需防止实例自动重新分布,您可以关闭主动式实例重新分布功能。
在以下情况下,关闭主动式实例重新分布功能非常有用:
- 从实例组中删除或移除实例而不影响其他正在运行的实例。例如,您可以在作业完成后删除批处理工作器实例,而不影响其他工作器。
- 避免系统由于执行主动式重新分布操作而意外自动删除具有有状态工作负载的实例。
- 将 MIG 的目标分布形状设置为
BALANCED
或ANY_SINGLE_ZONE
。
如果关闭主动式实例重新分布功能,MIG 不会主动添加或移除实例以实现平衡,但在执行调整大小操作期间,MIG 仍然会根据具体时机尽力实现平衡(通过每个调整大小操作来平衡实例组)。例如,缩容时,实例组会自动从较大可用区中移除实例;扩容时,实例组会为较小可用区添加实例。
与可用区级 MIG 的行为差异
可用区级 MIG 与区域级 MIG 之间的主要差异在于区域级 MIG 可以使用多个可用区。
由于区域级 MIG 的代管式实例分布在一个区域内的各个可用区中,因此以下 MIG 功能的行为略有不同。
自动扩缩区域级 MIG
Compute Engine 为 MIG 提供自动扩缩功能,因此您的实例组能够根据负载的增减自动添加虚拟机(扩容)或移除虚拟机(缩容)。
如果您为区域级 MIG 启用了自动扩缩功能,则该功能将按照如下方式运作:
自动扩缩器会根据每个可用区中最大的自动扩缩信号决定在哪个可用区创建虚拟机。例如,如果您根据 CPU 利用率进行扩缩,则自动扩缩器会在利用率较高的可用区中创建更多虚拟机。
如果可用区具有不同的信号值,则自动扩缩可能会创建分布不均匀的虚拟机。在这种情况下,自动扩缩器会尝试在虚拟机较少的可用区中创建更多虚拟机,以平衡可用区之间的负载。在具有其他虚拟机的可用区接管负载后,可用区之间的虚拟机数量应保持平衡。
如果某个可用区中的信号值触发扩容,但区域级 MIG 中的整体信号值不需要额外虚拟机或是需要不同可用区中的额外虚拟机,则自动扩缩器可能会添加一个虚拟机,然后立即从一个可用区中删除它。
当自动扩缩信号应用于整个区域级 MIG(例如扩缩时间表或某些监控指标)时,自动扩缩器会尽可能均匀地在可用区之间分布虚拟机。
目标分布形状设置为
BALANCED
时,自动扩缩器会注意到可用区中的资源可用性。根据 MIG 的配置所指定,自动扩缩器仅会在虚拟机具有足够配额和容量的可用区中主动创建虚拟机。
更新区域级 MIG
创建实例组后,您无法更改或更新区域级 MIG 的可用区。但是,您可以设置实例组的目标分布形状以优先使用不同的可用区 - 例如,如果您已预留资源或需要并非所有可用区都提供的硬件。
如果您要将新模板发布到区域级 MIG,请参阅更新区域级 MIG。
如果您要在 MIG 中添加实例或从中移除实例,则相应的过程对于区域级 MIG 和可用区级 MIG 是相似的。请参阅在 MIG 中添加和移除虚拟机。
如果您对在 MIG 中配置有状态磁盘或有状态元数据感兴趣,请参阅配置有状态 MIG。
如何通过超额预配来提高可用性
鉴于各种事件可能导致一个或多个实例不可用,您可以使用多项 Google Cloud 服务缓解此问题:
- 使用具有
EVEN
或BALANCED
目标分配形状的区域级 MIG 在多个可用区分布应用。 - 使用基于应用的自动修复功能,通过失败的应用重新创建实例。
- 使用负载均衡功能自动引导用户流量离开不可用的实例。
但是,即使您使用这些服务,如果同时有太多实例不可用,您的用户仍可能会遇到问题。
为了应对在一个可用区发生故障或整个实例组停止响应的极端情况,Google 强烈建议您对 MIG 进行超额预配。如果某个可用区或一组实例无响应,则根据您的应用需求对您的实例组进行超额预配可防止系统完全瘫痪。
Google 会针对超额预配提出建议,以优先确保您的用户能够使用您的应用。这些建议包括预配超出您的应用日常所需数量的实例,并支付相应费用。根据应用需求和费用限制来决定超额预配。
您可以在创建 MIG 时设置其大小,并且可以在创建后添加或移除实例。
您可以将自动扩缩器配置为根据负载在实例组中自动添加和移除实例。
估计建议的实例组大小
我们建议您预配足够的实例,以便在任何一个可用区中的所有实例都不可用时,您的其余实例仍然达到所需的最少实例数。
请使用下表确定实例组的最小建议大小:
可用区数 | 额外的虚拟机实例 | 建议的虚拟机实例总数 |
---|---|---|
2 | +100% | 200% |
3 | +50% | 150% |
4 | +33% | 133% |
在三个或更多可用区中预配区域级 MIG
在具有至少三个可用区的区域中创建区域级 MIG 时,Google 建议您将实例组超额预配至少 50%。默认情况下,区域级 MIG 会在三个可用区创建实例。在三个可用区创建实例已经帮助您保留了至少 2/3 的服务容量;如果其中一个可用区发生故障,该区域中的另外两个可用区可以继续处理流量,而不会出现中断情况。而如果将该实例组超额预配为 150%,那么您将可以确保即使失去了 1/3 的容量,其余可用区也能为 100% 的流量提供支持。
例如,如果跨三个可用区的 MIG 需要 20 个实例,我们建议您至少额外增加 50% 的实例。在此示例中,20 的 50% 是 10(即增加 10 个实例),这样一来,该实例组中的实例总共会有 30 个。如果您创建大小为 30 的区域级 MIG,则实例组会在这三个可用区中分布您的虚拟机,如下所示:
可用区 | 虚拟机实例数量 |
---|---|
example-zone-1 | 10 |
example-zone-2 | 10 |
example-zone-3 | 10 |
如果其中任何一个可用区发生故障,您仍然有 20 个实例可以处理流量。
在两个可用区中预配区域级 MIG
如需在两个(而不是三个)可用区预配实例,Google 建议您将实例数增加一倍。例如,如果您的服务需要 20 个实例,这些实例分布在两个可用区,我们建议您配置一个包含 40 个实例的区域级 MIG,以便每个可用区都有 20 个实例。如果一个可用区发生故障,您仍然有 20 个实例可以处理流量。
可用区 | 虚拟机实例数量 |
---|---|
example-zone-1 | 20 |
example-zone-2 | 20 |
如果实例组中的实例数在两个可用区中不是均等分布,Compute Engine 会均匀地划分虚拟机组,并将其余实例随机划入其中一个可用区。
在一个可用区中预配区域级 MIG
您可以只在一个可用区中创建区域级 MIG。这类似于创建可用区级 MIG。
我们建议您不要在一个可用区创建区域级 MIG,因为它为高可用性应用提供的是最低限度的保证。如果该可用区发生故障,则整个 MIG 都不可用,这会对您的用户造成潜在影响。
后续步骤
- 创建区域级 MIG
- 了解如何构建可扩缩、弹性佳的 Web 应用。
- 了解 Google Cloud Platform 上的灾难恢复。