创建和管理区域性磁盘


Hyperdisk Balanced 高可用性和区域级 Persistent Disk 是存储选项,可让您在 Compute Engine 中实现高可用性 (HA) 服务。区域级 Persistent Disk 和 Hyperdisk Balanced 高可用性可在同一区域中的两个可用区之间同步复制数据,并在发生一个可用区级故障时确保磁盘数据的高可用性。 区域级磁盘可以是启动磁盘,也可以是非启动磁盘。

您还可以通过设置磁盘访问模式,允许不同的实例同时访问 Hyperdisk Balanced 高可用性磁盘。区域级磁盘只能挂接到与磁盘副本位于同一可用区中的实例。如需了解详情,请参阅在实例之间共享磁盘

本文档介绍了如何对区域性磁盘执行以下任务:

准备工作

所需的角色和权限

如需获得创建区域级磁盘所需的权限,请让您的管理员为您授予项目的以下 IAM 角色:

如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限

这些预定义角色包含创建区域性磁盘所需的权限。如需查看所需的确切权限,请展开所需权限部分:

所需权限

您需要具备以下权限才能创建区域级磁盘:

  • compute.disks.create
  • compute.instances.attachDisk
  • compute.disks.use
  • 创建磁盘的快照: compute.disks.createSnapshot
  • 查看磁盘的详细信息: compute.disks.get
  • 获取磁盘列表: compute.disks.list
  • 更改磁盘大小: compute.disks.update

您也可以使用自定义角色或其他预定义角色来获取这些权限。

限制

  • 您只能将区域级永久性磁盘挂接到使用 E2N1N2N2D 机器类型的虚拟机。
  • 您只能将 Hyperdisk Balanced 高可用性挂接到支持的机器类型
  • 您无法通过操作系统映像或通过从操作系统映像创建的磁盘,来创建区域级 Persistent Disk。
  • 您无法通过克隆可用区级磁盘来创建 Hyperdisk Balanced 高可用性磁盘。如需通过可用区级磁盘创建 Hyperdisk Balanced 高可用性磁盘,请完成将可用区级磁盘更改为 Hyperdisk Balanced 高可用性磁盘中的步骤。
  • 使用只读模式时,您最多可以将一个区域级平衡永久性磁盘挂接到 10 个虚拟机实例。
  • 区域级标准永久性磁盘的大小下限为 200 GiB。
  • 您只能增加 区域级永久性磁盘或Hyperdisk Balanced 高可用性卷的大小;而无法减小其大小。
  • 区域级 Persistent Disk 和 Hyperdisk Balanced 高可用性卷与其对应的可用区级磁盘具有不同的性能特征。如需了解详情,请参阅 Persistent Disk 性能简介Hyperdisk Balanced 高可用性性能限制
  • 您无法将处于多写入者模式的 Hyperdisk Balanced 高可用性卷用作启动磁盘。
  • 如果您通过克隆可用区级磁盘来创建复制磁盘,则两个可用区级副本在创建时不会完全同步。创建后,您一般可以在 3 分钟内使用区域级磁盘克隆。不过,您可能需要等待几十分钟,磁盘才会完全复制,恢复点目标 (RPO) 才会接近于零。了解如何检查复制磁盘是否已完全复制

关于将区域级磁盘用作实例的启动磁盘

在预配生产工作负载之前,您可以挂接区域级 Persistent Disk 磁盘或 Hyperdisk Balanced 高可用性磁盘作为提前预配的有状态工作负载的启动磁盘。区域级启动磁盘不适用于热备用,因为区域级启动磁盘无法同时挂接到两个计算实例。

您只能通过快照创建 区域级 Persistent Disk 卷或 Hyperdisk Balanced 高可用性卷;无法通过操作系统映像创建区域级磁盘。

如需将区域级磁盘用作实例的启动磁盘,请使用以下任一方法:

  1. 创建具有区域级启动磁盘的新实例
  2. 创建区域级启动磁盘,然后将其挂接到实例:
    1. 通过启动磁盘的快照创建区域级磁盘
    2. 将区域级启动磁盘挂接到实例

如果您需要将区域级启动磁盘故障切换到副本可用区中正在运行的备用实例,请按照将区域级启动磁盘挂接到实例中所述的步骤操作。

