创建和管理区域级永久性磁盘卷


区域级永久性磁盘是一种存储选项,可让您在 Compute Engine 中实现高可用性 (HA) 服务。区域级永久性磁盘可在同一区域中的两个可用区之间同步复制数据,并在遇到一个可用区级故障时确保磁盘数据的高可用性。您可以通过以下任一方式将区域级永久性磁盘与虚拟机搭配使用:

本文档介绍如何为区域级永久性磁盘执行以下任务:

  • 创建和管理区域级永久性磁盘卷。
  • 将区域级永久性磁盘卷添加到虚拟机。

准备工作

  • 查看不同类型的永久性磁盘之间的差异
  • 查看区域级永久性磁盘的基础知识。
  • 了解区域级永久性磁盘故障切换
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以按如下方式向 Compute Engine 进行身份验证。

    选择标签页以了解您打算如何使用本页面上的示例:

    控制台

    当您使用 Google Cloud 控制台访问 Google Cloud 服务和 API 时,无需设置身份验证。

    gcloud

    1. 安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init
    2. 设置默认区域和可用区

    Terraform

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

    1. 安装 Google Cloud CLI。
    2. 如需初始化 gcloud CLI,请运行以下命令:

      gcloud init
    3. 为您的 Google 账号创建本地身份验证凭据:

      gcloud auth application-default login

    如需了解详情,请参阅 为本地开发环境设置身份验证

    REST

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

      安装 Google Cloud CLI,然后通过运行以下命令初始化 Google Cloud CLI:

      gcloud init

限制

  • 您只能将区域级永久性磁盘挂接到使用 E2N1N2N2D 机器类型的虚拟机。
  • 您无法通过映像创建区域级永久性磁盘。
  • 使用只读模式时,您最多可以将一个区域级平衡永久性磁盘挂接到 10 个虚拟机实例。
  • 区域级标准永久性磁盘的大小下限为 200 GiB。
  • 您只能增加区域级永久性磁盘卷的容量,而不能减小其大小。
  • 区域级永久性磁盘卷与可用区级永久性磁盘卷具有不同的性能特征。如需了解详情,请参阅块存储性能
  • 如果您通过克隆可用区级磁盘来创建区域级永久性磁盘,则两个可用区级副本在创建时不会完全同步。创建后,您一般可以在 3 分钟内使用区域级磁盘克隆。不过,您可能需要等待几十分钟,磁盘才会完全复制,恢复点目标 (RPO) 才会接近于零。了解如何检查区域级永久性磁盘是否已完全复制

创建具有区域级永久性磁盘的新虚拟机

创建虚拟机时,您可以根据需要将区域级永久性磁盘卷作为额外磁盘进行添加。

如需在创建虚拟机期间创建区域级永久性磁盘卷并将其挂接到虚拟机,请参阅创建具有额外的非启动磁盘的虚拟机实例创建新的实例模板

将区域级永久性磁盘卷添加到虚拟机

创建区域级永久性磁盘卷,并将其挂接到虚拟机。虚拟机必须与您的磁盘位于同一区域。

如果您在 Google Cloud 控制台中创建磁盘,则默认磁盘类型pd-balanced。如果您使用 gcloud CLI 或 REST 创建磁盘,则默认磁盘类型为 pd-standard

控制台

您必须先创建区域级永久性磁盘卷,然后将其挂接到现有虚拟机实例。您不能将区域级永久性磁盘卷作为启动磁盘进行创建,因为故障切换期间无法强制挂接此类磁盘。

创建区域级永久性磁盘卷

  1. 在 Google Cloud 控制台中,转到磁盘页面。

    转到“磁盘”

  2. 选择所需项目。

  3. 点击创建磁盘

  4. 指定磁盘的名称

  5. 位置部分,选择区域级

  6. 选择区域可用区。您必须选择与创建虚拟机时选择的相同区域。

  7. 选择同一区域中的副本可用区。记下所选的可用区,因为您必须将磁盘挂接到位于其中一个可用区的虚拟机。

  8. 选择磁盘来源类型

  9. 选择磁盘类型大小。默认值为 100 GiB 平衡永久性磁盘。

  10. 点击创建以完成磁盘的创建。

