备份 Compute Engine 实例

Compute Engine 实例的 Google 管理的备份流程涉及将数据发送到备份保险柜。这些备份保险柜提供不可变性和强制保留功能。您可以选择将备份存储在单个区域或多个区域中。

Google 管理的模型支持两种主要执行方法:计划备份和按需备份。本文档介绍了如何配置和管理这些备份。

概览

Compute Engine 实例备份不仅可以保护磁盘,还可以保护虚拟机的配置和元数据(例如机器类型、网络接口、IP 设置、服务账号、标签和标记),同时确保多磁盘崩溃一致性。将备份发送到备份保险柜可提供不可变性和强制保留。借助备份保险柜,您可以将备份存储在单区域或多区域中。备份 Compute Engine 实例的方法主要有两种:

  • 使用 Google Cloud 控制台备份 Compute Engine 实例:在Google Cloud 控制台中,您可以通过应用备份方案将 Compute Engine 实例备份到备份保险柜。您可以使用以下任一方法备份数据。这两种方法都可让您将备份安全地存储在备份保险柜中,从而在发生数据丢失或其他意外事件时,提供一种可靠的方法来恢复 Compute Engine 实例。

    • 预定备份:按特定间隔(例如每天、每周、每月或每年)自动备份 Compute Engine 实例。

    • 按需备份:根据需要随时创建按需备份。按需备份适用于在对实例进行重大更改之前创建备份,或用于临时数据保护。

  • 使用管理控制台备份 Compute Engine 实例:如果您有以下任何备份要求,则可以使用管理控制台备份 Compute Engine 实例:

    • 跨区域备份
    • 挂接到 Compute Engine 实例的特定磁盘的备份
    • 基于标记自动保护 Compute Engine 实例
    • 如果 Google Cloud 基于控制台的备份方案和备份保险柜不在与运行来源 Compute Engine 实例的区域兼容的位置。

设备管理控制台是 Backup and DR 的一部分,用于管理设备管理的备份。如果您必须使用设备管理控制台,请参阅通过设备管理控制台发现和保护 Compute Engine 实例。

准备工作

  1. 在 Compute Engine 实例所在的位置启用 Backup and DR API。

    启用该 API

  2. 创建备份保险柜。

  3. 创建备份方案。

  4. 为备份用户分配 IAM 角色和权限。

  5. 在 Compute Engine 项目中授予备份保险柜访问权限。

  6. 在存储桶上设置 Observability Analytics,以监控 Backup and DR 备份作业。

IAM 配置

如需配置预定备份或执行按需备份,管理员必须在备份保险柜项目中授予以下 IAM 角色:

  • Backup and DR Backup User (roles/backupdr.backupUser)
  • Viewer (roles/viewer)

Google 管理的备份操作所需的特定权限包括:

  • backupdr.backupPlans.list
  • backupdr.backupPlanAssociations.createForComputeInstance
  • backupdr.backupPlanAssociations.list
  • backupdr.backupPlanAssociations.get
  • backupdr.backupPlanAssociations.triggerBackupForComputeInstance
  • backupdr.backupPlanAssociations.deleteForComputeInstance
  • backupdr.backupPlans.useForComputeInstance
  • backupdr.locations.list
  • backupdr.operations.get
  • cloudasset.assets.searchAllResources

除了恢复权限之外,用户还必须拥有查看和检索备份元数据的权限:

  • backupdr.backupVaults.get
  • backupdr.backupVaults.list
  • backupdr.bvbackups.list
  • backupdr.bvbackups.get
  • backupdr.bvdataSources.list
  • backupdr.bvdataSources.get

如果 Compute Engine 实例与备份保险柜位于不同的项目中,您必须向 Compute Engine 项目中的备份保险柜服务代理授予 Backup and DR Compute Engine Operator (roles/backupdr.computeEngineOperator) 角色。

下表列出了每次 API 调用所需的权限:

