区域托管实例组

您可以使用地区级代管式实例组 (MIG) 来提高基于 MIG 的工作负载的弹性。地区级 MIG 会在一个地区内的多个区域中分布您的虚拟机 (VM) 实例,这样可避免单个区域中的所有实例都发生故障这种极端情况。

本页面包含有关地区级 MIG 的概念信息:

如需了解如何创建地区级 MIG,请参阅创建和管理地区级 MIG

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

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

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

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

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

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

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

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

限制

  • 使用地区级 MIG,您可以在一个地区中最多创建 2000 个虚拟机,其中每个区域的虚拟机数量上限为 1000 个。使用区域级 MIG,您最多可以创建 1000 个虚拟机。如果您需要更多信息,请与支持团队联系
  • 更新 MIG 时,您可以在单个请求中最多指定 1000 个虚拟机。
  • 如果您需要有状态 MIG,请查看有状态 MIG 限制

  • 如果您要将负载平衡功能与地区级 MIG 搭配使用,则会受到以下限制:

    • 您无法使用 maxRate 平衡模式。
    • 如果您将 HTTP(S) 负载平衡方案与区域级 MIG 搭配使用,则必须选择 maxRatePerInstancemaxUtilization 平衡模式。
  • 如果您要自动扩缩地区级 MIG,则会受到以下限制:

    • 如需执行扩缩操作,您必须启用主动式实例重新分布功能。如果您将自动扩缩器的模式设置为仅横向扩容,则无需启用主动式实例分布功能。
    • 如果您要根据 Cloud Monitoring 指标自动扩缩地区级 MIG,则会受到以下限制:

      • 您无法使用实例组指标。
      • 您无法对实例指标应用过滤条件。

地区级配置选项

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

  • 您可以选择要在一个地区内的哪些区域中创建实例。
  • 您可以选择如何在选定的各个区域之间分布实例。

下面将介绍这些选项。

区域选择

地区级 MIG 的默认配置是在三个区域中均匀地分布其代管式虚拟机。但出于各种原因,您可能需要为应用选择特定区域。例如,如果您的实例需要 GPU,那么您只能选择支持 GPU 的区域。您的永久性磁盘可能只适用于特定区域,或者您可能希望仅在几个特定的区域(而不是一个地区内的三个随机区域)开始创建实例。

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

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

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

无论您是选择特定区域,还是选择区域并允许 Compute Engine 在地区内的三个区域中创建实例,默认情况下,这些新的实例都将在这些区域中均匀分布。

如需了解如何创建地区级 MIG 以及选择特定区域,请参阅创建地区级 MIG

主动式实例重新分布

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

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

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

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

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

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

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

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

如果关闭主动式实例重新分布功能,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

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

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

  • 使用地区级 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 都不可用,这会对您的用户造成潜在影响。

后续步骤