区域级 MIG 简介

代管式实例组 (MIG) 将其虚拟机分布在一个区域中的多个可用区之间,也称为区域级 MIG。受限于单个可用区的 MIG 也称为可用区级 MIG。

您可以使用区域级 MIG 来提高基于 MIG 的工作负载的弹性。将工作负载分布在一个区域中的多个可用区之间有助于防范单个可用区中的所有实例都发生故障的极端情况。

本文档包含有关区域级 MIG 的概念信息:

如需了解如何创建区域级 MIG,请参阅在多个可用区中创建 MIG

为什么要选择区域级代管式实例组?

Google 推荐区域级 MIG 而不推荐可用区级 MIG,原因如下:

  • 您可以使用区域级 MIG 来管理多达 2000 个实例(相当于可用区级 MIG 实例数的两倍)。
  • 您可以使用区域级 MIG 将应用负载分布到多个可用区,而不是将应用限制在单个可用区中或者跨不同区域管理多个可用区级 MIG。

使用多个可用区可避免可用区性故障,或单个可用区中的整个实例组发生故障等无法预料的情况。如果确实发生了这种情况,您的应用仍可以继续处理来自同一区域的另一个可用区中运行的实例的流量。

如果发生可用区性故障,或者某个可用区的一组实例停止响应,区域级 MIG 会继续通过如下方式支持您的实例:

  • 其余可用区中属于区域级 MIG 的实例会继续处理流量。除此之外,系统不会添加任何新实例,也不会重新分布任何实例(除非您设置了自动扩缩功能)。

  • 待发生故障的可用区恢复正常后,MIG 会开始重新处理来自该可用区的流量。

如果要设计可靠且可扩缩的应用,请使用区域级 MIG。

区域级 MIG 的其他配置选项

创建区域级 MIG 的方法与创建可用区级 MIG 的方法相似,只不过您还可以选择额外的选项:

下面将介绍这些选项。

可用区选择

默认情况下,区域级 MIG 会在三个可用区中均匀分布其代管实例。但出于各种原因,您可能需要为应用选择特定可用区。例如,如果您的实例需要 GPU,那么您只能选择支持 GPU 的可用区,或者您的永久性磁盘或预留仅在某些可用区提供。

如果要选择可用区数或选择实例组在其中运行的特定可用区,则必须在首次创建实例组时执行此类操作。如果您在创建实例组的过程中选择了特定可用区,日后将无法更改或更新这些可用区。

如果您希望 MIG 自动使用支持您在 MIG 实例模板中指定的硬件的可用区,您可以将 MIG 的目标分布形状设置为 BALANCEDANY,然后选择区域中的所有可用区。MIG 会自动检查资源可用性,并仅在具有资源的可用区中安排实例。如果要优先使用可用区级预留,请将形状设置为 ANY。如需了解详情,请参阅目标分布形状

  • 要在一个区域内选择三个以上可用区,您必须明确指定各个可用区。例如,如需选择一个区域内的所有四个可用区,您必须在请求中明确提供所有四个可用区。否则,Compute Engine 默认选择三个可用区。

  • 如需在一个区域中选择两个或更少的可用区,您必须明确指定各个可用区。并且,即使该区域只包含两个可用区,您也必须在请求中明确指定这些可用区。

Google 会在更多可用区提供专用硬件,从而定期扩展其基础架构。区域 MIG 会定期检查硬件可用性,并自动在支持所需机器的可用区中开始安排实例。如果您因任何原因不想在某些可用区运行实例,请在创建实例组时不要选择这些可用区。

如需了解如何创建区域 MIG 和选择可用区,请参阅创建区域 MIG

目标分布形状

默认情况下,区域级 MIG 会在所选可用区中均匀分布其代管实例。但是,如果您需要并非所有可用区都提供的硬件,或者需要优先使用可用区级预留,则可以选择其他分布方式。