资源 要对资源执行的操作 每次 API 调用所需的权限 需要分配到的项目
备份保险柜 创建备份保险柜 backupdr.backupVaults.create 管理项目
删除备份保险柜 backupdr.backupVaults.delete 管理项目
更新备份保险柜 backupdr.backupVaults.update 管理项目
列出备份保险柜 backupdr.backupVaults.list 管理项目
获取 BackupVault backupdr.backupVaults.get 管理项目
备份方案 创建 BackupPlan backupdr.backupPlans.create 管理项目
删除 BackupPlan backupdr.backupPlans.delete 管理项目
获取 BackupPlan backupdr.backupPlans.get 管理项目
列出备份方案 backupdr.backupPlans.list 管理项目
备份方案关联 创建备份方案关联 工作负载项目
backupdr.backupPlanAssociations.createForComputeInstance 工作负载项目
backupdr.backupPlans.useForComputeInstance 管理项目
删除备份方案关联 backupdr.backupPlanAssociations.deleteForComputeInstance 工作负载项目
在备份方案关联上触发按需备份 backupdr.backupPlanAssociations.triggerBackupForComputeInstance 工作负载项目
获取备份方案关联 backupdr.backupPlanAssociations.getForComputeInstance 工作负载项目
列出备份方案关联 backupdr.backupPlanAssociations.list 工作负载项目
提取备份方案关联 backupdr.backupPlanAssociations.fetchForComputeInstance 工作负载项目
数据源 获取数据源 backupdr.bvdataSources.get 管理项目
列出数据源 backupdr.backupPlanAssociations.list 管理项目
备份 获取备份 backupdr.bvbackups.get 管理项目
列出备份 backupdr.bvbackups.list 管理项目
删除备份 backupdr.bvbackups.delete 管理项目
恢复备份 backupdr.bvbackups.restore 管理项目
操作 列出操作 backupdr.operations.list 各自的项目
GET 操作 backupdr.operations.get 各自的项目

在 Compute Engine 项目中授予备份保险柜访问权限

如需在与创建备份保险柜的项目不同的项目中备份 Compute Engine 实例,您必须向 Compute Engine 项目中的备份保险柜服务代理授予 Backup and DR Compute Engine Operator (roles/backupdr.computeEngineOperator) IAM 角色。如果存储备份的备份保险柜项目与 Compute Engine 项目不同,请将该角色分配给 Compute Engine 项目中的备份保险柜服务代理。

如需在创建备份保险柜的同一项目中备份 Compute Engine 实例,您无需授予任何角色。

如需了解如何在要备份的项目中向备份保险柜服务代理授予角色,请参阅向服务代理授予角色。

约束和限制

备份和灾难恢复不支持对使用以下配置的 Compute Engine 实例进行 Google 管理的备份:

  • 已挂接极端永久性磁盘的实例
  • 使用任何 hyperdisk-* 磁盘类型的实例
  • 使用 C3D、H3、A3 或 Z3 机器类型的实例
  • 使用客户提供的加密密钥 (CSEK) 的实例。支持客户管理的加密密钥 (CMEK);如需了解所需权限,请参阅 Identity and Access Management 配置。
  • 缺少已挂接磁盘的实例
  • 大小超过 200 太字节 (TB) 的实例

配置预定备份

请按照以下说明为 Compute Engine 实例配置计划备份。

控制台

  1. 在 Google Cloud 控制台中,前往已保管的备份页面。

    前往“受保管的备份”页面

  2. 点击安排备份。

  3. 使用资源类型下拉菜单,选择资源类型。

  4. 从项目列表中,点击浏览,然后选择 Compute Engine 实例所在的项目。

  5. 从区域列表中,选择实例所在的区域。

  6. 在资源列表中,点击浏览。

  7. 选择要备份的 Compute Engine 实例,然后点击完成。

  8. 点击继续。

  9. 在备份方案列表中,点击选择。

  10. 选择要用于保护 Compute Engine 实例的备份方案。

  11. 点击完成。

  12. 查看备份详细信息,然后点击安排。

gcloud

  1. 获取实例 ID。

      gcloud compute instances describe VM_NAME --zone=VM_ZONE --format="value(id)"
    

    替换以下内容:

    • VM_NAME:虚拟机实例的名称。
    • VM_ZONE:虚拟机所在的位置。
  2. 配置预定备份。

      gcloud backup-dr backup-plan-associations create BACKUP_PLAN_ASSOCIATION_NAME \
      --location=VM_REGION \
      --resource=projects/VM_PROJECT_ID/zones/VM_ZONE/instances/VM_ID \
      --backup-plan=projects/PROJECT_ID/locations/LOCATION/backupPlans/BACKUP_PLAN
    

    替换以下内容:

    • BACKUP_PLAN_ASSOCIATION_NAME:备份方案关联的名称。
    • VM_REGION:Compute Engine 实例所在的区域。
    • VM_PROJECT_ID:Compute Engine 实例所在项目的名称。
    • VM_ZONE:Compute Engine 实例所在的可用区。
    • VM_ID:Compute Engine 实例 ID。
    • PROJECT_ID:备份方案所在项目的名称。
    • LOCATION:备份方案所在的区域。
    • BACKUP_PLAN:您要与 Compute Engine 实例关联的备份方案的名称。

