添加区域永久性磁盘或调整其大小

本页面介绍如何添加和管理区域永久性磁盘存储资源。 调整区域永久性磁盘的大小时,您只能增大其容量,不能减少。

区域永久性磁盘与地区永久性磁盘的特性类似,但在以下几个方面有所不同:

  • 区域永久性磁盘不能用作启动磁盘。
  • 如果在一个地区发生故障,区域永久性磁盘支持强制挂接到另一个虚拟机实例。
  • 您可以通过快照创建区域永久性磁盘,但不能通过映像创建。
  • 这两类磁盘存在性能差异,详情请参阅存储方案文档。

区域永久性磁盘可在同一区域中的两个地区之间同步复制数据。万一发生罕见的地区性故障,您的工作负载可以故障转移到同一地区或辅助地区中的另一个虚拟机。然后,您可以将区域永久性磁盘强制挂接到该实例。 我们估计,强制挂接可以在一分钟以内完成。

为防止数据意外丢失,我们建议您使用快照备份区域永久性磁盘。

设计可靠的系统和使用需要高可用性的有状态数据库服务(如 MySQL 和 Postgres)时,可以考虑使用区域永久性磁盘。

如需了解这些资源及其性能的对比情况,请参阅 Compute Engine 存储方案

准备工作

限制

区域永久性磁盘具有以下限制:

  • 它们不能用作启动磁盘。
  • 您可以通过快照创建区域永久性磁盘,但不能通过映像创建。
  • 区域标准永久性磁盘的大小下限为 200 GB。
  • 您不能将区域永久性磁盘与内存优化机器类型计算优化机器类型配合使用。

将区域永久性磁盘添加到您的实例

创建区域标准永久性磁盘或区域 SSD 永久性磁盘并将其挂接到实例。如果您没有任何实例,则必须先创建并启动新实例。 请务必在磁盘所属的区域中创建实例。

控制台

您首先必须创建区域永久性磁盘,然后将其挂接到现有实例。您不能将区域永久性磁盘创建为启动磁盘,因为故障转移期间无法强制挂接此类磁盘。

创建区域永久性磁盘。

  1. 在 Google Cloud Console 中,转到磁盘页面。

    转到“磁盘”

  2. 选择您的项目。

  3. 点击创建磁盘

  4. 指定磁盘的名称

  5. 选择磁盘类型

  6. 勾选在区域内复制此磁盘复选框。

  7. 选择区域。

    记下该区域,因为在创建实例时必须选择同一区域。

  8. 选择该区域中的两个地区,然后点击确定

    请务必选择两个地区。记下所选的地区,因为您必须将磁盘挂接到位于其中一个地区的实例。

  9. 选择来源类型

  10. 选择加密

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

创建区域永久性磁盘后,将其挂接到您的实例

在将某个磁盘挂接到实例时,如果该磁盘已挂接到其他实例,您可能会收到错误消息。在点击挂接现有磁盘后,您可能需要勾选强制挂接磁盘复选框,将磁盘强制挂接到实例。

在将新磁盘挂接到实例后,您必须格式化并装载磁盘,以便操作系统可以使用可用的存储空间。

gcloud

使用 gcloud 命令行工具创建并挂接区域永久性磁盘:

  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-standardpd-ssd
    • REGION:区域磁盘将驻留的区域。示例:europe-west1
    • ZONE1ZONE2:两个磁盘副本所在区域内的地区。
      请务必选择两个地区。示例:europe-west1-a,europe-west1-b
  2. 创建磁盘后,将其挂接到任何正在运行或已停止的实例。 使用 compute instances attach-disk 命令并添加 --disk 标志。

    gcloud compute instances attach-disk INSTANCE_NAME \
        --disk DISK_NAME
    

    替换以下内容:

    • INSTANCE_NAME:您要在其中添加新的区域永久性磁盘的实例的名称
    • DISK_NAME:您要挂接到实例的新磁盘的名称

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