将区域级永久性磁盘卷挂接到虚拟机

  1. 如需将磁盘挂接到虚拟机,请进入虚拟机实例页面。

    转到虚拟机实例

  2. 名称列中,点击虚拟机的名称。

  3. 点击修改

  4. 点击 +挂接现有磁盘

  5. 选择要添加到虚拟机的区域级永久性磁盘。

  6. 如果您看到一条警告,指示所选磁盘已挂接到其他实例,请选中强制挂接磁盘复选框,将该磁盘强制挂接到当前正在修改的虚拟机。

    如需详细了解强制挂接区域级永久性磁盘卷的应用场景,请参阅区域级永久性磁盘故障切换

  7. 点击保存

  8. 修改虚拟机页面上,点击保存

gcloud

使用 Google Cloud CLI 创建并挂接区域级永久性磁盘卷:

  1. 使用 compute disks create 命令创建区域级永久性磁盘卷。如果您需要使用区域 SSD 永久性磁盘以实现更高的吞吐量或 IOPS,请添加 --type 标志并指定 pd-ssd

    gcloud compute disks create DISK_NAME \
        --size=DISK_SIZE \
        --type=DISK_TYPE \
        --region=REGION \
        --replica-zones=ZONE1,ZONE2
    

    请替换以下内容:

    • DISK_NAME:新磁盘的名称
    • DISK_SIZE:新磁盘的大小(以 GB 为单位)
    • DISK_TYPE:永久性磁盘的类型。默认值为 pd-standard
    • REGION:区域磁盘将驻留的区域,例如 europe-west1
    • ZONE1ZONE2:两个磁盘副本所在区域内的可用区,例如 europe-west1-b,europe-west1-c
  2. 通过使用 compute instances attach-disk 命令并将 --disk-scope 标志设置为 regional,将磁盘挂接到正在运行或已停止的虚拟机。

    gcloud compute instances attach-disk VM_NAME \
        --disk=DISK_NAME \
        --disk-scope=regional
    

    请替换以下内容:

    • VM_NAME:您要向其添加新区域级永久性磁盘卷的虚拟机的名称
    • DISK_NAME:您要挂接到虚拟机的新磁盘的名称

Terraform

如需创建区域级永久性磁盘卷,您可以使用 google_compute_region_disk 资源

resource "google_compute_region_disk" "regiondisk" {
  name                      = "region-disk-name"
  snapshot                  = google_compute_snapshot.snapdisk.id
  type                      = "pd-ssd"
  region                    = "us-central1"
  physical_block_size_bytes = 4096
  size                      = 11

  replica_zones = ["us-central1-a", "us-central1-f"]
}

REST

  1. 如需创建区域级永久性磁盘卷,请构建一个向 compute.regionDisks.insert 方法发出的 POST 请求。如需创建空白磁盘,请勿指定任何映像或快照来源。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/disks
    {
     "name": "DISK_NAME",
     "region": "projects/PROJECT_ID/regions/REGION",
     "replicaZones": [
       "projects/PROJECT_ID/zones/ZONE1",
       "projects/PROJECT_ID/zones/ZONE2"
     ],
     "sizeGb": "DISK_SIZE",
     "type": "projects/PROJECT_ID/regions/REGION/diskTypes/DISK_TYPE"
    }
    

    请替换以下内容:

    • PROJECT_ID:您的项目 ID
    • REGION:区域磁盘将驻留的区域,例如 europe-west1
    • DISK_NAME:新磁盘的名称
    • ZONE1ZONE2:新磁盘副本应位于的可用区
    • DISK_SIZE:新磁盘的大小(以 GB 为单位)
    • DISK_TYPE:永久性磁盘的类型。默认值为 pd-standard
  2. 如需挂接磁盘,请构建一个向 compute.instances.attachDisk 方法发出的 POST 请求,并将网址添加到您创建的永久性磁盘卷中。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/attachDisk
    {
     "source": "/projects/PROJECT_ID/regions/REGION/disks/DISK_NAME"
    }
    

    请替换以下内容:

    • PROJECT_ID:您的项目 ID
    • ZONE:您的虚拟机的位置
    • VM_NAME:您要向其添加新永久性磁盘卷的虚拟机的名称
    • REGION:区域级磁盘所在的区域
    • DISK_NAME:新磁盘的名称

创建新磁盘并将其挂接到虚拟机后,必须格式化并装载磁盘,以便操作系统可以使用可用的存储空间。

将区域级永久性磁盘用作虚拟机启动磁盘