Terraform

您可以使用 Terraform 资源配置计划备份。


# Before creating a backup plan association, you need to create backup plan (google_backup_dr_backup_plan)
# and compute instance (google_compute_instance).
resource "google_backup_dr_backup_plan_association" "default" {
  provider                   = google-beta
  location                   = "us-central1"
  backup_plan_association_id = "my-bpa"
  resource                   = google_compute_instance.default.id
  resource_type              = "compute.googleapis.com/Instance"
  backup_plan                = google_backup_dr_backup_plan.default.name
}

Compute Engine 实例的选择性磁盘备份

默认情况下,当备份方案保护 Compute Engine 实例时,挂接到该实例的所有磁盘都会包含在虚拟机 (VM) 备份中。

您可以在备份方案中配置选择性磁盘备份,以从虚拟机备份中排除特定磁盘。从选择性磁盘备份恢复实例时,系统只会恢复备份时受保护的磁盘。

在创建或更新备份方案时,您可以使用两个互斥属性来配置选择性磁盘备份:

  • 仅启动磁盘 (boot-disk-only):仅备份实例的启动磁盘。所有挂接的非启动磁盘都会从 Compute Engine 实例备份中排除。
  • 磁盘排除标签 (disk-exclusion-labels):排除与指定标签键值对匹配的所有挂接磁盘。在备份运行时,备份系统会检查 Compute Engine 实例上每个磁盘所附加的标签,并排除匹配的磁盘。如果在挂接的磁盘上未找到匹配的标签,则该磁盘会包含在备份中。

在备份方案中配置选择性磁盘备份

在创建或更新备份方案时,请按照以下说明配置选择性磁盘备份:

控制台

  1. 按照创建包含备份规则的备份方案中的第 1 步到第 7 步操作,选择 Compute Engine 虚拟机作为资源类型。
  2. 使用下拉菜单配置选择性磁盘备份:
    • 包含所有磁盘:备份挂接到 Compute Engine 实例的所有磁盘。
    • 仅包含启动磁盘:仅备份启动磁盘。
    • 按标签排除磁盘:排除与特定标签匹配的挂接磁盘。输入标签键值对 (key=value)。
  3. 点击创建。

gcloud

如需配置选择性磁盘备份,请在使用 gcloud CLI 创建或更新备份方案时,在 --compute-instance-properties 标志中指定 boot-disk-only 或 disk-exclusion-labels。

  • 创建仅备份启动磁盘的备份方案:

    gcloud backup-dr backup-plans create BACKUP_PLAN_NAME \
        --compute-instance-properties=boot-disk-only=true \
        --resource-type=compute.googleapis.com/Instance \
        --location=REGION \
        --project=PROJECT_ID \
        --backup-vault=BACKUPVAULT_NAME
    

    替换以下内容:

    • BACKUP_PLAN_NAME:备份方案的名称。
    • REGION:您要在其中创建备份方案的 Google Cloud 区域。
    • PROJECT_ID:备份保险柜所在项目的名称。
    • BACKUPVAULT_NAME:要用于备份存储的备份保险柜的名称。
  • 创建备份方案,以排除与特定标签匹配的磁盘:

    gcloud backup-dr backup-plans create BACKUP_PLAN_NAME \
        --compute-instance-properties=disk-exclusion-labels=env:scratch,data:temp \
        --resource-type=compute.googleapis.com/Instance \
        --location=REGION \
        --project=PROJECT_ID \
        --backup-vault=BACKUPVAULT_NAME
    

    替换以下内容:

    • BACKUP_PLAN_NAME:备份方案的名称。
    • REGION:您要在其中创建备份方案的 Google Cloud 区域。
    • PROJECT_ID:备份保险柜所在项目的名称。
    • BACKUPVAULT_NAME:要用于备份存储的备份保险柜的名称。