API

  1. 在 API 中,构建一个 POST 请求以创建区域永久性磁盘。 在 compute.regionDisks.insert 请求正文中,初始化新磁盘并指定磁盘 namereplicaZones 属性。如需创建空白磁盘,请勿指定任何映像或快照来源。

    POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION
    
    {
     "name": "DISK_NAME",
     "replicaZones": [
       "projects/PROJECT_ID/zones/ZONE1",
       "projects/PROJECT_ID/zones/ZONE2"
       ],
     }
    

    替换以下内容:

    • PROJECT_ID:您的项目 ID
    • DISK_NAME:新磁盘的名称
    • [ZONE1ZONE2:新磁盘副本应位于的地区
  2. 在 API 中,构建一个对 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:您要在其中添加新永久性磁盘的实例的名称
    • DISK_NAME:新磁盘的名称

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

在发生地区性故障期间访问区域永久性磁盘

万一发生罕见的地区性中断,区域永久性磁盘可以通过结合使用 --force-attach 标志attach-disk 命令故障转移到位于另一个地区的虚拟机实例。

如果正在运行虚拟机实例的地区不再可用,则可能无法从实例分离磁盘,因为系统无法访问实例来执行分离操作。借助强制挂接功能,您可以将区域永久性磁盘挂接到虚拟机实例,即使该磁盘当前已挂接到另一个实例也没有问题。

完成强制挂接操作后,Compute Engine 会阻止原始虚拟机向该磁盘写入数据。使用强制挂接功能,您可以安全地重新获得对数据的访问权限并恢复服务。

只有当某次写入的数据持久保留在两个副本中时,系统才会确认此次写入操作,并将结果返回虚拟机。如果其中一个副本不可用,则 Compute Engine 只会将数据写入到运行状况良好的副本中。当 Compute Engine 确定运行状况不佳的副本已进行备份时,该副本会以透明方式与运行状况良好的副本保持同步,而且操作会恢复完全同步模式。此操作对虚拟机是透明的。

如果发生两个副本都无法使用的罕见情况,或者运行状况良好的副本无法使用,而另一个副本正进入同步状态,则对应的磁盘将无法使用。

此外,您也可以选择在执行强制挂接步骤后手动关停实例

地区内故障

您还可以选择将区域永久性磁盘强制挂接到同一地区中的虚拟机实例。当您处理由虚拟机配置错误、操作系统升级错误或其他故障模式导致的服务中断时,可以使用这种地区内故障转移方案。

控制台

创建备用虚拟机实例并将磁盘强制挂接到实例。

  1. 在 Google Cloud Console 中,转到虚拟机实例页面。

    转到“虚拟机实例”

  2. 选择您的项目。

  3. 点击创建

  4. 为您的实例指定名称

  5. 选择区域永久性磁盘所在的区域。

  6. 选择挂接了该磁盘的原始虚拟机实例的备用地区。磁盘页面中会列出您的磁盘。

  7. 点击管理、磁盘、网络、SSH 密钥

  8. 点击磁盘

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

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

  11. 选中复选框以强制挂接磁盘。

  12. 点击完成

  13. 点击创建以完成此实例的创建。新虚拟机实例会显示在虚拟机实例页面上。当地区从中断恢复后,可以执行相同的步骤来将磁盘强制挂接到原始实例。

gcloud

gcloud 工具中,使用 instances attach-disk 命令将副本磁盘挂接到虚拟机实例。添加 --disk-scope 标志并将其设置为 regional

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

替换以下内容:

  • INSTANCE_NAME:区域中新虚拟机实例的名称
  • DISK_NAME:磁盘的名称

在强制挂接磁盘后,可根据需要将文件系统装载在磁盘上。实例可以使用强制挂接的磁盘继续进行读取和写入操作。

API

构建一个对 compute.instances.attachDisk 方法的 POST 请求,并在其中添加您刚创建的永久性磁盘的网址。您需要使用 forceAttach=true 查询参数将该磁盘挂接到新的虚拟机实例,即使该磁盘仍挂接在主实例上。

POST https://compute.googleapis.com/compute/v1/projects/PROJECT_ID/zones/ZONE/instances/INSTANCE_NAME/attachDisk?forceAttach=true

{
 "source": "projects/PROJECT_ID/regions/REGION/disks/DISK_NAME"
}

替换以下内容:

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

在挂接副本磁盘后,您可以根据需要将文件系统装载在磁盘上。实例可以使用副本磁盘继续进行读取和写入操作。

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

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

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

控制台

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

  1. 在 Google Cloud Console 中,转到磁盘页面。

    转到“磁盘”

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

  3. 点击页面顶部的修改

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

    您只能增加磁盘的容量,不能减少。

  5. 点击保存

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

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

gcloud

gcloud 工具中,使用 compute disks resize 命令。将 --size 标志指定为您所需的磁盘大小(以 GB 为单位),并将 --region 标志指定为磁盘所在的区域。

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

替换以下内容:

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

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

API

在 API 中,构建对 compute.regionDisks.resize 方法的 POST 请求。在请求正文中,指定 sizeGb 参数并将其设置为所需磁盘大小(以 GB 为单位)。

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 Console 中,转到实例页面。

    转到实例

  2. 点击要挂接磁盘的实例的名称。实例详情页面会打开。

  3. 在实例详情页面顶部,点击修改

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

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

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

  7. 点击完成

  8. 在实例详情页面的底部,点击保存以将更改应用于实例。

  9. 连接到实例并装载磁盘。

  10. 重复此过程,以在只读模式下将磁盘添加到其他实例。

gcloud

gcloud 工具中,使用 compute instances attach-disk 命令并用 ro 选项指定 --mode 标志。

gcloud beta compute instances attach-disk INSTANCE_NAME --disk DISK_NAME \
    --disk-scope regional --mode ro

替换以下内容:

  • INSTANCE_NAME:您要在其中挂接永久性磁盘的实例的名称
  • DISK_NAME:您要挂接的磁盘的名称

挂接磁盘后,连接到实例并装载磁盘。

对您要在其中以只读模式添加此磁盘的每个实例重复此命令。

API

在 API 中,构建对 compute.instances.attachDisk 方法的 POST 请求。在请求正文中,将 mode 参数指定为 READ_ONLY

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

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

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • ZONE:实例的地区
  • INSTANCE_NAME:您要在其中挂接永久性磁盘的实例的名称
  • REGION:磁盘所在的区域
  • DISK_NAME:您要挂接的磁盘的名称

挂接磁盘后,连接到实例并装载磁盘。

对您要在其中以只读模式添加此磁盘的每个实例重复此请求。

将地区永久性磁盘迁移到区域永久性磁盘

如需将现有的地区永久性磁盘转换为区域永久性磁盘,只需截取当前永久性磁盘的快照,然后利用该快照创建区域永久性磁盘即可。

gcloud

gcloud 工具中,使用 compute disks snapshot 命令并指定 --zone 标志和 --snapshot-names 标志。

gcloud compute disks snapshot DISK_NAME \
    --zone ZONE \
    --snapshot-names SNAPSHOT_DISK_NAME

替换以下内容:

  • DISK_NAME:您要对其截取快照的磁盘的名称
  • ZONE:来源地区磁盘所在的位置
  • SNAPSHOT_DISK_NAME:最近被截取过快照的磁盘的名称

使用 compute disks create 通过区域磁盘的快照创建区域磁盘。指定磁盘名称、--region--replica-zones--source-snapshot 标志。

gcloud compute disks create DISK_NAME \
    --region REGION \
    --replica-zones ZONE1,ZONE2 \
    --source-snapshot SNAPSHOT_DISK_NAME

替换以下内容:

  • DISK_NAME:新磁盘的名称
  • REGION:磁盘将驻留的区域
  • ZONE1ZONE2:新的区域永久性磁盘副本将驻留的地区
  • SNAPSHOT_DISK_NAME:来源快照磁盘的名称

您可以使用相同的方法将区域磁盘迁移到地区磁盘。

API

在 API 中,构建一个对 compute.disk.createSnapshot 方法的 POST 请求以创建磁盘快照。在请求正文中,指定磁盘所在的 zone、您要截取快照的 disk 的名称以及 createSnapshot

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

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • ZONE:磁盘所在的地区
  • DISK_NAME:您要截取快照的磁盘的名称

在 API 中,构建一个 POST 请求以创建区域永久性磁盘。 在 compute.regionDisks.insert 请求正文中,初始化新磁盘并指定磁盘名称和副本地区属性。由于这是数据磁盘,所以不要添加 sourceImage 属性,否则会创建一个空白磁盘:

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

{
 "name": "DISK_NAME",
 "sourceSnapshot": "global/snapshots/SNAPSHOT_NAME",
 "replicaZones": [
 "projects/PROJECT_ID/zones/ZONE1",
 "projects/PROJECT_ID/zones/ZONE2"
 ],
}

替换以下内容:

  • PROJECT_ID:您的项目 ID
  • REGION:磁盘将驻留的区域
  • DISK_NAME:新磁盘的名称
  • SNAPSHOT_NAME:要恢复的快照
  • ZONE1ZONE2:新的区域永久性磁盘副本将驻留的地区

后续步骤