在预配生产工作负载之前,挂接区域级永久性磁盘作为提前预配的有状态工作负载的启动磁盘。区域级永久性磁盘不适用于热备用,因为区域级启动磁盘无法同时挂接到两个虚拟机。

您只能通过快照创建区域级永久性磁盘;无法通过映像创建区域级永久性磁盘。

如需将区域级永久性磁盘用作虚拟机启动磁盘,请执行以下操作:

  1. 通过快照创建区域级磁盘
  2. 按照以下说明将该磁盘作为启动磁盘挂接。

创建具有区域级永久性磁盘启动磁盘的新虚拟机

设置高可用性虚拟机时,您可以创建具有区域级永久性磁盘启动磁盘的主虚拟机。这样,您就可以在发生区域服务中断时重启虚拟机。

在高可用性设置(其中启动设备是区域级永久性磁盘)中,Google 建议您不要预先创建和预先运行备用实例。相反,在故障切换阶段,您可以在使用 forceAttach 选项创建备用实例时挂接现有区域级磁盘。

如需创建具有区域级永久性磁盘启动磁盘的虚拟机,请运行以下命令:

gcloud

gcloud compute instances create PRIMARY_INSTANCE_NAME  \
 --zone=ZONE  \
 --create-disk=^:^name=REPD_DISK_NAME:scope=regional:boot=true:source-snapshot=SNAPSHOT_NAME:replica-zones=ZONE,REMOTE_ZONE

指定磁盘参数时,字符 ^:^ 指定参数之间的分隔符是英文冒号 (:)。这样您可以在指定 replica-zones 参数时使用英文逗号 (,)。

替换以下内容:

  • PRIMARY_INSTANCE_NAME 替换为虚拟机名称
  • ZONE 替换为要创建虚拟机的可用区的名称
  • REPD_DISK_NAME 替换为区域级永久性磁盘的名称
  • SNAPSHOT_NAME 替换为您为启动磁盘创建的快照的名称
  • REMOTE_ZONE 替换为区域级永久性磁盘的备用可用区

REST

如需在虚拟机创建期间创建具有区域级磁盘的新虚拟机,请指定 boot: 'true'replicaZones。例如:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
 "name": "VM_NAME",
 "disks": [{
    "boot": true,
    "initializeParams": {
      "sourceSnapshot": "global/snapshots/BOOT_SNAPSHOT_NAME",
      "replicaZones": [
           "projects/PROJECT_ID/zones/ZONE",
           "projects/PROJECT_ID/zones/REMOTE_ZONE"]
   }
  }],
}

请替换以下内容:

  • PROJECT_ID:您的项目 ID
  • ZONE:要创建虚拟机的可用区的名称
  • VM_NAME:虚拟机的名称
  • BOOT_SNAPSHOT_NAME:启动磁盘快照的名称
  • REMOTE_ZONE:区域级永久性磁盘的远程可用区

如需在故障切换可用区中创建第二个虚拟机,以恢复将区域级永久性磁盘用作启动磁盘的主虚拟机,请运行以下命令:

gcloud

gcloud compute instances create STANDBY_VM_NAME  \
 --zone=ZONE  \
 --disk=boot=yes,name=DISK_NAME,scope=regional,force-attach=true

请替换以下内容:

  • STANDBY_VM_NAME 替换为备用虚拟机的名称
  • ZONE 替换为将区域级永久性磁盘复制到的可用区的名称
  • DISK_NAME 替换为您要挂接的区域级永久性磁盘的名称。

可选:如果您由于服务中断或故障而无法成功将区域级永久性磁盘启动磁盘与其最初挂接到的虚拟机分离,请添加 force-attach=true

将区域级永久性磁盘作为启动磁盘挂接到现有虚拟机

请按照以下步骤将区域级永久性磁盘作为启动磁盘挂接到虚拟机,从而故障切换到在备份可用区中运行的辅助虚拟机。这些步骤假定您已通过标准快照创建区域级永久性磁盘。

gcloud

  1. 停止虚拟机。
    gcloud compute instances stop STANDBY_VM_NAME  --zone=ZONE
    
  2. 将当前启动磁盘与虚拟机分离。
    gcloud compute instances detach-disk STANDBY_VM_NAME  
    --zone=ZONE --disk=CURRENT_BOOT_DEVICE_NAME
  3. 将区域级 Persistent Disk 永久性磁盘挂接到虚拟机。
    gcloud compute instances attach-disk STANDBY_VM_NAME  
    --zone=ZONE
    --disk=REPD_DISK_NAME
    --disk-scope=regional --force-attach
  4. 重启虚拟机。

    gcloud compute instances start STANDBY_VM_NAME
    