如需配置区域级 MIG 在区域内的选定可用区分布其实例的方式,请设置 MIG 的目标分布形状。您可以使用以下选项:

  • 均匀(默认):实例组会适当创建和删除虚拟机实例,以实现并维持各个选定可用区中的代管式实例数量均匀分布。如果任意两个可用区之间的代管式实例数量之差不超过 1 个,则分布就是均匀的。建议用于可用性高的服务工作负载。

  • 平衡:实例组会确定系统获取资源的优先级,在有资源可用的可用区中调度虚拟机,并在各个选定的可用区中尽可能均匀地分布虚拟机,以最大限度地减少可用区故障的影响。建议用于无需自动扩缩的高可用性服务工作负载或批处理工作负载。

  • 不限:实例组会选择可用区来创建虚拟机实例,以满足当前资源限制条件中所请求的虚拟机数量,并最大程度提高未使用的可用区级预留的利用率。建议用于不需要高可用性的批处理工作负载。

创建 MIG 时,如果将其形状设置为 BALANCEDANY,您无需手动验证哪些可用区支持您在实例组实例模板中指定的硬件。您可以选择区域中的所有可用区,当区域 MIG 的形状设置为 BALANCEDANY 时,区域 MIG 会为您检查资源可用性,并仅在具有资源的可用区中安排实例。

根据您的工作负载要求和所需的 MIG 功能选择一个选项。如需了解详情,请参阅对照表使用场景

如需了解如何为新的或现有 MIG 配置目标形状,请参阅设置在各个可用区中分布实例的政策

主动式实例重新分布

默认情况下,区域级 MIG 内的实例会尽量在区域内的各个可用区中均匀分布,以便在出现可用区级别的故障时最大限度地提高应用的可用性。

如果您对实例组中的实例执行 deleteabandon 操作,导致各可用区的分布不均匀,则实例组会主动重新分布实例以恢复到分布均匀的状态。

为了在各个可用区之间重建均匀的分布,实例组会删除具有较多实例的可用区中的实例,并为具有较少实例的可用区添加实例。实例组会自动选择要删除的实例。

主动式重新分布功能重新建立跨可用区的均匀分布。
主动式重新分布的示例

例如,假设您有一个包含 12 个实例的区域级 MIG,这些实例分布在 3 个可用区:abc。如果您删除 c 中的 3 个代管式实例,则实例组会尝试重新平衡,以使实例再次均匀分布在各个可用区。在此示例中,实例组会删除 2 个实例(一个来自 a,另一个来自 b),然后在可用区 c 中创建 2 个实例;如此一来,每个可用区都会有 3 个实例,从而实现了均匀分布。请注意,无法选择性地确定要删除的实例。在新实例启动时,实例组的容量会暂时丢失。

如需防止实例自动重新分布,您可以关闭主动式实例重新分布功能。

在以下情况下,关闭主动式实例重新分布功能非常有用:

  • 从实例组中删除或移除实例而不影响其他正在运行的实例。例如,您可以在作业完成后删除批处理工作器实例,而不影响其他工作器。
  • 避免系统由于执行主动式重新分布操作而意外自动删除具有有状态工作负载的实例。
  • 将 MIG 的目标分布形状设置为 BALANCED
停用主动式重新分布功能可能会影响发生可用区故障期间的容量。
停用主动式重新分布功能后的不均匀分布

如果关闭主动式实例重新分布功能,MIG 不会主动添加或移除实例以实现平衡,但在执行调整大小操作期间,MIG 仍然会根据具体时机尽力实现平衡(通过每个调整大小操作来平衡实例组)。例如,缩容时,实例组会自动从较大可用区中移除实例;扩容时,实例组会为较小可用区添加实例。

与可用区级 MIG 的行为差异

可用区级 MIG 与区域级 MIG 之间的主要差异在于区域级 MIG 可以使用多个可用区。

由于区域级 MIG 的代管式实例分布在一个区域内的各个可用区中,因此以下 MIG 功能的行为略有不同。

自动扩缩区域级 MIG

Compute Engine 为 MIG 提供自动扩缩功能,因此您的实例组能够根据负载的增减自动添加实例(扩容)或移除实例(缩容)。

