在备用可用区中修复虚拟机

本文档介绍如何允许区域级代管式实例组 (MIG) 在无法在其原始可用区中修复虚拟机 (VM) 实例时,在备用可用区中修复该虚拟机。如需详细了解 MIG 中的修复,请参阅关于修复虚拟机以实现高可用性

创建区域级 MIG 时,您可以选择一个或多个可用区,MIG 会将虚拟机分布在这些可用区中。默认情况下,如果 MIG 中的虚拟机发生故障,MIG 会尝试在其原始可用区中修复该虚拟机。您可以选择性地允许 MIG 在其他所选可用区之一中修复该虚拟机,这在 MIG 无法在其原始可用区中修复虚拟机的情况下非常有用。MIG 会根据可用容量和配额选择备用可用区。

限制

将区域级 MIG 配置为在备用可用区中修复虚拟机时,存在以下限制:

准备工作

  • 如果您尚未设置身份验证,请进行设置。身份验证用于验证您的身份,以便访问 Google Cloud 服务和 API。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:

    Select the tab for how you plan to use the samples on this page:

    Console

    When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.

    gcloud

    1. 安装 Google Cloud CLI。 安装完成后,运行以下命令来初始化 Google Cloud CLI:

      gcloud init

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

    2. Set a default region and zone.

    Terraform

    如需在本地开发环境中使用本页面上的 Terraform 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭证设置应用默认凭证。

      安装 Google Cloud CLI。

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

      If you're using a local shell, then create local authentication credentials for your user account:

      gcloud auth application-default login

      You don't need to do this if you're using Cloud Shell.

      If an authentication error is returned, and you are using an external identity provider (IdP), confirm that you have signed in to the gcloud CLI with your federated identity.

    如需了解详情,请参阅 Set up authentication for a local development environment

    REST

    如需在本地开发环境中使用本页面上的 REST API 示例,请使用您提供给 gcloud CLI 的凭证。

      安装 Google Cloud CLI。

      如果您使用的是外部身份提供方 (IdP),则必须先使用联合身份登录 gcloud CLI

    如需了解详情,请参阅 Google Cloud 身份验证文档中的使用 REST 时进行身份验证

允许在备用可用区中进行修复

如需允许 MIG 在备用可用区中修复虚拟机,请选择以下选项之一:

控制台

  1. 在 Google Cloud 控制台中,前往实例群组页面。

    进入“实例组”

  2. 如果您已有 MIG,请执行以下操作:

    1. 点击 MIG 的名称。
    2. 点击修改
  3. 如果您还没有 MIG,请执行以下操作:

    1. 点击创建实例组
    2. 输入名称
    3. 选择实例模板
    4. 位置部分,选择多个可用区,然后选择区域和可用区。
    5. 目标分布形状下拉菜单中,选择均衡任意

      • 如果您选择均衡,请在随即显示的对话框中点击停用实例重新分配

      • 如果您要选择不限,则必须先删除自动扩缩配置。如需删除自动扩缩配置,请在自动扩缩模式下拉菜单中,点击删除自动扩缩配置

  4. 虚拟机实例生命周期部分中,确保以下字段按如下所示设置:

    1. 失败时的默认操作列表设置为修复实例

    2. 虚拟机实例修复期间的更新设置为更新实例配置

    3. 在虚拟机实例修复期间更改可用区部分,选中允许在备用可用区中修复虚拟机复选框。

  5. 对于其他设置,您可以使用默认值或修改这些字段。

  6. 完成后,点击保存(针对现有 MIG)或创建(针对新 MIG)。

gcloud

如需将现有 MIG 配置为在备用可用区中修复虚拟机,请使用 Beta 版 update 命令

gcloud beta compute instance-groups managed update MIG_NAME \
    --on-repair-allow-changing-zone=YES \
    --force-update-on-repair \
    --region=REGION

如需创建可在备用可用区中修复虚拟机的 MIG,请使用 Beta 版 create 命令

gcloud beta compute instance-groups managed create MIG_NAME \
    --template=INSTANCE_TEMPLATE_URL \
    --size=SIZE \
    --zones=ZONES \
    --target-distribution-shape=SHAPE \
    --instance-redistribution-type=none \
    --on-repair-allow-changing-zone=YES \
    --force-update-on-repair