Backup and DR Compute Engine 备份的应用一致性

应用一致性快照可捕获备份时应用数据的状态,所有应用事务已完成且所有待处理的写入都刷新到磁盘。

按照以下说明为 Compute Engine 实例配置应用一致性备份。

准备工作

  1. 阅读应用一致性快照。

  2. Linux 环境中应用一致性实例备份的备份方案需要使用前置脚本和后置脚本。为 Linux 环境创建必要的快照前和快照后脚本。

为 Compute Engine 实例上的应用一致性备份创建备份方案

按照以下说明为 Compute Engine 实例创建应用一致性备份。

控制台

如需创建备份方案,以便使用 Guest Flush 或 VSS 为 Compute Engine 实例实现应用一致性,请执行以下操作:

  1. 在 Google Cloud 控制台中,前往“Backup and DR”页面。

    前往“备份和灾难恢复”

  2. 在导航菜单中,点击备份方案。

  3. 点击创建备份方案。

    系统会显示创建备份方案页面。

  4. 使用资源类型下拉菜单,选择 Compute Engine 虚拟机。

  5. 在备份方案名称字段中输入唯一名称。

  6. 可选:在说明字段中输入说明。

  7. 从区域下拉列表中,选择要在其中创建备份方案的区域。此区域必须与您要备份的 Compute Engine 实例的区域兼容。

  8. 在选择备份存储位置下,选择备份保险柜位置类型。

  9. 使用区域下拉菜单,选择备份保险柜位置。

  10. 使用备份保险柜下拉菜单,选择现有备份保险柜。

  11. 可选:如需添加备份规则,请点击添加规则,然后执行以下操作:

    1. 在名称字段中,输入备份规则的名称。

    2. 如需选择何时创建备份,请使用重复下拉列表,然后选择创建备份的频率(每小时、每天、每周、每月或每年)。

    3. 使用时区下拉菜单,选择要在其中执行备份作业的时区。

    4. 使用开始时间下拉菜单,选择您希望备份作业开始的时间。

    5. 使用结束时间下拉菜单,选择您希望备份作业完成的时间。

    6. 在删除备份前的保留天数字段中,输入您希望在删除备份之前保留备份的天数。

    7. 点击保存。

  12. 如需包含待处理的写入操作并执行应用一致性备份,请勾选启用应用一致性快照复选框。

  13. 点击创建。

创建后,此备份方案可应用于您的 Compute Engine 实例。使用此方案进行的备份将尝试执行客机 flush/VSS 操作,以实现应用一致性。您可以在“备份方案列表”和“备份清单”页面中查看一致性类型。

gcloud

  1. 创建备份方案。

    gcloud backup-dr backup-plans create BACKUP_PLAN_NAME \
    --compute-instance-properties=guest-flush=true \
    --resource-type=compute.googleapis.com/Instance \
    --location=REGION \
    --project=PROJECT_ID \
    --backup-vault=BACKUPVAULT_NAME \
    --backup-rule=rule-id=RULE_NAME,recurrence=RECURRENCE,hourly-frequency=HOURS, \
    time-zone=TIME_ZONE,backup-window-start=START_TIME,backup-window-end=END_TIME,\
    retention-days=BACKUP_RETENTION --max-custom-on-demand-retention-days=MAX_ONDEMAND_RETENTION
    

    替换以下内容:

    • BACKUP_PLAN_NAME:备份方案的名称。
    • REGION:您要在其中创建备份方案的 Google Cloud 区域。
    • PROJECT_ID:备份保险柜所在项目的名称。
    • BACKUPVAULT_NAME:要用于备份存储的备份保险柜的名称。
    • RULE_NAME:备份规则的名称。
    • RECURRENCE:创建备份的频率。可以是每小时、每天、每周、每月或每年。
    • HOURS:每小时备份的频率。仅当您将重复周期设置为每小时时,才需要指定此值。最小小时频率默认值为 6 小时。
    • TIME_ZONE:备份方案的时区,例如 UTC。使用 IANA 时区格式添加备份方案的时区。
    • START_TIME:开始时间采用 24 小时制,代表一天中的具体小时数。开始时间必须早于结束时间,并且包含在备份窗口中。
    • END_TIME:结束时间是一天中的小时,采用 24 小时制。结束时间必须晚于开始时间,并且不包含在备份窗口内。
    • BACKUP_RETENTION:备份的保留期限。请注意,备份保留期限必须等于或大于备份保险柜强制执行的最短保留期限。
    • MAX_ONDEMAND_RETENTION:使用此备份方案创建的按需备份允许的自定义保留期限上限(以天为单位)。