将上述命令中的变量替换为以下变量:

  • STANDBY_VM_NAME:您要将区域级永久性磁盘挂接到的虚拟机的名称
  • ZONE:虚拟机所在的可用区
  • CURRENT_BOOT_DEVICE_NAME:虚拟机正在使用的启动磁盘的名称。此名称通常与虚拟机名称相同。
  • REPD_DISK_NAME:您要作为启动磁盘挂接到虚拟机的区域级永久性磁盘的名称

可选:如果您由于服务中断或故障而无法成功将区域级永久性磁盘启动磁盘与其最初挂接到的虚拟机分离,请添加 --force-attach 标志。

REST

  1. 停止虚拟机。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/STANDBY_VM_NAME/stop
    
  2. 将当前启动磁盘与虚拟机分离。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/STANDBY_VM_NAME/detachDisk?deviceName=CURRENT_BOOT_DEVICE_NAME
    
  3. 将区域级永久性磁盘挂接到虚拟机。

    构建一个向 compute.instances.attachDisk 方法发出的 POST 请求,并在其中添加区域级永久性磁盘卷的网址:

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/STANDBY_VM_NAME/attachDisk
    {
    "source": "compute/v1/projects/PROJECT_ID/regions/REGION/disks/REPD_DISK_NAME",
    "boot": true
    }
  4. 重启虚拟机。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/STANDBY_VM_NAME/start
    

将上述命令中的变量替换为以下变量:

  • PROJECT_ID:您的项目 ID
  • STANDBY_VM_NAME:您要将区域级永久性磁盘挂接到的虚拟机的名称
  • ZONE:虚拟机所在的可用区
  • CURRENT_BOOT_DEVICE_NAME:虚拟机正在使用的启动磁盘的名称。此名称通常与虚拟机名称相同。
  • REGION:区域级永久性磁盘所在的区域。
  • REPD_DISK_NAME:您要作为启动磁盘挂接到虚拟机的区域级永久性磁盘的名称

可选:如果您由于服务中断或故障而无法成功将区域级永久性磁盘启动磁盘与其最初挂接到的虚拟机分离,请在请求正文中添加 "forceAttach": true

列出和描述您的区域永久性磁盘卷

您可以查看已配置的所有区域永久性磁盘卷的列表,以及有关其属性的信息,包括:

  • 磁盘 ID
  • 磁盘名称
  • 大小
  • 磁盘类型
  • 区域
  • 可用区副本

如需查看有关区域级永久性磁盘卷的详细信息,请使用以下选项之一:REST 和 gcloud CLI。

调整区域永久性磁盘的大小

如果带有区域永久性磁盘的虚拟机需要增加存储空间、IOPS 或吞吐量,您可以调整磁盘的大小。如果需要将数据分别存储到多个唯一卷中,请为虚拟机创建多个辅助磁盘。无论磁盘是否附加到正在运行的虚拟机,您都可以随时调整磁盘的大小。

调整区域永久性磁盘大小的命令与调整标准永久性磁盘大小的命令完全相同,但是前者包含一个对应于区域的附加标志。

您只能增加磁盘大小,而不能减小磁盘大小。如需减小磁盘大小,您必须创建较小的新磁盘。在删除较大的原始磁盘之前,您需要为这两个磁盘付费。

控制台

调整区域永久性磁盘的大小。

  1. 在 Google Cloud 控制台中,转到磁盘页面。

    转到“磁盘”

  2. 选择要调整大小的磁盘。

  3. 点击页面顶部的修改

  4. 输入磁盘的大小(以 GB 为单位)。

  5. 点击保存以完成磁盘大小调整。

磁盘列表中会显示新的磁盘大小。

gcloud

在 gcloud CLI 中,使用 compute disks resize 命令调整区域永久性磁盘的大小。

gcloud compute disks resize DISK_NAME \
    --region=REGION  \
    --size=DISK_SIZE

请替换以下内容:

  • DISK_NAME:您要调整大小的磁盘的名称
  • REGION:磁盘所在的区域
  • DISK_SIZE:磁盘的新大小(以 GB 为单位)。

Terraform

如需更改区域永久性磁盘的大小,您可以使用 google_compute_region_disk 资源并使用 size 参数。