如果您为区域级 MIG 启用了自动扩缩功能,则该功能将按照如下方式运作:

  • 自动扩缩政策将应用于整个实例组。例如,如果您启用了自动扩缩器,目标是实现 66% 的 CPU 利用率,则自动扩缩器会跟踪实例组中的所有实例,以使所有可用区中的所有实例保持 66% 的平均利用率。

  • 自动扩缩功能会尝试在可用的可用区之间均匀分布虚拟机。通常,自动扩缩器保持各可用区大小平衡的方法是向虚拟机较少的可用区的添加虚拟机。然后,负载会从虚拟机较多的可用区重定向(例如通过负载平衡器)。我们建议不要配置偏好一个可用区的自定义负载均衡器,因为这可能会导致意外行为,例如各个可用区的实例分布不均匀或者其他可用区中的实例未得到充分利用。

  • 如果您的工作流在 3 个可用区均匀使用实例,并且某个可用区发生故障,或者某个可用区内的一组实例发生故障,则可能会失去 1/3 的容量,但 2/3 的容量会保留在其他可用区。我们建议您超额预配自动扩缩的区域级 MIG,以避免在某个可用区发生故障期间,仍在继续运行的服务器过载。

  • 如果某个可用区的资源(例如抢占式实例)暂时不可用,则实例组会继续尝试在该可用区创建这些实例。资源再次可用后,实例组会获取所需数量的运行实例。

  • 如果启用了负载平衡功能并且某个可用区的资源不可用,导致该可用区现有资源的利用率较高,则系统可能会在利用率较低的可用区创建新实例,从而可能导致分布暂时不均匀。

自动扩缩器向一个可用区添加的实例数量不会超过为实例组指定的实例数上限的 1/n,其中 n 是预配可用区的数量。例如,如果您使用的是默认设置(3 个可用区),并且为自动扩缩功能配置的 maxNumReplicas 是 15,则自动扩缩器最多只能在每个可用区为实例组添加 5 (1/3 * 15 = 5) 个实例。如果一个可用区发生故障,则自动扩缩器只会在剩下的两个可用区中扩容到 maxNumReplicas 的 2/3。

预配自动扩缩器配置

超额预配区域级 MIG 的建议类似,您应该超额预配区域级 MIG 的自动扩缩器配置。假设您的实例组使用 3 个可用区,请按如下所示配置自动扩缩功能:

  • 自动扩缩的利用率目标是预计利用率目标的 2/3。
  • 为了适应利用率目标降低的情况,自动扩缩器会添加更多的实例,因此您应该增大 maxNumReplicas 的值,使其比您设置的数量超出 50%,而不考虑超额预配。

例如,如果您预计 20 个实例可以处理峰值负载,并且目标利用率为 80%,请对自动扩缩器进行如下设置:

  • 将目标利用率设置为 2/3 * 0.8 = 0.53 或 53%,而不是 80%
  • 将实例数上限设置为 3/2 * 20 = 30,而不是 20

此设置可帮助确保在单个可用区发生故障时,MIG 不会耗尽容量,因为剩余的 2/3 实例能够处理因某个可用区发生故障而增加的负载(这是因为您已将目标利用率降到其容量以下)。此外,自动扩缩器还会添加新实例,以使实例数量达到您为了维持 2/3 的利用率目标而指定的实例数上限。

但是,您不应该仅依靠超额预配 MIG 来处理增加的负载。Google 建议的最佳做法是定期对应用进行负载测试,以确保应用可以处理可能因某个可用区发生服务中断(从而使 1/3 的实例被移除)而导致的利用率升高情况。

如需详细了解自动扩缩功能,请参阅自动扩缩功能概览

更新区域级 MIG

创建实例组后,您无法更改或更新区域级 MIG 的可用区。但是,您可以设置实例组的目标分布形状以优先使用不同的可用区 - 例如,如果您已预留资源或需要并非所有可用区都提供的硬件。

如果您要将新模板发布到区域级 MIG,请参阅更新区域级 MIG

如果您要在 MIG 中添加实例或从中移除实例,则相应的过程对于区域级 MIG 和可用区级 MIG 是相似的。请参阅在 MIG 中添加和移除虚拟机

如果您对在 MIG 中配置有状态磁盘或有状态元数据感兴趣,请参阅配置有状态 MIG

如何通过超额预配来提高可用性

鉴于各种事件可能导致一个或多个实例不可用,您可以使用多项 Google Cloud 服务缓解此问题:

  • 使用具有 EVENBALANCED 目标分配形状的区域级 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 都不可用,这会对您的用户造成潜在影响。

后续步骤