Hyperdisk Balanced 高可用性和区域级 Persistent Disk 是存储选项,可让您在 Compute Engine 中实现高可用性 (HA) 服务。区域级 Persistent Disk 和 Hyperdisk Balanced 高可用性可在同一区域中的两个可用区之间同步复制数据,并在发生一个可用区级故障时确保磁盘数据的高可用性。 区域磁盘可以是启动磁盘,也可以是非启动磁盘。
(预览版):您还可以通过设置磁盘访问模式,允许不同的实例同时访问 Hyperdisk Balanced 高可用性磁盘。区域性磁盘只能挂接到磁盘副本所在可用区中的实例。如需了解详情,请参阅在实例之间共享磁盘。
本文档介绍了如何对区域性磁盘执行以下任务:
- 创建区域性磁盘。
- 将区域磁盘挂接到 Compute Engine 实例。
- 将可用区级磁盘更改为区域级磁盘。
- 使用区域性磁盘创建新实例。
- 将区域性磁盘用作新实例的启动磁盘。
- 将区域启动磁盘挂接到实例。
- 列出和描述您的区域磁盘。
- 调整区域磁盘的大小。
准备工作
- 查看不同类型的磁盘存储选项之间的差异。
- 查看同步磁盘复制的基础知识。
- 了解区域性磁盘故障切换。
- 如果对 Hyperdisk Balanced 高可用性磁盘使用多写入者模式,请查看在实例之间共享磁盘中的相关要求和限制。
-
如果您尚未设置身份验证,请进行设置。身份验证是验证您的身份以访问 Google Cloud 服务和 API 的过程。如需从本地开发环境运行代码或示例,您可以通过选择以下选项之一向 Compute Engine 进行身份验证:
Select the tab for how you plan to use the samples on this page:
When you use the Google Cloud console to access Google Cloud services and APIs, you don't need to set up authentication.
-
Install the Google Cloud CLI, then initialize it by running the following command:
gcloud init
- Set a default region and zone.
- Install the Google Cloud CLI.
-
To initialize the gcloud CLI, run the following command:
gcloud init
-
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.
Terraform
如需在本地开发环境中使用本页面上的 Terraform 示例,请安装并初始化 gcloud CLI,然后使用您的用户凭据设置应用默认凭据。
如需了解详情,请参阅 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 Instance Admin (v1) (
roles/compute.instanceAdmin.v1
) -
连接到能够以服务账号身份运行的实例:Service Account User (v1) (
roles/iam.serviceAccountUser
)
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色包含创建区域性磁盘所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
创建区域性磁盘需要以下权限:
-
compute.disks.create
-
compute.instances.attachDisk
-
compute.disks.use
-
创建磁盘的快照:
compute.disks.createSnapshot
-
查看磁盘的详细信息:
compute.disks.get
-
获取磁盘列表:
compute.disks.list
-
更改磁盘大小:
compute.disks.update
限制
- 您只能将区域级永久性磁盘挂接到使用 E2、N1、N2 和 N2D 机器类型的虚拟机。
- 您只能将 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 高可用性卷;无法通过映像创建区域级磁盘。
如需将区域级磁盘用作实例的启动磁盘,请使用以下任一方法:
- 创建具有区域级启动磁盘的新实例。
- 创建区域启动磁盘,然后将其挂接到实例:
- 通过启动磁盘的快照创建区域级磁盘。
- 将区域启动磁盘挂接到实例。
如果您需要将区域启动磁盘故障切换到副本可用区中正在运行的备用实例,请按照将区域启动磁盘挂接到实例中所述的步骤操作。
创建区域级磁盘
创建区域级 Persistent Disk 卷或 Hyperdisk Balanced 高可用性卷。磁盘必须与您计划将其挂接到的计算实例位于同一区域。
如果您创建 Hyperdisk Balanced 高可用性卷,则还可以通过设置磁盘访问模式,允许不同的实例同时访问磁盘。如需了解详情,请参阅在实例之间共享磁盘。
对于区域级 Persistent Disk,如果您在 Google Cloud 控制台中创建磁盘,则默认磁盘类型为pd-balanced
。如果您使用 gcloud CLI 或 REST 创建磁盘,则默认磁盘类型为 pd-standard
。
在 Google Cloud 控制台中,转到磁盘页面。
选择所需项目。
点击创建磁盘。
指定磁盘的名称。
在位置部分,选择区域级。
选择区域和可用区。您必须选择与创建实例时选择的相同区域。
选择同一区域中的副本可用区。记下所选的地区,因为您必须将磁盘挂接到位于其中一个地区的实例。
选择磁盘来源类型。
在磁盘设置下,选择磁盘类型和大小。您还可以更改默认的预配 IOPS 和预配吞吐量设置。
可选:对于 Hyperdisk Balanced 高可用性卷,您可以通过创建多写入者模式下的磁盘来允许将磁盘挂接到多个实例(预览版)。在访问模式下,选择从多个虚拟机进行读写。
点击创建以完成磁盘的创建。
使用 compute disks create
命令创建区域磁盘。
如果您需要使用区域级 SSD Persistent Disk 以实现更高的吞吐量或 IOPS,请添加 --type
标志并指定 pd-ssd
。
gcloud compute disks createDISK_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
ZONE1
和ZONE2
:两个磁盘副本所在区域内的可用区,例如europe-west1-b,europe-west1-c
DISK_ACCESS_MODE
:可选:实例如何访问 Hyperdisk Balanced 高可用性磁盘上的数据(预览版)。支持的值包括:READ_WRITE_SINGLE
,表示从一个实例进行读写访问。这是默认的。READ_WRITE_MANY
,表示从多个实例进行读写访问。
您只能为 Hyperdisk Balanced 高可用性磁盘设置访问模式。
如需创建区域级 Persistent Disk 卷或 Hyperdisk Balanced 高可用性卷,您可以使用 google_compute_region_disk
资源。
如需创建区域级 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
:您的项目 IDREGION
:区域磁盘将驻留的区域,例如europe-west1
DISK_NAME
:新磁盘的名称ZONE1
和ZONE2
:新磁盘副本应位于的可用区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 高可用性磁盘。
如需将区域磁盘挂接到正在运行或已停止的实例,请使用 compute instances attach-disk
命令并将 --disk-scope
标志设置为 regional
。
如果将多写入者模式下的 Hyperdisk Balanced 高可用性磁盘挂接到多个实例,唯一支持的附加模式是 rw
,这是默认访问模式。您无需添加 --mode
标志。
gcloud compute instances attach-diskINSTANCE_NAME \ --disk=DISK_NAME \ --disk-scope=regional \ --device-name=DEVICE_NAME
替换以下内容:
INSTANCE_NAME
:您要将区域性磁盘添加到的实例的名称DISK_NAME
:您要挂接到实例的新磁盘的名称DEVICE_NAME
(可选):客机操作系统用于创建符号链接的名称,有助于在操作系统级别识别磁盘。
如需将区域级 Persistent Disk 卷或 Hyperdisk Balanced 高可用性卷挂接到实例,您可以使用 google_compute_attached_disk
资源。
如需将区域性磁盘挂接到正在运行或已停止的实例,请构建对 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
:您的项目 IDZONE
:实例的位置INSTANCE_NAME
:您要向其中添加新区域性磁盘的实例的名称REGION
:区域级磁盘所在的区域DISK_NAME
:区域性磁盘的名称(如 Google Cloud 控制台中所示)。DEVICE_NAME
(可选):客机操作系统用于创建符号链接的名称,有助于在操作系统级别识别磁盘。
对于非启动磁盘,在创建空白区域级磁盘并将其挂接到实例后,您必须格式化并装载磁盘,以便操作系统可以使用可用的存储空间。
将可用区级磁盘更改为区域级磁盘
如需将现有的可用区级 Persistent Disk 转换为区域级 Persistent Disk,请通过克隆现有的可用区级磁盘来创建新磁盘。如需了解详情,请参阅通过可用区级磁盘创建区域级磁盘克隆。如需将 Hyperdisk 转换为区域性磁盘,请按照将可用区磁盘更改为 Hyperdisk Balanced 高可用性磁盘中所述,通过现有磁盘的快照创建新的 Hyperdisk Balanced 高可用性磁盘。
创建具有区域性磁盘的新实例
创建实例时,您可以视需要将区域级 Persistent Disk 卷或Hyperdisk Balanced 高可用性卷作为额外磁盘进行添加。
如需在创建实例期间创建区域级 Persistent Disk 卷或Hyperdisk Balanced 高可用性卷并将其挂接到实例,请参阅以下任一内容:
使用区域性启动磁盘创建新实例
设置高可用性计算实例时,您可以创建具有区域级启动磁盘的主实例。如果发生可用区级服务中断,您可以重启次要可用区中的实例,而不是创建新的实例。
在高可用性设置(其中启动设备是区域级磁盘)中,Google 建议您不要预先创建并启动备用实例。相反,在故障切换阶段,您可以在使用 forceAttach
选项创建备用实例时挂接现有区域级磁盘。
如需创建启动磁盘是区域磁盘的实例,请使用以下任一方法:
使用 gcloud compute instances create
命令创建实例,并使用 --create-disk
标志指定区域磁盘。
gcloud compute instances createPRIMARY_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:区域级磁盘的备用可用区
创建对 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
:您的项目 IDZONE
:您要在其中创建实例的可用区的名称INSTANCE_NAME
:实例的名称BOOT_SNAPSHOT_NAME
:启动磁盘快照的名称REMOTE_ZONE
:区域级磁盘的远程可用区DISK_TYPE
:要创建的磁盘的类型,例如hyperdisk-balanced-high-availability
或pd-balanced
将区域级启动磁盘挂接到实例
请按照以下步骤操作:
- 将现有实例的启动磁盘替换为区域级启动磁盘。
- 将区域启动磁盘故障切换到在备用可用区中运行的热备用实例。为此,您可以将区域磁盘作为启动磁盘挂接到实例。
这些步骤假定区域性磁盘和实例已存在。
- 停止实例。
gcloud compute instances stop
INSTANCE_NAME --zone=ZONE - 将当前启动磁盘与实例分离。
gcloud compute instances detach-disk
INSTANCE_NAME \ --zone=ZONE --disk=CURRENT_BOOT_DEVICE_NAME - 将区域级启动磁盘挂接到实例。
gcloud compute instances attach-disk
INSTANCE_NAME \ --zone=ZONE \ --disk=REGIONAL_DISK_NAME \ --disk-scope=regional --force-attach \ --boot 重启实例。
gcloud compute instances start
INSTANCE_NAME
将上述命令中的变量替换为以下变量:
INSTANCE_NAME
:您要将区域启动磁盘挂接到的实例的名称ZONE
:实例所在的可用区CURRENT_BOOT_DEVICE_NAME
:实例正在使用的启动磁盘的名称。此名称通常与实例名称相同。REGIONAL_DISK_NAME
:您要作为启动磁盘挂接到实例的区域性磁盘的名称
可选:如果您由于服务中断或故障而无法成功将区域级启动磁盘与主实例分离,请添加 --force-attach
标志。
停止实例。
POST https://compute.googleapis.com/compute/v1/projects/
PROJECT_ID /zones/ZONE /instances/INSTANCE_NAME /stop将当前启动磁盘与实例分离。
POST https://compute.googleapis.com/compute/v1/projects/
PROJECT_ID /zones/ZONE /instances/INSTANCE_NAME /detachDisk?deviceName=CURRENT_BOOT_DEVICE_NAME 将区域级启动磁盘挂接到实例。
构建对
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 }重启实例。
POST https://compute.googleapis.com/compute/v1/projects/
PROJECT_ID /zones/ZONE /instances/INSTANCE_NAME /start
将上述命令中的变量替换为以下变量:
PROJECT_ID
:您的项目 IDINSTANCE_NAME
:您要将区域性磁盘挂接到的实例的名称ZONE
:实例所在的可用区CURRENT_BOOT_DEVICE_NAME
:实例正在使用的启动磁盘的名称。此名称通常与实例名称相同。REGION
:区域级磁盘所在的区域。REGIONAL_DISK_NAME
:您要作为启动磁盘挂接到实例的区域性磁盘的名称
可选:如果您由于服务中断或故障而无法成功将区域级启动磁盘与其最初挂接到的实例分离,请在请求正文中添加 "forceAttach": true
。
列出和描述您的区域磁盘
您可以查看所有已配置的区域级磁盘的列表,以及有关其属性的信息,包括:
- 磁盘 ID
- 磁盘名称
- 大小
- 磁盘类型
- 区域
- 可用区副本
如需查看有关区域级磁盘的详细信息,请使用以下选项:
- 如需查看特定区域和项目中所有区域级磁盘的详细信息,请执行以下操作:
- 构建对
compute.regionDisks.list
方法的GET
请求。 - 使用
gcloud compute disks list
命令,并按区域过滤结果。
- 构建对
- 如需查看特定区域性磁盘的详细信息,请执行以下操作:
- 在运行
gcloud compute disks describe
命令时使用--region
标志,并指定磁盘的名称及其区域。 - 构建对
compute.regionDisks.get
方法的GET
请求。
- 在运行
调整区域磁盘的大小
如果具有区域磁盘的实例需要额外的存储空间,您可以调整磁盘的大小。无论磁盘是否附加到正在运行的实例,您都可以随时调整磁盘的大小。如果您需要将数据分为独一无二的卷,请为该实例创建多个辅助磁盘。对于 Hyperdisk Balanced 高可用性,您还可以提高磁盘的 IOPS 和吞吐量限制。
调整区域性磁盘大小的命令与调整区域性磁盘大小的命令非常类似。但是,您必须为磁盘位置指定区域,而不是可用区。
您只能增加磁盘大小,而不能减小磁盘大小。如需减小磁盘大小,您必须创建较小的新磁盘。在删除较大的原始磁盘之前,您需要为这两个磁盘付费。
如需了解如何修改区域级磁盘,请参阅以下内容:
- 区域级 Persistent Disk:增加永久性磁盘的大小
- Hyperdisk Balanced 高可用性:修改 Hyperdisk 卷
后续步骤
- 了解磁盘价格。
- 了解如何监控区域级磁盘的副本状态。
- 了解如何确定区域级磁盘的复制状态。
- 查看在计算实例之间共享 Persistent Disk 卷作为用于只读数据的区域级 Persistent Disk 的替代方案。
- 创建磁盘的快照。
- 了解计算实例的实例组。
- 了解如何在 Google Cloud上构建可扩缩、弹性佳的 Web 应用。
- 请参阅Google Cloud 灾难恢复计划指南。