resource "google_compute_region_disk" "regiondisk" {
  name                      = "region-disk-name"
  snapshot                  = google_compute_snapshot.snapdisk.id
  type                      = "pd-ssd"
  region                    = "us-central1"
  physical_block_size_bytes = 4096
  size                      = 11

  replica_zones = ["us-central1-a", "us-central1-f"]
}

如果添加 size 参数以及 imagesnapshot 参数,则 size 值必须大于或等于映像或快照的大小。

如果省略 imagesnapshot 参数,则可以将 size 参数设置为小于现有磁盘大小。如果您执行此操作,Terraform 会销毁该磁盘并新建一个空的永久性磁盘。在重新创建期间,Terraform 不会复制也未包含在 Terraform 配置中的其他数据,例如标签或快照时间表。为防止 Terraform 销毁并重新创建磁盘,您可以将 lifecycle.prevent_destroy = true 设置添加到 Terraform 配置中。

REST

如需调整区域级永久性磁盘的大小,请构建一个对 compute.regionDisks.resize 方法发出的 POST 请求。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/disks/DISK_NAME/resize

{
  "sizeGb": "DISK_SIZE"
}

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • REGION:磁盘所在的区域
  • DISK_NAME:您要调整大小的磁盘的名称
  • DISK_SIZE:磁盘的新大小(以 GB 为单位)。

调整磁盘大小后,必须调整文件系统的大小,以便操作系统可以访问额外空间。

在多个虚拟机之间共享一个只读的永久性磁盘

您可以在只读模式下将非启动永久性磁盘挂接到多个虚拟机,如此便可在多个虚拟机之间共享静态数据。在多个虚拟机之间共享一个永久性磁盘上的静态数据,要比将数据复制到这些虚拟机各自独有的磁盘上便宜。

如果您需要在多个虚拟机之间共享动态存储空间,则可以使用以下任一选项:

如果您的一个永久性磁盘包含您想要在多个虚拟机之间共享的数据,请将该磁盘与任何读写虚拟机分离,并在只读模式下将该磁盘挂接到一个或多个虚拟机。

控制台

在多个虚拟机之间共享一个只读的永久性磁盘。

  1. 在 Google Cloud 控制台中,前往虚拟机实例页面。

    转到虚拟机实例

  2. 点击要向其挂接磁盘的虚拟机的名称。“虚拟机实例详情”页面随即打开。

  3. 点击页面顶部的修改

  4. 额外磁盘部分中,点击挂接现有磁盘

  5. 选择列表中的区域永久性磁盘。

  6. 模式部分中,选择只读

  7. 点击完成

  8. 在页面的底部,点击保存以将更改应用于虚拟机。

gcloud

在 gcloud CLI 中,通过使用 compute instances attach-disk 命令并将 --disk-scope 标志设置为 regional 以及将 --mode 标志设置为 ro,以在多个虚拟机之间共享一个只读的永久性磁盘。

gcloud beta compute instances attach-disk /VM_NAME \
    --disk=DISK_NAME \
    --disk-scope=regional \
    --mode=ro

请替换以下内容:

  • VM_NAME:您要挂接永久性磁盘的虚拟机的名称
  • DISK_NAME:您要挂接的磁盘的名称

REST

如需在多个虚拟机之间共享一个只读的永久性磁盘,请构建一个向 compute.instances.attachDisk 方法发出的 POST 请求。在请求正文中,将 mode 参数指定为 READ_ONLY

POST https://compute.googleapis.com/compute/beta/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/attachDisk

{
  "source": "regions/REGION/disks/DISK_NAME",
  "mode": "READ_ONLY"
}

请替换以下内容:

  • PROJECT_ID:您的项目 ID
  • ZONE:虚拟机所在的区域
  • VM_NAME:您要挂接永久性磁盘的虚拟机的名称。
  • REGION:磁盘所在的区域
  • DISK_NAME:您要挂接大小的磁盘的名称

挂接磁盘后,请连接到您要以只读模式挂接此磁盘的每个虚拟机,然后装载该磁盘。

将可用区永久性磁盘迁移到区域永久性磁盘

如需将现有的可用区永久性磁盘转换为区域永久性磁盘,请克隆现有的可用区磁盘,以创建新的可用区磁盘。如需了解详情,请参阅通过可用区磁盘创建区域磁盘克隆

后续步骤