创建区域级磁盘

创建区域级 Persistent Disk 卷或 Hyperdisk Balanced 高可用性卷。磁盘必须与您计划将其挂接到的计算实例位于同一区域。

如果您创建 Hyperdisk Balanced 高可用性卷,则还可以通过设置磁盘访问模式,允许不同的实例同时访问磁盘。如需了解详情,请参阅在实例之间共享磁盘

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

控制台

  1. 在 Google Cloud 控制台中,前往磁盘页面。

    转到“磁盘”

  2. 选择所需项目。

  3. 点击创建磁盘

  4. 指定磁盘的名称

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

  6. 选择区域可用区。您必须选择与创建实例时选择的相同区域。

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

  8. 选择磁盘来源类型

  9. 磁盘设置下,选择磁盘类型大小。您还可以更改默认预配的 IOPS预配的吞吐量设置。

  10. 可选:对于 Hyperdisk Balanced 高可用性卷,您可以通过采用多写入者模式创建磁盘来允许将磁盘挂接到多个实例。在访问模式中,选择以读写模式连接至多个虚拟机

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

gcloud

使用 compute disks create 命令创建区域级磁盘。

如果您需要使用区域级 SSD Persistent Disk 以实现更高的吞吐量或 IOPS,请添加 --type 标志并指定 pd-ssd

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

替换以下内容:

  • DISK_NAME:新磁盘的名称
  • DISK_SIZE:新磁盘的大小(以 GB 为单位)
  • DISK_TYPE:对于区域级 Persistent Disk,这是区域级磁盘的类型。默认值为 pd-standard。 对于 Hyperdisk,请指定值 hyperdisk-balanced-high-availability
  • REGION:区域磁盘将驻留的区域,例如 europe-west1
  • ZONE1ZONE2:两个磁盘副本所在区域内的可用区,例如 europe-west1-b,europe-west1-c
  • DISK_ACCESS_MODE(可选):指定实例如何访问 Hyperdisk Balanced 高可用性磁盘上的数据。支持以下值:

    • READ_WRITE_SINGLE,表示从一个实例进行读写访问。这是默认的。
    • READ_WRITE_MANY,表示从多个实例进行读写访问。

    您只能为 Hyperdisk Balanced 高可用性磁盘设置访问模式。

Terraform

如需创建区域级 Persistent Disk 卷或 Hyperdisk Balanced 高可用性卷,您可以使用 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

如需创建区域级 Persistent Disk 卷或 Hyperdisk Balanced 高可用性卷,请构建对 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",
  "accessMode": "DISK_ACCESS_MODE"
}

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • REGION:区域磁盘将驻留的区域,例如 europe-west1
  • DISK_NAME:新磁盘的名称
  • ZONE1ZONE2:新磁盘副本应位于的可用区
  • DISK_SIZE:新磁盘的大小(以 GB 为单位)
  • DISK_TYPE:对于区域级 Persistent Disk,这是 Persistent Disk 的类型。 对于 Hyperdisk,请指定值 hyperdisk-balanced-high-availability
  • DISK_ACCESS_MODE(可选):指定实例如何访问 Hyperdisk Balanced 高可用性磁盘上的数据。支持以下值:

    • READ_WRITE_SINGLE,表示从一个实例进行读写访问。这是默认的。
    • READ_WRITE_MANY,表示从多个实例进行读写访问。

    您只能为 Hyperdisk Balanced 高可用性磁盘设置访问模式。

将区域级磁盘挂接到实例

对于非启动磁盘,在创建区域级 Persistent Disk 卷或 Hyperdisk Balanced 高可用性卷后,您可以将其挂接到实例。实例必须与磁盘位于同一区域。

如需将区域级启动磁盘挂接到实例,请参阅将区域级启动磁盘挂接到实例

如需将 Hyperdisk Balanced 高可用性磁盘挂接到多个实例,请针对每个实例重复执行本部分中的过程。您只能在读写模式下挂接 Hyperdisk Balanced 高可用性磁盘。

控制台

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

    转到虚拟机实例

  2. 名称列中,点击实例的名称。

  3. 点击修改

  4. 点击 +挂接现有磁盘

  5. 选择要添加到实例的之前创建的区域级磁盘。

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

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

  7. 可选:如果要将 Hyperdisk Balanced 高可用性磁盘挂接到多个实例,请为磁盘挂接模式选择读写

  8. 点击保存

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

