区域级 Persistent Disk 和 Hyperdisk 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
-
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.
-
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 高可用性卷与其对应的可用区级磁盘具有不同的性能特征。如需了解详情,请参阅块存储性能。
- 如果您通过克隆可用区级磁盘来创建复制磁盘,则两个可用区级副本在创建时不会完全同步。创建后,您一般可以在 3 分钟内使用区域级磁盘克隆。不过,您可能需要等待几十分钟,磁盘才会完全复制,恢复点目标 (RPO) 才会接近于零。了解如何检查复制磁盘是否已完全复制。
- 创建具有复制的启动磁盘的新虚拟机。
- 创建复制的启动磁盘,然后将其挂接到虚拟机:
- 通过启动磁盘的快照创建复制的磁盘。
- 将复制的启动磁盘挂接到虚拟机。
在 Google Cloud 控制台中,转到磁盘页面。
选择所需项目。
点击创建磁盘。
指定磁盘的名称。
在位置部分,选择区域级。
选择区域和可用区。您必须选择与创建虚拟机时选择的相同区域。
选择同一区域中的副本可用区。记下所选的可用区,因为您必须将磁盘挂接到位于其中一个可用区的虚拟机。
选择磁盘来源类型。
选择磁盘类型和大小。
点击创建以完成磁盘的创建。
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
PROJECT_ID
:您的项目 IDREGION
:复制的磁盘所在的区域,例如europe-west1
DISK_NAME
:新磁盘的名称ZONE1
和ZONE2
:新磁盘副本应位于的可用区DISK_SIZE
:新磁盘的大小(以 GB 为单位)DISK_TYPE
:对于区域级 Persistent Disk,这是 Persistent Disk 的类型。 对于 Hyperdisk,请指定值hyperdisk-balanced-high-availability
。VM_NAME
:您要将复制的磁盘添加到的虚拟机的名称DISK_NAME
:您要挂接到虚拟机的新磁盘的名称PROJECT_ID
:您的项目 IDZONE
:您的虚拟机的位置VM_NAME
:您要将新的复制磁盘添加到的虚拟机的名称REGION
:复制的磁盘所在的区域DISK_NAME
:复制磁盘的名称- PRIMARY_INSTANCE_NAME:虚拟机的名称
- ZONE:您要在其中创建虚拟机的可用区的名称
- REPLICATED_DISK_NAME:复制的磁盘的名称
- DISK_TYPE:要创建的磁盘的类型,例如
hyperdisk-balanced-high-availability
(预览版) 或pd-balanced
- SNAPSHOT_NAME:您为启动磁盘创建的快照的名称
- REMOTE_ZONE:复制的磁盘的备用可用区
PROJECT_ID
:您的项目 IDZONE
:要创建虚拟机的可用区的名称VM_NAME
:虚拟机的名称BOOT_SNAPSHOT_NAME
:启动磁盘快照的名称REMOTE_ZONE
:复制的磁盘的远程可用区DISK_TYPE
:要创建的磁盘的类型,例如hyperdisk-balanced-high-availability
(预览版) 或pd-balanced
- 将现有虚拟机的启动磁盘替换为复制的启动磁盘。
- 将复制的启动磁盘故障切换到在备份可用区中运行的热备用虚拟机。为此,您可以将复制的磁盘作为启动磁盘挂接到虚拟机。
- 停止虚拟机。
gcloud compute instances stop VM_NAME --zone=ZONE
- 将当前启动磁盘与虚拟机分离。
gcloud compute instances detach-disk VM_NAME \ --zone=ZONE --disk=CURRENT_BOOT_DEVICE_NAME
- 将复制的启动磁盘挂接到虚拟机。
gcloud compute instances attach-disk VM_NAME \ --zone=ZONE \ --disk=REPLICATED_DISK_NAME \ --disk-scope=regional --force-attach
重启虚拟机。
gcloud compute instances start VM_NAME
VM_NAME
:您要将复制的启动磁盘挂接到的虚拟机的名称ZONE
:虚拟机所在的可用区CURRENT_BOOT_DEVICE_NAME
:虚拟机正在使用的启动磁盘的名称。此名称通常与虚拟机名称相同。REPLICATED_DISK_NAME
:您要作为启动磁盘挂接到虚拟机的复制磁盘的名称停止虚拟机。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/stop
将当前启动磁盘与虚拟机分离。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/detachDisk?deviceName=CURRENT_BOOT_DEVICE_NAME
将复制的启动磁盘挂接到虚拟机。
构建对
compute.instances.attachDisk
方法的POST
请求,并添加复制的启动磁盘的网址:POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/attachDisk { "source": "compute/v1/projects/PROJECT_ID/regions/REGION/disks/REPLICATED_DISK_NAME", "boot": true }
重启虚拟机。
POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/VM_NAME/start
PROJECT_ID
:您的项目 IDVM_NAME
:您要将复制磁盘挂接到的虚拟机的名称ZONE
:虚拟机所在的可用区CURRENT_BOOT_DEVICE_NAME
:虚拟机正在使用的启动磁盘的名称。此名称通常与虚拟机名称相同。REGION
:复制的磁盘所在的区域REPLICATED_DISK_NAME
:您要作为启动磁盘挂接到虚拟机的复制磁盘的名称- 磁盘 ID
- 磁盘名称
- 大小
- 磁盘类型
- 区域
- 可用区副本
- 如需查看特定区域和项目中所有复制的磁盘的详细信息,请执行以下操作:
- 构建对
compute.regionDisks.list
方法的GET
请求。 - 使用
gcloud compute disks list
命令,并按区域过滤结果。
- 构建对
- 如需查看特定复制磁盘的详细信息,请执行以下操作:
- 在运行
gcloud compute disks describe
命令时使用--region
标志,并指定磁盘的名称及其区域。 - 构建对
compute.regionDisks.get
方法的GET
请求。
- 在运行
- 区域级 Persistent Disk:增加永久性磁盘的大小
- Hyperdisk Balanced 高可用性:修改 Hyperdisk 卷
- 了解磁盘价格。
- 了解如何监控复制的磁盘的副本状态。
- 了解如何确定复制的磁盘的复制状态。
- 查看在虚拟机之间共享 Persistent Disk 卷作为用于只读数据的区域级 Persistent Disk 的替代方案。
- 创建磁盘的快照。
- 了解虚拟机实例的实例组。
- 了解如何在 Google Cloud 上构建可扩缩的弹性 Web 应用。
- 参阅 Google Cloud 灾难恢复计划指南。
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 角色:
如需详细了解如何授予角色,请参阅管理对项目、文件夹和组织的访问权限。
这些预定义角色可提供创建同步复制的磁盘所需的权限。如需查看所需的确切权限,请展开所需权限部分:
所需权限
创建同步复制的磁盘需要以下权限:
限制
关于将复制的磁盘用作虚拟机的启动磁盘
在预配生产工作负载之前,您可以挂接区域级 Persistent Disk 磁盘或 Hyperdisk Balanced 高可用性(预览版)磁盘作为提前预配的有状态工作负载的启动磁盘。复制的启动磁盘不适用于热备用,因为复制的启动磁盘无法同时挂接到两个虚拟机。
您只能通过快照创建 区域级 Persistent Disk 卷或 Hyperdisk Balanced 高可用性卷;无法通过映像创建复制的磁盘。
如需将复制的磁盘用作虚拟机启动磁盘,请使用以下任一方法:
如果您需要将复制的启动磁盘故障切换到副本可用区中正在运行的备用虚拟机,请按照将复制的启动磁盘挂接到虚拟机中所述的步骤操作。
创建同步复制的磁盘
创建区域级 Persistent Disk 卷或 Hyperdisk Balanced 高可用性(预览版)卷。磁盘必须与您计划将其挂接到的虚拟机位于同一区域。
对于区域级 Persistent Disk,如果您在 Google Cloud 控制台中创建磁盘,则默认磁盘类型为pd-balanced
。如果您使用 gcloud CLI 或 REST 创建磁盘,则默认磁盘类型为pd-standard
。控制台
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
替换以下内容:
Terraform
如需创建区域级 Persistent Disk 卷或 Hyperdisk Balanced 高可用性卷,您可以使用
google_compute_region_disk
资源。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" }
替换以下内容:
将复制的磁盘挂接到虚拟机
对于非启动磁盘,在创建区域级 Persistent Disk 卷或 Hyperdisk Balanced 高可用性(预览版)卷后,您可以将其挂接到虚拟机。虚拟机必须与磁盘位于同一区域。
如需将复制的启动磁盘挂接到虚拟机,请参阅将复制的启动磁盘挂接到虚拟机。
控制台
gcloud
如需将复制的磁盘挂接到正在运行或已停止的虚拟机,请使用
compute instances attach-disk
命令并将--disk-scope
标志设置为regional
。gcloud compute instances attach-disk VM_NAME \ --disk=DISK_NAME \ --disk-scope=regional
替换以下内容:
Terraform
如需将区域级 Persistent Disk 卷或 Hyperdisk Balanced 高可用性卷挂接到虚拟机,您可以使用
google_compute_attached_disk
资源。REST
如需将复制的磁盘挂接到正在运行或已停止的虚拟机,请构建对
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" }
替换以下内容:
对于非启动磁盘,在创建空白复制磁盘并将其挂接到虚拟机后,您必须格式化并装载磁盘,以便操作系统可以使用可用的存储空间。
将可用区级磁盘更改为复制的磁盘
如需将现有的可用区级 Persistent Disk 转换为区域级 Persistent Disk,请通过克隆现有的可用区级磁盘来创建新磁盘。如需了解详情,请参阅通过可用区级磁盘创建区域级磁盘克隆。如需将 Hyperdisk 转换为同步复制的磁盘,请按照更改磁盘类型中所述,通过现有磁盘的快照创建新的 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=REPLICATED_DISK_NAME:scope=regional:boot=true:type=DISK_TYPE:source-snapshot=SNAPSHOT_NAME:replica-zones=ZONE,REMOTE_ZONE
指定磁盘参数时,字符
^:^
指定参数之间的分隔符是英文冒号 (:
)。这样您可以在指定 replica-zones 参数时使用英文逗号 (,
)。替换以下内容:
REST
创建对
instances.insert
方法的POST
请求,并指定属性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" ], "diskType": "projects/PROJECT_ID/zones/ZONE/diskTypes/DISK_TYPE" } }], "networkInterfaces": [ { "network": "global/networks/default" } ] }
请替换以下内容:
将复制的启动磁盘挂接到虚拟机
请按照以下步骤操作:
这些步骤假定复制的磁盘和虚拟机已存在。
gcloud
将上述命令中的变量替换为以下变量:
可选:如果您由于服务中断或故障而无法成功将复制的启动磁盘与主虚拟机分离,请添加
--force-attach
标志。REST
将上述命令中的变量替换为以下变量:
可选:如果您由于服务中断或故障而无法成功将复制的启动磁盘与其最初挂接到的虚拟机分离,请在请求正文中添加
"forceAttach": true
。列出和描述复制的磁盘
您可以查看所有已配置的复制磁盘的列表,以及有关其属性的信息,包括:
如需查看有关复制的磁盘的详细信息,请使用以下选项:
调整复制的磁盘的大小
如果具有同步复制的磁盘的虚拟机需要额外存储空间,您可以调整磁盘的大小。无论磁盘是否已挂接到正在运行的虚拟机,您都可以随时调整磁盘的大小。如果您需要将数据拆分到多个唯一卷中,请为虚拟机创建多个辅助磁盘。对于 Hyperdisk Balanced 高可用性,您还可以提高磁盘的 IOPS 和吞吐量限制。
调整复制磁盘大小的命令与调整非复制磁盘大小的命令非常类似。但是,您必须为磁盘位置指定区域,而不是可用区。
您只能增加磁盘大小,而不能减小磁盘大小。如需减小磁盘大小,您必须创建较小的新磁盘。在删除较大的原始磁盘之前,您需要为这两个磁盘付费。
如需了解如何修改复制的磁盘,请参阅以下内容:
后续步骤
如未另行说明,那么本页面中的内容已根据知识共享署名 4.0 许可获得了许可,并且代码示例已根据 Apache 2.0 许可获得了许可。有关详情,请参阅 Google 开发者网站政策。Java 是 Oracle 和/或其关联公司的注册商标。
最后更新时间 (UTC):2024-12-24。
-