创建和管理区域级磁盘


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

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

准备工作

  • 查看不同类型的磁盘存储方案之间的差异
  • 查看同步磁盘复制的基础知识。
  • 了解区域磁盘故障切换
  • 如果您尚未设置身份验证,请进行设置。身份验证是通过其进行身份验证以访问 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. Install the Google Cloud CLI, then initialize it by running the following command:

      gcloud init
    2. Set a default region and zone.
    3. Terraform

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

      1. Install the Google Cloud CLI.
      2. To initialize the gcloud CLI, run the following command:

        gcloud init
      3. 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.

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

      REST

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

        Install the Google Cloud CLI, then initialize it by running the following command:

        gcloud init

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

所需的角色和权限

如需获得创建区域性磁盘所需的权限,请让管理员向您授予项目的以下 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 高可用性挂接到支持的机器类型
  • 您无法通过映像或通过映像创建的磁盘创建区域级永久性磁盘。
  • 使用只读模式时,您最多可以将一个区域级平衡永久性磁盘挂接到 10 个虚拟机实例。
  • 区域级标准永久性磁盘的大小下限为 200 GiB。
  • 您只能增加 区域级 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. 选择磁盘类型大小

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

gcloud

使用 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
   --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:可选:实例如何访问磁盘上的数据。支持的值包括:

    • 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,这是永久性磁盘的类型。 对于 Hyperdisk,请指定值 hyperdisk-balanced-high-availability
  • DISK_ACCESS_MODE:实例如何访问磁盘上的数据。支持的值包括:

    • READ_WRITE_SINGLE,用于从一个实例进行读写权限。这是默认的。
    • READ_WRITE_MANY,用于从多个实例进行读写权限。

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

将区域磁盘附加到实例

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

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

如需将磁盘挂接到多个实例,请针对每个实例重复本部分中的过程。

控制台

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

    转到虚拟机实例

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

  3. 点击修改

  4. 点击 +挂接现有磁盘

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

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

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

  7. 点击保存

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

gcloud

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

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

替换以下内容:

  • INSTANCE_NAME:您要向其中添加区域性磁盘的实例的名称
  • DISK_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 请求,并将网址添加到您创建的区域性磁盘中。

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"
}

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • ZONE:实例的位置
  • INSTANCE_NAME:您要向其中添加新区域性磁盘的实例的名称
  • REGION:区域级磁盘所在的区域
  • DISK_NAME:区域磁盘的名称

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

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

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

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

使用区域级磁盘创建新实例

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

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

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

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

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

如需创建具有区域级磁盘启动磁盘的实例,请使用以下任一方法:

gcloud

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

gcloud compute instances create PRIMARY_INSTANCE_NAME  \
 --zone=ZONE  \
 --create-disk=^:^name=REGIONAL_DISK_NAME:scope=regional: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-availabilitypd-balanced
  • 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

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

请按照以下步骤操作:

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

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

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,您还可以提高磁盘的 IOPS 和吞吐量限制。

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

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

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

后续步骤