gcloud

如需将区域级磁盘挂接到正在运行或已停止的实例,请使用 compute instances attach-disk 命令并将 --disk-scope 标志设置为 regional

如果将多写入者模式下的 Hyperdisk Balanced 高可用性磁盘挂接到多个实例,唯一支持的挂接模式是 rw,它是默认访问模式。您无需添加 --mode 标志。

gcloud compute instances attach-disk INSTANCE_NAME \
    --disk=DISK_NAME \
    --disk-scope=regional \
    --device-name=DEVICE_NAME

替换以下内容:

  • INSTANCE_NAME:您要向其中添加区域级磁盘的实例的名称
  • DISK_NAME:您要挂接到实例的新磁盘的名称
  • DEVICE_NAME(可选):客户机操作系统用于创建符号链接的名称,有助于在操作系统级别识别磁盘。

Terraform

如需将区域级 Persistent Disk 卷或 Hyperdisk Balanced 高可用性卷挂接到实例,您可以使用 google_compute_attached_disk 资源

resource "google_compute_instance" "test_node" {
  name         = "test-node"
  machine_type = "f1-micro"
  zone         = "us-west1-a"

  boot_disk {
    initialize_params {
      image = "debian-cloud/debian-11"
    }
  }
  attached_disk {
    source      = google_compute_disk.default.id
    device_name = google_compute_disk.default.name
  }

  network_interface {
    network = "default"
    access_config {
      # Ephemeral IP
    }
  }

  # Ignore changes for persistent disk attachments
  lifecycle {
    ignore_changes = [attached_disk]
  }


}

REST

如需将区域级磁盘挂接到正在运行或已停止的实例,请构建对 compute.instances.attachDisk 方法POST 请求,并添加您创建的区域级磁盘的网址。

如果将多写入者模式下的 Hyperdisk Balanced 高可用性磁盘挂接到多个实例,唯一支持的挂接模式是 READ-WRITE,它是默认访问模式。您无需添加 mode 属性。

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

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • ZONE:实例的位置
  • INSTANCE_NAME:您要向其中添加新区域级磁盘的实例的名称
  • REGION:区域级磁盘所在的区域
  • DISK_NAME:区域级磁盘的名称(如 Google Cloud 控制台中所示)。
  • DEVICE_NAME(可选):客户机操作系统用于创建符号链接的名称,有助于在操作系统级别识别磁盘。

对于非启动磁盘,在创建空白区域级磁盘并将其挂接到实例后,您必须格式化并装载磁盘,以便操作系统可以使用可用的存储空间。

将可用区级磁盘更改为区域级磁盘

如需将现有的可用区级 Persistent Disk 转换为区域级 Persistent Disk,请通过克隆现有的可用区级磁盘来创建新磁盘。如需了解详情,请参阅通过可用区级磁盘创建区域级磁盘克隆

如需将 Hyperdisk 转换为区域级磁盘,请按照将可用区级磁盘更改为 Hyperdisk Balanced 高可用性磁盘中所述,通过现有磁盘的快照创建新的 Hyperdisk Balanced 高可用性磁盘。

创建具有区域级启动磁盘的新实例

设置高可用性计算实例时,您可以创建具有区域级启动磁盘的主实例。如果发生可用区级服务中断,您可以重启次要可用区中的实例,而不是创建新的实例。

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

如果您要将现有的可用区级磁盘更改为区域级磁盘,请改为参阅将可用区级磁盘更改为区域级磁盘。否则,如需创建启动磁盘是区域级磁盘的实例,请使用以下任一方法:

控制台

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

    转到“创建实例”

    如果出现提示,请选择您的项目并点击继续

    此时将显示创建实例页面,并显示机器配置窗格。

  2. 机器配置窗格中,执行以下操作:

    1. 名称字段中,指定实例的名称。如需了解详情,请参阅资源命名惯例
    2. 可选:在可用区字段中,为此实例选择可用区。

      默认选择为不限。如果您不更改此默认选择,Google 会根据机器类型和可用性为您自动选择可用区。

    3. 从以下选项中为您的实例选择机器家族:

      • 通用
      • 计算优化
      • 内存优化
      • 存储优化
      • GPU 数量

      然后, Google Cloud 控制台会显示适用于所选机器家族的机器系列。

    4. 系列列中,选择实例的机器系列。

      如果您在上一步中选择 GPU 作为机器家族,请选择所需的 GPU 类型。然后,系统会为所选 GPU 类型自动选择机器系列。

    5. 机器类型部分中,为实例选择机器类型。

  3. 在导航菜单中,点击操作系统和存储空间。在显示的操作系统和存储空间窗格中,完成后续步骤。

    如需详细了解您可以在添加新磁盘时配置的参数,请参阅 Persistent Disk 简介Google Cloud Hyperdisk 简介

    1. 如需开始配置启动磁盘,请点击更改。系统会显示启动磁盘窗格,并显示公共映像标签页。
    2. 通过以下任一方式为启动磁盘配置数据源:

      • 如需选择标准快照作为启动磁盘的数据源,请点击快照,然后在显示的快照标签页中指定以下内容:

        1. 快照列表中,选择相应的快照。
        2. 启动磁盘类型列表中,选择启动磁盘的类型。
        3. 大小 (GB) 字段中,指定启动磁盘的大小。
      • 如需选择归档快照作为启动磁盘的数据源,请点击归档快照,然后在显示的归档快照标签页中指定以下内容:

        1. 归档快照列表中,选择相应的归档快照。
        2. 启动磁盘类型列表中,选择启动磁盘的类型。
        3. 大小 (GB) 字段中,指定启动磁盘的大小。
      • 如需选择现有磁盘作为启动磁盘,请点击现有磁盘。然后,在显示的现有磁盘标签页中,从磁盘列表中选择现有的区域级 Persistent Disk 卷或 Hyperdisk Balanced 高可用性卷。

    3. 可选:对于高级配置选项,展开 显示高级配置部分。

    4. 如需确认您的启动磁盘选项并返回操作系统和存储空间窗格,请点击选择

    5. 可选:如需了解如何将非启动磁盘挂接到实例,请参阅创建具有额外非启动磁盘的实例

  4. 如果您未选择现有启动磁盘,请执行以下操作,将其配置为区域级磁盘:

    1. 在导航菜单中,点击数据保护。在显示的数据保护窗格中,执行以下操作:

      1. 如需配置实例的所有新磁盘以使用同步磁盘复制(区域级 Persistent Disk 或 Hyperdisk Balanced 高可用性),请选中区域级磁盘复选框。

      2. (默认情况下无需执行任何操作。)取消选中排除启动磁盘复选框。

  5. 可选:指定其他配置选项。如需了解详情,请参阅实例创建期间的配置选项

  6. 要创建并启动该实例,请点击创建

gcloud

使用 gcloud compute instances create 命令创建实例,并使用 --create-disk 标志指定区域级磁盘。

gcloud compute instances create PRIMARY_INSTANCE_NAME  \
 --zone=ZONE  \
 --create-disk=^:^name=REGIONAL_DISK_NAME:boot=true:type=DISK_TYPE:source-snapshot=SNAPSHOT_NAME:replica-zones=ZONE,REMOTE_ZONE

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

替换以下内容:

  • PRIMARY_INSTANCE_NAME:实例的名称
  • ZONE:您要在其中创建实例的可用区的名称
  • REGIONAL_DISK_NAME:区域级磁盘的名称
  • DISK_TYPE:要创建的磁盘类型,例如 hyperdisk-balanced-high-availability。 如果使用的是永久性磁盘,则还必须在 --create-disk 标志中指定 scope=regional 以创建区域永久性磁盘。
  • SNAPSHOT_NAME:您为启动磁盘创建的快照的名称
  • REMOTE_ZONE:区域级磁盘的备用可用区

REST

创建对 instances.insert 方法POST 请求,并指定属性 boot: 'true'replicaZones。例如:

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances
{
 "name": "INSTANCE_NAME",
 "disks": [{
    "boot": true,
    "initializeParams": {
       "sourceSnapshot": "global/snapshots/BOOT_SNAPSHOT_NAME",
       "replicaZones": [
           "projects/PROJECT_ID/zones/ZONE",
           "projects/PROJECT_ID/zones/REMOTE_ZONE"
       ],
       "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE"
    }
  }],
 "networkInterfaces": [
    {
      "network": "global/networks/default"
    }
  ]
}

