重新定位存储分区

本页介绍了如何将存储分区从一个位置迁移到另一个位置。如需了解存储分区重定位,请参阅存储分区重定位

准备工作

在启动存储分区重新定位流程之前,请完成以下步骤:

  1. 启用管理中心

  2. 启用软删除

  3. 查看配额和限制,确保新位置有足够的配额来容纳存储分区中的数据。

  4. 确定存储分区重新定位类型,以了解是否需要写入停机时间。

  5. 移除所有现有的存储分区代码

  6. 如果您使用资产清单报告,请保存您的配置

所需的角色

如需获得将存储分区从一个位置迁移到另一个位置的权限,请让管理员为您授予项目的 Storage Admin (roles/storage.admin) 角色。

此角色提供了一组权限,可让您将存储分区从一个位置迁移到另一个位置。如需查看所需的确切权限,请展开所需权限部分:

所需权限

已验证身份的用户必须对存储分区拥有以下 IAM 权限,才能使用此方法:

  • storage.buckets.relocate
  • storage.bucketOperations.get
    您需要拥有此权限才能查看存储分区重定位操作的状态。
  • storage.bucketOperations.list
    您需要拥有此权限才能查看存储分区重新定位操作列表。
  • storage.bucketOperations.cancel
    您需要此权限才能取消存储分区重新定位操作。

经过身份验证的用户可能还需要对存储分区拥有以下权限才能使用此方法:

  • storage.bucket.get
    您需要此权限才能在存储分区重新定位操作的模拟运行增量数据复制期间查看存储分区的元数据。
  • storage.objects.liststorage.objects.get
    您需要拥有这些权限,才能查看要迁移到其他位置的存储分区中的对象列表。

您也可以使用自定义角色来获取这些权限,或者您或许可以使用其他预定义角色来获取这些权限。如需查看哪些角色与哪些权限相关联,请参阅适用于 Cloud Storage 的 IAM 角色

如需了解如何授予项目角色,请参阅管理对项目的访问权限

重新定位存储分区

本部分介绍了使用存储分区迁移功能将 Cloud Storage 存储分区从一个位置迁移到另一个位置的过程。重新定位存储分区时,您需要启动增量数据复制流程、监控该流程,然后启动最终同步步骤。如需详细了解这些步骤,请参阅了解存储分区重新定位流程

执行试运行

为了最大限度地减少存储分区迁移过程中的潜在问题,我们建议您进行模拟运行。模拟运行会模拟存储分区重新定位流程,而无需移动数据,有助于您尽早发现和解决问题。模拟运行会检查以下不兼容性:

虽然模拟运行无法发现所有可能的问题,因为某些问题可能仅会因实时资源可用性等因素而出现在实时迁移期间,但它可以降低在实际迁移期间遇到耗时问题的风险。

命令行

模拟存储分区重新定位的试运行:

gcloud storage buckets relocate gs://BUCKET_NAME --location=LOCATION --dry-run

其中:

  • BUCKET_NAME 是您要重新定位的存储分区的名称。

  • LOCATION 是存储分区的目标位置。

启动模拟运行会启动长时间运行的操作。您会收到操作 ID 和操作说明。如需跟踪模拟运行的完成情况,您需要跟踪其进度。如需了解如何跟踪试运行的进度,请参阅获取长时间运行的操作的详细信息

如果模拟运行发现任何问题,请先解决这些问题,然后再继续执行启动增量数据复制步骤

REST API

JSON API

  1. 安装并初始化 gcloud CLI,以便为 Authorization 标头生成访问令牌。

  2. 创建一个包含存储分区设置的 JSON 文件,其中必须包含 destinationLocationvalidateOnly 参数。如需查看完整的设置列表,请参阅 Buckets: relocate 文档。以下是一些常用的设置,包括:

    {
      "destinationLocation": "DESTINATION_LOCATION",
      "destinationCustomPlacementConfig": {
          "dataLocations": [
            LOCATIONS,
            ...
            ]
        },
      "validateOnly": "true"
    }

    其中:

    • DESTINATION_LOCATION 是存储分区的目标位置。
    • LOCATIONS 是用于可配置的双区域的位置代码列表。
    • validateOnly 设置为 true 以执行试运行。
  3. 使用 cURL 调用 JSON API

    curl -X POST --data-binary @JSON_FILE_NAME \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     "https://storage.googleapis.com/storage/v1/b/bucket=BUCKET_NAME/relocate"

    其中:

    • JSON_FILE_NAME 是您创建的 JSON 文件的名称。
    • BUCKET_NAME 是您要重新定位的存储分区的名称。