更新现有备份方案,以便对 Compute Engine 实例进行应用一致性备份

按照以下说明更新备份方案,以生成 Compute Engine 实例的应用一致性备份。

控制台

如需更新备份方案,以便使用 Guest Flush 或 VSS 为 Compute Engine 实例启用应用一致性,请按照以下说明操作:

  1. 在 Google Cloud 控制台中,前往 Backup and DR 备份方案页面。

    前往“备份方案”

  2. 选择要修改的备份方案,或选中其复选框,然后点击 图标。

  3. 点击修改。

  4. 勾选启用应用一致性复选框。

  5. 点击保存更改。

gcloud

  1. 更新备份方案。

    gcloud backup-dr backup-plans update BACKUP_PLAN_NAME \
    --compute-instance-properties=guest-flush=true \
    --project=PROJECT_ID \
    --location=REGION \
    --description=DESCRIPTION \
    --backup-rule=BACKUP_RULE \
    --add-backup-rule=ADD_BACKUP_RULE \
    --remove-backup-rule=REMOVE_BACKUP_RULE \
    --max-custom-on-demand-retention-days=MAX_ONDEMAND_RETENTION
    

    替换以下内容:

    • BACKUP_PLAN_NAME:备份方案的名称。
    • PROJECT_ID:备份保险柜所在项目的名称。
    • REGION:您要在其中创建备份方案的位置。
    • DESCRIPTION:备份方案的更新说明。
    • BACKUP_RULE:具有更新值的现有备份规则的完整定义。
    • ADD_BACKUP_RULE:要添加到备份方案的备份规则的参数。可以重复使用此标志来添加更多备份规则。
    • REMOVE_BACKUP_RULE:要从备份方案中移除的现有备份规则。
    • MAX_ONDEMAND_RETENTION:使用此备份方案创建的按需备份允许的自定义保留期限上限(以天为单位)。

更改应用于 Compute Engine 实例的备份方案

您可以将应用于 Compute Engine 实例的备份方案更改为其他备份方案。其他备份方案必须满足以下条件:

  • 使用相同的备份保险柜
  • 与 Compute Engine 实例位于同一区域

按照以下说明更改与 Compute Engine 实例关联的备份方案。

控制台

  1. 在 Google Cloud 控制台中,前往已保险备份页面。

    前往“受保管的备份”页面

    保险柜中的备份页面仅列出了已应用备份方案且备份已存储在项目内备份保险柜中的实例。

  2. 选择要更改方案的备份。从备份的备份详情页面或 菜单中,选择更改备份方案。选择备份方案窗口仅列出对此实例有效的备份方案。

  3. 选择备份方案,然后点击应用。

gcloud

  • 更改分配的备份方案。

      gcloud backup-dr backup-plan-associations update BACKUP_PLAN_ASSOCIATION_NAME \
      --workload-project=VM_PROJECT_ID \
      --location=VM_REGION \
      --backup-plan=BACKUP-PLAN \
      --project=PROJECT_ID
    

    替换以下内容:

    • BACKUP_PLAN_ASSOCIATION_NAME:备份方案关联资源的名称。
    • VM_PROJECT_ID:Compute Engine 实例的项目 ID。
    • VM_REGION:Compute Engine 实例的位置。
    • BACKUP_PLAN:您要切换到的备份方案的名称。
    • PROJECT_ID:所选备份方案的项目 ID。

列出定期备份

按照以下说明列出已备份的 Compute Engine 实例。

控制台

  1. 在 Google Cloud 控制台中,前往已保管的备份页面。

    前往“受保管的备份”页面

    已存储到保险柜的备份页面仅列出了已应用备份方案且备份已存储在项目内备份保险柜中的实例。