请替换以下内容:

  • PROJECT_ID:您的项目 ID
  • ZONE:您要在其中创建实例的可用区的名称
  • INSTANCE_NAME:实例的名称
  • BOOT_SNAPSHOT_NAME:启动磁盘快照的名称
  • REMOTE_ZONE:区域级磁盘的远程可用区
  • DISK_TYPE:要创建的磁盘的类型,例如 hyperdisk-balanced-high-availabilitypd-balanced

创建具有额外区域级磁盘的新实例

创建实例时,您可以视需要将区域级 Persistent Disk 卷或Hyperdisk Balanced 高可用性卷作为额外磁盘进行添加。

如需在创建实例期间创建区域级 Persistent Disk 卷或Hyperdisk Balanced 高可用性卷并将其挂接到实例,请参阅以下任一内容:

将区域级启动磁盘挂接到实例

请按照以下步骤操作:

  • 将现有实例的启动磁盘替换为区域级启动磁盘。
  • 将区域级启动磁盘故障切换到在备份可用区中运行的热备用实例。为此,您可以将区域级磁盘作为启动磁盘挂接到实例。

这些步骤假定区域级磁盘和实例已存在。

gcloud

  1. 停止实例。
    gcloud compute instances stop INSTANCE_NAME  --zone=ZONE
    
  2. 将当前启动磁盘与实例分离。
    gcloud compute instances detach-disk INSTANCE_NAME \
     --zone=ZONE --disk=CURRENT_BOOT_DEVICE_NAME
    
  3. 将区域级启动磁盘挂接到实例。
    gcloud compute instances attach-disk INSTANCE_NAME  \
     --zone=ZONE  \
     --disk=REGIONAL_DISK_NAME  \
     --disk-scope=regional --force-attach \
     --boot
    
  4. 重启实例。

    gcloud compute instances start INSTANCE_NAME
    

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

  • INSTANCE_NAME:您要将区域级启动磁盘挂接到的实例的名称
  • ZONE:实例所在的可用区
  • CURRENT_BOOT_DEVICE_NAME:实例正在使用的启动磁盘的名称。此名称通常与实例名称相同。
  • REGIONAL_DISK_NAME:您要作为启动磁盘挂接到实例的区域级磁盘的名称

可选:如果您由于服务中断或故障而无法成功将区域级启动磁盘与主实例分离,请添加 --force-attach 标志。

REST

  1. 停止实例。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/stop
    
  2. 将当前启动磁盘与实例分离。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_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/INSTANCE_NAME/attachDisk
    {
    "source": "compute/v1/projects/PROJECT_ID/regions/REGION/disks/REGIONAL_DISK_NAME",
    "boot": true
    }
  4. 重启实例。

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

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

  • PROJECT_ID:您的项目 ID
  • INSTANCE_NAME:您要将区域级磁盘挂接到的实例的名称
  • ZONE:实例所在的可用区
  • CURRENT_BOOT_DEVICE_NAME:实例正在使用的启动磁盘的名称。此名称通常与实例名称相同。
  • REGION:区域级磁盘所在的区域。
  • REGIONAL_DISK_NAME:您要作为启动磁盘挂接到实例的区域级磁盘的名称

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

列出和描述您的区域级磁盘

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

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

如需查看有关区域级磁盘的详细信息,请使用以下选项:

调整区域级磁盘的大小

如果具有区域磁盘的实例需要额外的存储空间,您可以调整磁盘的大小。无论磁盘是否附加到正在运行的实例,您都可以随时调整磁盘的大小。如果您需要将数据分为独一无二的卷,请为该实例创建多个辅助磁盘。对于 Hyperdisk Balanced 高可用性,您还可以提高磁盘的 IOPS 和吞吐量限制。

调整区域性磁盘大小的命令与调整区域性磁盘大小的命令非常类似。但是,您必须为磁盘位置指定区域,而不是可用区。

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

如需了解如何修改区域级磁盘,请参阅以下内容:

后续步骤