发起增量数据复制

命令行

启动存储分区重定位操作:

gcloud storage buckets relocate gs://BUCKET_NAME --location=LOCATION

其中:

  • BUCKET_NAME 是您要重新定位的存储分区的名称。

  • LOCATION 是存储分区的目标位置。

REST API

JSON API

  1. 安装并初始化 gcloud CLI,以便为 Authorization 标头生成访问令牌。

  2. 创建一个包含存储分区设置的 JSON 文件。如需查看完整的设置列表,请参阅 Buckets: relocate 文档。以下是一些常用的设置,包括:

    {
      "destinationLocation": "DESTINATION_LOCATION",
      "destinationCustomPlacementConfig": {
          "dataLocations": [
            LOCATIONS,
            ...
            ]
        },
      "validateOnly": "false"
    }

    其中:

    • DESTINATION_LOCATION 是存储分区的目标位置。
    • LOCATIONS 是用于可配置的双区域的位置代码列表。
    • validateOnly 设置为 false 以启动存储分区重定位的增量数据复制步骤。
  3. 使用 cURL 调用 JSON API

    curl -X POST --data-binary @JSON_FILE_NAME \
     -H "Authorization: Bearer $(gcloud auth print-access-token)" \
     -H "Content-Type: application/json" \
     "https://storage.googleapis.com/storage/v1/b/bucket=BUCKET_NAME/relocate"

    其中:

    • JSON_FILE_NAME 是您创建的 JSON 文件的名称。
    • BUCKET_NAME 是您要重新定位的存储分区的名称。

监控增量数据复制

存储分区迁移过程是一项长时间运行的操作,必须进行监控才能了解其进度。您可以定期查看长时间运行的操作列表,了解增量数据复制步骤的状态。如需了解如何获取长时间运行的操作的详细信息、列出长时间运行的操作或取消长时间运行的操作,请参阅在 Cloud Storage 中使用长时间运行的操作

以下示例显示了增量数据复制操作生成的输出:

done: false
kind: storage#operation
metadata:
'@type': type.googleapis.com/google.storage.control.v2.RelocateBucketMetadata
commonMetadata:
  createTime: '2024-10-21T04:26:59.666Z
  endTime: '2024-12-29T23:39:53.340Z'
  progressPercent: 99
  requestedCancellation: false
  type: relocate-bucket
  updateTime: '2024-10-21T04:27:03.2892'
destinationLocation: US-CENTRAL1
finalizationState: 'READY'
progress:
  byteProgressPercent: 100
  discoveredBytes: 200
  remainingBytes: 0
  discoveredObjectCount: 10
  remainingObjectCount: 8
  objectProgressPercent: 100
  discoveredSyncCount: 8
  remainingSyncCount: 0
  syncProgressPercent: 100
relocationState: SYNCING
sourceLocation: US
validateOnly: false
writeDowntimeExpireTime: '2024-12-30T10:34:01.786Z'
name: projects//buckets/my-bucket1/operations/Bar7-1b0khdew@nhenUQRTF_R-Kk4dQ5V1f8fzezkFcPh3XMvlTqJ6xhnqJ1h_QXFIeAirrEqkjgu4zPKSRD6WSSG5UGXil6w
response:
  '@type': type.googleapis.com/google.storage.control.v2.RelocateBucketResponse
  selfLink: https://storage.googleusercontent.com/storage/v1_ds/b/my-bucket1/operations/Bar7-1b0khdew@nhenUQRTF_R-Kk4dQ5V1f8fzezkFcPh3XMvlTqJ6xhnqJ1h_QXFIeAirrEqkjgu4zPKSRD6WSSG5UGXil6w

下表提供了增量数据复制操作生成的输出中关键字段的相关信息:

字段名称 说明 可能的值
done 表示存储分区重新定位操作已完成。 truefalse
kind 表示此资源代表存储操作。
metadata 提供有关操作的信息。
metadata.@type 将操作类型指示为存储分区重新定位。
metadata.commonMetadata 所有操作通用的元数据。
metadata.commonMetadata.createTime 长时间运行的操作的创建时间。
metadata.commonMetadata.endTime 长时间运行的操作结束的时间。
metadata.commonMetadata.progressPercent 长时间运行的操作的估算进度,以百分比表示。 介于 0100% 之间。值 -1 表示进度未知或不适用。
metadata.commonMetadata.requestedCancellation 指示用户是否已请求取消长时间运行的操作。 truefalse
metadata.commonMetadata.type 表示长时间运行的操作的类型。
metadata.commonMetadata.updateTime 上次更新长时间运行的操作的时间。
metadata.destinationLocation 存储分区的目标位置。
metadata.finalizationState 表示是否可以启动最终同步步骤
  • READY:表示您可以启动最终同步步骤。不过,我们建议您等待 progressPercent 字段的值达到 99
  • WAITING_ON_SYNC:表示您无法启动最终同步步骤。
  • NOT_REQUIRED:表示此存储分区不需要执行最终同步步骤,您可以跳过此步骤。
  • BLOCKED_ON_ERRORS:表示由于出现错误,最终处理步骤暂时暂停。您需要解决错误,才能继续执行此步骤。
  • RUNNING:表示最终处理步骤正在进行中。
  • FINALIZED:表示最终化步骤已成功完成。
