在区域级 MIG 中停用和重新启用主动式虚拟机重新分布功能

区域级代管式实例组 (MIG) 中,如需在该区域的选定可用区中保持均匀的虚拟机 (VM) 实例数量,请使用主动式实例重新分布功能。此配置选项可在出现可用区级别故障时最大限度地提高应用的可用性。

对于区域级 MIG,主动式实例重新分布功能默认启用,但您可以为非自动扩缩的区域级 MIG 停用该功能。主动式实例重新分布功能停用时,实例组不会尝试主动在可用区之间重新分布虚拟机。在以下情况下,此操作将非常有用:

  • 从实例组中删除放弃虚拟机而不影响其他正在运行的虚拟机。例如,您可以在作业完成后删除批处理工作器虚拟机,而不影响其他工作器。
  • 避免系统由于执行主动式重新分布操作而意外自动删除具有有状态工作负载的虚拟机。
  • 将 MIG 的目标分布形状设置为 BALANCED

您可以在创建区域级 MIG 时停用主动式实例重新分布功能。您还可以为现有的区域级 MIG 启用或停用该功能。

准备工作

创建停用了主动式实例重新分布功能的实例组

如需创建停用了主动式实例重新分布功能的区域级 MIG,请使用控制台gcloud CLICompute Engine API

控制台

  1. 在控制台中,转到实例组页面。

    转到“实例组”页面

  2. 点击创建实例组以创建一个新的实例组。
  3. 为实例组指定名称和(可选)说明。
  4. 为实例组选择一个实例模板或创建一个新实例模板。
  5. 指定此实例组内的虚拟机数量。对于高可用性工作负载,请务必预配足够多的虚拟机,以便在一个可用区发生故障时,应用可获得相应的支持。
  6. 位置下,选择多个可用区
  7. 选择一个区域,然后选择要使用的可用区。
  8. 如需停用主动式实例重新分布功能,请执行以下操作:
    1. 确保将自动扩缩模式设置为关闭:不自动扩缩
    2. 实例重新分布下,清除启用实例重新分布复选框。
  9. 继续完成 MIG 创建过程的剩余部分。

gcloud

如需创建不具备主动式实例重新分布功能的新地区级 MIG,请使用 gcloud compute instance-groups managed create 命令,并将 --instance-redistribution-type 标志设置为 NONE

gcloud compute instance-groups managed create INSTANCE_GROUP_NAME \
    --template INSTANCE_TEMPLATE_NAME \
    --size TARGET_SIZE \
    --zones ZONES \
    --instance-redistribution-type NONE

替换以下内容:

  • INSTANCE_GROUP_NAME:MIG 的名称
  • INSTANCE_TEMPLATE_NAME:要用于实例组的实例模板的名称
  • TARGET_SIZE:实例组的目标大小
  • ZONES:要在其中部署虚拟机的单个区域中的可用区列表

例如:

gcloud compute instance-groups managed create example-rmig \
    --template example-template \
    --size 30 \
    --zones us-east1-b,us-east1-c \
    --instance-redistribution-type NONE

API

如需创建不具备主动式实例重新分布功能的非自动扩缩地区级 MIG,请向 regionInstanceGroupManagers.insert 方法发出 POST 请求。在请求正文中,添加 updatePolicy 属性并将其 instanceRedistributionType 字段设置为 NONE

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/INSTANCE_GROUP_NAME

{
    "name": "INSTANCE_GROUP_NAME",
    "instanceTemplate": "global/instanceTemplates/INSTANCE_TEMPLATE_NAME",
    "targetSize": "TARGET_SIZE",
    "distributionPolicy": {
        "zones": [
            {"zone": "zones/ZONE"},
            {"zone": "zones/ZONE"}
        ]
    },
    "updatePolicy": {
        "instanceRedistributionType": "NONE"
    }
}

请替换以下内容:

  • PROJECT_ID:此请求的项目 ID
  • REGION:实例组所在的地区
  • INSTANCE_GROUP_NAME:MIG 的名称
  • INSTANCE_TEMPLATE_NAME:要用于实例组的实例模板的名称
  • TARGET_SIZE:实例组的目标大小
  • ZONE:要在其中部署虚拟机的单个区域中的可用区名称

关闭主动式实例重新分布功能

您必须先设置自动扩缩器的模式以关闭自动扩缩功能或者将其限制为仅扩容,然后才能关闭主动式实例重新分布功能。

如需停用或重新启用主动式实例分布功能,请使用控制台gcloud CLICompute Engine API

控制台

  1. 在控制台中,转到实例组页面。

    转到“实例组”页面

  2. 在列表的名称列下方,点击您要修改的实例组的名称。
  3. 点击修改以修改此代管实例组。
  4. 如果存在任何自动扩缩配置,请确保将自动扩缩模式设置为关闭:不自动扩缩
  5. 实例重新分布下,取消选择启用实例重新分布复选框。
  6. 点击保存

gcloud

如需为非自动扩缩的地区级 MIG 关闭主动式实例重新分布功能,请使用 compute instance-groups managed update 命令,并将 --instance-redistribution-type 标志设置为 NONE

gcloud compute instance-groups managed update INSTANCE_GROUP_NAME \
    --instance-redistribution-type NONE \
    --region REGION

替换以下内容:

  • INSTANCE_GROUP_NAME:MIG 的名称
  • REGION:实例组所在的地区

API

如需为非自动扩缩的地区级 MIG 关闭主动式实例重新分布功能,请向 regionInstanceGroupManagers.patch 方法发出 PATCH 请求。在请求正文中,添加 updatePolicy 属性并将其 instanceRedistributionType 字段设置为 NONE

 PATCH https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/[INSTANCE_GROUP_NAME

{
    "updatePolicy": {
         "instanceRedistributionType": "NONE"
    }
}

请替换以下内容:

  • PROJECT_ID:此请求的项目 ID
  • REGION:实例组所在的地区
  • INSTANCE_GROUP_NAME:非自动扩缩 MIG 的名称

启用主动式实例分布功能

如需启用主动式实例分布功能,请使用与停用主动式实例重新分布功能类似的命令,但将实例重新分布类型设置为 PROACTIVE

如果您手动删除或放弃某些代管式实例,导致区域中虚拟机分布不均匀,则必须先手动重新平衡实例组,然后才能重新启用主动式实例重新分布功能。任意两个区域的虚拟机数量差不应超过 1 个虚拟机。

当各个区域中的虚拟机分布不均匀(两个区域的虚拟机数量差为 2 个或以上虚拟机)时,地区级 MIG 不允许启用主动式实例重新分布功能。这是为了防止意外自动删除具有较多虚拟机的区域中的虚拟机,该操作会为了实现均匀分布而触发。

后续步骤