替换以下内容:

  • MIG_NAME:MIG 的名称。
  • INSTANCE_TEMPLATE_URL:您要用于在 MIG 中创建虚拟机的实例模板的网址。网址可以包含实例模板的 ID 或名称。请指定以下某个值:
    • 对于区域级实例模板:projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • 对于全球实例模板:INSTANCE_TEMPLATE_ID
  • SIZE:MIG 的目标大小。
  • ZONES:您要在其中创建 MIG 中的虚拟机的区域中的可用区列表。
  • SHAPE:目标分布形状。此值可以是 balancedany
  • REGION:MIG 所在的区域。

Terraform

如果您尚未创建您希望为 MIG 中的每个虚拟机指定机器类型、启动磁盘映像、网络和其他虚拟机属性的实例模板,请创建实例模板

如需创建可在备用可用区中修复虚拟机的 MIG,请使用 google_compute_region_instance_group_manager 资源

resource "google_compute_region_instance_group_manager" "default" {
  provider           = google-beta
  name               = "example-rmig"
  base_instance_name = "example-rmig-instance"
  region             = "us-central1"

  target_size                      = 3
  distribution_policy_target_shape = "BALANCED"

  version {
    instance_template = google_compute_instance_template.default.id
  }

  instance_lifecycle_policy {
    default_action_on_failure = "REPAIR"
    force_update_on_repair    = "YES"
    on_repair {
      allow_changing_zone = "YES"
    }
  }

  update_policy {
    instance_redistribution_type = "NONE"
    type                         = "OPPORTUNISTIC"
    minimal_action               = "REPLACE"
    max_surge_fixed              = 0
    max_unavailable_fixed        = 6
  }
}

如需了解如何应用或移除 Terraform 配置,请参阅基本 Terraform 命令

REST

如需将现有 MIG 配置为在备用可用区中修复虚拟机,请使用 Beta 版 regionInstanceGroupManagers.patch 方法

PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME
{
    "instanceLifecyclePolicy": {
      "onRepair": {
        "allowChangingZone": "YES"
      },
      "forceUpdateOnRepair": "YES"
    }
}

如需创建可在备用可用区中修复虚拟机的 MIG,请使用 Beta 版 regionInstanceGroupManagers.insert 方法

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

{
  "name": "MIG_NAME",
  "instanceTemplate": "INSTANCE_TEMPLATE_URL",
  "targetSize": SIZE,
  "distributionPolicy": {
    "targetShape": "SHAPE"
  }
  "updatePolicy": {
    "instanceRedistributionType": none
  }
  "instanceLifecyclePolicy": {
    "forceUpdateOnRepair": "YES",
    "onRepair": {
      "allowChangingZone": "YES"
    }
  }
}

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • REGION:MIG 所在的区域。
  • MIG_NAME:MIG 的名称。
  • INSTANCE_TEMPLATE_URL:您要用于在 MIG 中创建虚拟机的实例模板的网址。网址可以包含实例模板的 ID 或名称。请指定以下某个值:
    • 对于区域级实例模板:projects/PROJECT_ID/regions/REGION/instanceTemplates/INSTANCE_TEMPLATE_ID
    • 对于全球实例模板:INSTANCE_TEMPLATE_ID
  • SIZE:MIG 的目标大小。
  • SHAPE:目标分布形状。此值可以是 BALANCEDANY

禁止在备用可用区中修复

如果您已将 MIG 配置为在备用可用区中修复虚拟机,则可以恢复默认设置,即让 MIG 在原始可用区中修复虚拟机。

如需禁止在备用可用区中进行修复,请选择以下选项之一:

控制台

  1. 在 Google Cloud 控制台中,前往实例群组页面。

    进入“实例组”

  2. 点击 MIG 的名称。

  3. 点击修改

  4. 前往虚拟机实例生命周期部分。

  5. 在虚拟机实例修复期间更改可用区部分,清除允许在备用可用区中修复虚拟机复选框。

  6. 点击保存

gcloud

如需禁止在备用可用区中进行修复,请使用 Beta 版 update 命令

gcloud beta compute instance-groups managed update MIG_NAME \
    --on-repair-allow-changing-zone=NO \
    --region=REGION

替换以下内容:

  • MIG_NAME:MIG 的名称。
  • REGION:MIG 所在的区域。

REST

如需禁止在备用可用区中进行修复,请使用 Beta 版 regionInstanceGroupManagers.patch 方法

PATCH https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/regions/REGION/instanceGroupManagers/MIG_NAME
{
    "instanceLifecyclePolicy": {
      "onRepair": {
        "allowChangingZone": "NO"
      }
    }
}

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • REGION:MIG 所在的区域。
  • MIG_NAME:MIG 的名称。

后续步骤