metadata.progress 重新定位操作的进度详情。
metadata.progress.byteProgressPercent 复制字节的进度(以百分比表示)。 介于 0100% 之间。值 -1 表示进度未知或不适用。
metadata.progress.discoveredBytes 在来源存储分区中发现的字节数。
metadata.progress.discoveredObjectCount 在来源存储分区中发现的对象数量。
metadata.progress.discoveredSyncCount 在来源存储分区中发现的对象元数据更新数量。
metadata.progress.objectProgressPercent 复制对象的进度(以百分比表示)。 介于 0100% 之间。值 -1 表示进度未知或不适用。
metadata.progress.remainingBytes 从源存储分区复制到目标存储分区的剩余字节数。
metadata.progress.remainingObjectCount 仍需从源存储分区复制到目标存储分区的对象数量。
metadata.progress.remainingSyncCount 剩余待同步的对象元数据更新数量。
metadata.progress.syncProgressPercent 要同步的对象元数据更新进度(以百分比表示)。 介于 0100% 之间。值 -1 表示进度未知或不适用。
metadata.relocationState 存储分区重定位的整体状态
  • SYNCING:表示增量数据复制步骤正在主动将对象从源存储分区复制到目标存储分区。
  • FINALIZING:表示已启动最终处理步骤。
  • FAILED:表示增量数据复制步骤遇到错误,未成功完成。
  • SUCCEEDED:表示增量数据复制步骤已成功完成。
  • CANCELLED:表示增量数据复制步骤已取消。
metadata.sourceLocation 存储分区的来源位置。
metadata.validateOnly 指示是否已启动存储分区重新定位的模拟运行 truefalse
metadata.writeDowntimeExpireTime 写入停机时间的到期时间。
name 此重新定位操作的唯一标识符。
格式:projects/_/buckets/bucket-name/operations/operation-id
response 操作的响应。
response.@type 响应的类型。
selfLink 指向此操作的链接。

由于存在限制,您在与其他 Cloud Storage 功能交互时可能会遇到问题。如需详细了解限制,请参阅限制

发起最终同步步骤

在最终同步步骤期间,您将无法对存储分区执行写入操作。我们建议您将最终同步步骤安排在尽可能减少对应用中断的时间。

在继续操作之前,请检查监控增量数据复制流程步骤的输出中的 finalizationState 值,确认该存储分区已完全准备就绪。finalizationState 值必须为 READY,才能继续执行最终同步步骤。

如果您过早启动最终同步步骤,该命令会返回错误消息 The relocate bucket operation is not ready to advance to finalization running state,但重新定位过程会继续。

建议您等到 progressPercent 值为 99 后再启动最终同步步骤。

命令行

finalizationState 值为 READY 时,启动存储分区迁移操作的最终同步步骤:

gcloud storage buckets relocate --finalize --operation=projects/_/buckets/BUCKET_NAME/operations/OPERATION_ID

其中:

  • BUCKET_NAME 是您要重新定位的存储分区的名称。
  • OPERATION_ID 是长时间运行的操作的 ID,该 ID 会在您调用的方法的响应中返回。例如,调用 gcloud storage operations list 会返回以下响应,长时间运行的操作 ID 为 AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74
 `name: projects/_/buckets/my-bucket/operations/AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74` 

设置 ttl 标志,以便更好地控制重新定位过程。例如:

gcloud storage buckets relocate --finalize --ttl TTL_DURATION --operation=projects/_/buckets/BUCKET_NAME/operations/OPERATION_ID

其中:

TTL_DURATION 是重定位过程中写入停机阶段的存留时间 (TTL)。它以字符串表示,例如 12h 表示 12 小时。TTL_DURATION 用于确定写入停机阶段的允许时长上限。如果写入停机时间超过此限制,则重新配置过程会自动还原为增量复制步骤,并重新启用对存储分区的写入操作。该值必须介于 6h(6 小时)到 48h(48 小时)之间。如果未指定,则默认值为 12h(12 小时)。