gcloud

  1. 列出计划备份。

      gcloud backup-dr backup-plan-associations list \
      --location=LOCATION \
      --project=PROJECT_ID
    

    替换以下内容:

    • PROJECT_ID:项目的名称。
    • LOCATION:计划备份的位置。

创建按需备份

您可以通过触发所选备份规则立即运行,为具有备份方案的 Compute Engine 实例启动按需备份。按需备份通常仅捕获自上次备份以来发生更改的数据(增量备份)。

创建按需备份时,您可以从与 Compute Engine 实例关联的备份方案中选择一条规则。此规则决定何时删除按需备份。您可以在作业页面中查看备份作业状态。如需了解详情,请参阅在 Google Cloud 控制台中监控备份和恢复作业。

按照以下说明创建按需备份。

控制台

  1. 前往虚拟机实例 > 详细信息 > 备份方案,创建按需备份。
  2. 点击创建按需备份。您必须拥有正确的权限才能进行按需备份。
  3. 选择何时删除此备份。您可以选择:

    • 基于自定义保留期限 默认情况下,上限设置为备份保险柜的最短强制保留期限加上 30 天。如需设置其他上限,请在备份方案中添加自定义按需保留期限上限。
    • 基于现有备份规则。从在以下时间段后删除备份下拉列表中选择一条规则。
  4. 点击创建以启动按需备份作业。

  5. 如需查看按需备份作业的状态,请点击通知。

gcloud

  • 创建使用备份规则的按需备份。

      gcloud backup-dr backup-plan-associations trigger-backup BACKUP_PLAN_ASSOCIATION_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --backup-rule-id=RULE_ID
      --labels=LABELS
    

    替换以下内容:

    • BACKUP_PLAN_ASSOCIATION_NAME:备份方案关联的名称。运行 gcloud backup-dr backup-plan-associations list --location=LOCATION --project=PROJECT_ID 命令,获取与 Compute Engine 磁盘关联的备份方案列表。
    • PROJECT_ID:项目的名称。
    • REGION:计划备份的位置。
    • RULE_ID:您要关联以运行按需备份的备份规则名称。
    • LABELS:备份的可选标签,以逗号分隔的键值对形式表示,例如 webserver=backend,media=images。
  • 创建使用自定义保留期限的按需备份。

      gcloud backup-dr backup-plan-associations trigger-backup BACKUP_PLAN_ASSOCIATION_NAME \
      --project=PROJECT_ID \
      --location=REGION \
      --custom-retention-days=CUSTOM_RETENTION
      --labels=LABELS
    

    替换以下内容:

    • BACKUP_PLAN_ASSOCIATION_NAME:备份方案关联的名称。运行 gcloud backup-dr backup-plan-associations list --location=LOCATION --project=PROJECT_ID 命令,获取与 Compute Engine 磁盘关联的备份方案列表。
    • PROJECT_ID:项目的名称。
    • REGION:计划备份的位置。
    • CUSTOM_RETENTION:此按需备份的自定义保留期限(以天为单位)。此值必须等于或大于备份保险柜保留时间,并且小于或等于备份方案中配置的 max-custom-on-demand-retention-days 值(如果未配置 max-custom-on-demand-retention-days,则为保险柜保留时间 + 30 天)。
    • LABELS:备份的可选标签,以逗号分隔的键值对形式表示,例如 webserver=backend,media=images。

取消保护 Compute Engine 实例

您可以通过移除应用于 Compute Engine 实例的备份方案来取消对该实例的保护。从 Compute Engine 实例中移除备份方案不会删除该备份方案,也不会删除实例在使用期间创建的任何备份。您仍然可以访问和管理这些现有备份。

按照以下说明取消保护 Compute Engine 实例。

控制台

  1. 在 Google Cloud 控制台中,前往已保管的备份页面。

    前往“受保管的备份”页面

  2. 点击要移除备份方案的实例的名称。

  3. 选择移除备份方案。

gcloud

  1. 取消保护 Compute Engine 实例。

      gcloud backup-dr backup-plan-associations delete BACKUP_PLAN_ASSOCIATION_NAME\
      --project=PROJECT_ID \
      --location=LOCATION
    

    替换以下内容:

    • BACKUP_PLAN_ASSOCIATION_NAME:要删除的备份的名称。
    • PROJECT_ID:项目的名称。
    • LOCATION:计划备份的位置。

后续步骤