REST API

JSON API

  1. 安装并初始化 gcloud CLI,以便为 Authorization 标头生成访问令牌。

  2. 创建一个包含存储分区重新定位设置的 JSON 文件。如需查看完整的设置列表,请参阅 Buckets: advanceRelocateBucket 文档。以下是一些常用的设置,包括:

    {
        "expireTime": "EXPIRE_TIME",
        "ttl": "TTL_DURATION"
    }

    其中:

    • EXPIRE_TIME 是写入停机时间的到期时间。
    • TTL_DURATION 是重定位过程中写入停机阶段的存留时间 (TTL)。它以字符串表示,例如 12h 表示 12 小时。TTL_DURATION 用于确定写入停机阶段的允许时长上限。如果写入停机时间超过此限制,则重新配置过程会自动还原为增量复制步骤,并重新启用对存储分区的写入操作。该值必须介于 6h(6 小时)到 48h(48 小时)之间。如果未指定,则默认值为 12h(12 小时)。
  3. 使用 cURL 调用 JSON API

    curl -X POST --data-binary @JSON_FILE_NAME \
      -H "Authorization: Bearer $(gcloud auth print-access-token)" \
      -H "Content-Type: application/json" \
      "https://storage.googleapis.com/storage/v1/b/bucket/BUCKET_NAME/operations/OPERATION_ID/advanceRelocateBucket"

    其中:

    • JSON_FILE_NAME 是您创建的 JSON 文件的名称。
    • BUCKET_NAME 是您要重新定位的存储分区的名称。
    • OPERATION_ID 是长时间运行的操作的 ID,该 ID 会在您调用的方法的响应中返回。例如,调用 Operations: list 会返回以下响应,长时间运行的操作 ID 为 AbCJYd8jKT1n-Ciw1LCNXIcubwvij_TdqO-ZFjuF2YntK0r74

验证存储分区重新定位过程

发起重新定位后,请验证其是否成功完成。本部分提供了有关如何确认数据传输是否成功的指南。

使用以下方法验证重新定位过程是否成功:

  • 轮询长时间运行的操作:存储分区重新定位是一项长时间运行的操作。您可以使用 operation id 轮询长时间运行的操作,以监控操作的进度,并通过验证 success 状态来确认其是否已成功完成。这涉及定期查询操作的状态,直到其达到终止状态。如需了解如何监控长时间运行的操作,请参阅在 Cloud Storage 中使用长时间运行的操作

  • 分析 Cloud Audit Logs 条目:Cloud Audit Logs 会详细记录环境中的事件和操作。 Google Cloud 您可以分析与迁移相关联的 Cloud Audit Logs 条目,以验证迁移是否成功。分析日志,找出可能表明转移期间存在问题的任何错误、警告或意外行为。如需了解如何查看 Cloud Audit Logs 日志,请参阅查看审核日志

    以下日志条目可帮助您确定迁移是成功还是失败:

    • 成功重新定位:Relocate bucket succeeded. All existing objects are now in the new placement configuration.

    • 重新定位失败:Relocate bucket has failed. Bucket location remains unchanged.

    您还可以使用 Pub/Sub 通知设置提醒,以便在日志中出现特定成功或失败事件时收到通知。如需了解如何设置 Pub/Sub 通知,请参阅配置适用于 Cloud Storage 的 Pub/Sub 通知

完成存储分区迁移后任务

成功迁移存储分区后,请完成以下步骤:

  1. 可选:恢复存储分区上的所有基于标记的访问权限控制。
  2. 现有的商品目录报告配置不会在迁移过程中保留,您需要手动重新创建这些配置。如需了解如何创建清单报告配置,请参阅创建清单报告配置
  3. 更新您的基础架构即代码配置(例如 Terraform 和 Google Kubernetes Engine 配置连接器),以指定存储分区的新位置。
  4. 区域性端点与特定位置相关联,您需要修改应用代码以反映新的端点。

如何处理失败的存储分区重新定位操作

在处理失败的存储分区重新定位操作之前,请考虑以下因素:

  • 存储分区重新定位失败可能会在目标位置留下过时资源(例如临时文件或不完整的数据副本)。您必须等待 7 到 14 天,才能再次将存储分区迁移到同一目标位置。您可以立即发起将存储分区迁移到其他目的地的操作。

  • 如果目标位置不是数据的最佳位置,您可能需要回滚重新定位。不过,您无法立即发起重新定位。您需要等待最多 14 天,才能再次发起重新定位流程。此限制是为了确保稳定性并防止数据冲突。

后续步骤