本页介绍了如何将存储分区从一个位置迁移到另一个位置。如需了解存储分区重定位,请参阅存储分区重定位。
准备工作
在启动存储分区重新定位流程之前,请完成以下步骤:
查看配额和限制,确保新位置有足够的配额来容纳存储分区中的数据。
确定存储分区重新定位类型,以了解是否需要写入停机时间。
如果您使用资产清单报告,请保存您的配置。
所需的角色
如需获得将存储分区从一个位置迁移到另一个位置的权限,请让管理员为您授予项目的 Storage Admin (roles/storage.admin
) 角色。
此角色提供了一组权限,可让您将存储分区从一个位置迁移到另一个位置。如需查看所需的确切权限,请展开所需权限部分:
所需权限
已验证身份的用户必须对存储分区拥有以下 IAM 权限,才能使用此方法:
storage.buckets.relocate
storage.bucketOperations.get
您需要拥有此权限才能查看存储分区重定位操作的状态。storage.bucketOperations.list
您需要拥有此权限才能查看存储分区重新定位操作列表。storage.bucketOperations.cancel
您需要此权限才能取消存储分区重新定位操作。
经过身份验证的用户可能还需要对存储分区拥有以下权限才能使用此方法:
您也可以使用自定义角色来获取这些权限,或者您或许可以使用其他预定义角色来获取这些权限。如需查看哪些角色与哪些权限相关联,请参阅适用于 Cloud Storage 的 IAM 角色。
如需了解如何授予项目角色,请参阅管理对项目的访问权限。
重新定位存储分区
本部分介绍了使用存储分区迁移功能将 Cloud Storage 存储分区从一个位置迁移到另一个位置的过程。重新定位存储分区时,您需要启动增量数据复制流程、监控该流程,然后启动最终同步步骤。如需详细了解这些步骤,请参阅了解存储分区重新定位流程。
执行试运行
为了最大限度地减少存储分区迁移过程中的潜在问题,我们建议您进行模拟运行。模拟运行会模拟存储分区重新定位流程,而无需移动数据,有助于您尽早发现和解决问题。模拟运行会检查以下不兼容性:
- 客户管理的加密密钥 (CMEK) 或客户提供的加密密钥 (CSEK)
- 已锁定的保留政策
- 暂时保全的对象
- 分段上传
虽然模拟运行无法发现所有可能的问题,因为某些问题可能仅会因实时资源可用性等因素而出现在实时迁移期间,但它可以降低在实际迁移期间遇到耗时问题的风险。
命令行
模拟存储分区重新定位的试运行:
gcloud storage buckets relocate gs://BUCKET_NAME --location=LOCATION --dry-run
其中:
BUCKET_NAME
是您要重新定位的存储分区的名称。LOCATION
是存储分区的目标位置。
启动模拟运行会启动长时间运行的操作。您会收到操作 ID 和操作说明。如需跟踪模拟运行的完成情况,您需要跟踪其进度。如需了解如何跟踪试运行的进度,请参阅获取长时间运行的操作的详细信息。
如果模拟运行发现任何问题,请先解决这些问题,然后再继续执行启动增量数据复制步骤。
REST API
JSON API
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。创建一个包含存储分区设置的 JSON 文件,其中必须包含
destinationLocation
和validateOnly
参数。如需查看完整的设置列表,请参阅Buckets: relocate
文档。以下是一些常用的设置,包括:{ "destinationLocation": "DESTINATION_LOCATION", "destinationCustomPlacementConfig": { "dataLocations": [ LOCATIONS, ... ] }, "validateOnly": "true" }
其中:
DESTINATION_LOCATION
是存储分区的目标位置。LOCATIONS
是用于可配置的双区域的位置代码列表。- 将
validateOnly
设置为true
以执行试运行。
-
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
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。创建一个包含存储分区设置的 JSON 文件。如需查看完整的设置列表,请参阅
Buckets: relocate
文档。以下是一些常用的设置,包括:{ "destinationLocation": "DESTINATION_LOCATION", "destinationCustomPlacementConfig": { "dataLocations": [ LOCATIONS, ... ] }, "validateOnly": "false" }
其中:
DESTINATION_LOCATION
是存储分区的目标位置。LOCATIONS
是用于可配置的双区域的位置代码列表。- 将
validateOnly
设置为false
以启动存储分区重定位的增量数据复制步骤。
-
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 |
表示存储分区重新定位操作已完成。 | true ,false |
kind |
表示此资源代表存储操作。 | |
metadata |
提供有关操作的信息。 | |
metadata.@type |
将操作类型指示为存储分区重新定位。 | |
metadata.commonMetadata |
所有操作通用的元数据。 | |
metadata.commonMetadata.createTime |
长时间运行的操作的创建时间。 | |
metadata.commonMetadata.endTime |
长时间运行的操作结束的时间。 | |
metadata.commonMetadata.progressPercent |
长时间运行的操作的估算进度,以百分比表示。 | 介于 0 到 100 % 之间。值 -1 表示进度未知或不适用。 |
metadata.commonMetadata.requestedCancellation |
指示用户是否已请求取消长时间运行的操作。 | true ,false |
metadata.commonMetadata.type |
表示长时间运行的操作的类型。 | |
metadata.commonMetadata.updateTime |
上次更新长时间运行的操作的时间。 | |
metadata.destinationLocation |
存储分区的目标位置。 | |
metadata.finalizationState |
表示是否可以启动最终同步步骤。 |
|
metadata.progress |
重新定位操作的进度详情。 | |
metadata.progress.byteProgressPercent |
复制字节的进度(以百分比表示)。 | 介于 0 到 100 % 之间。值 -1 表示进度未知或不适用。 |
metadata.progress.discoveredBytes |
在来源存储分区中发现的字节数。 | |
metadata.progress.discoveredObjectCount |
在来源存储分区中发现的对象数量。 | |
metadata.progress.discoveredSyncCount |
在来源存储分区中发现的对象元数据更新数量。 | |
metadata.progress.objectProgressPercent |
复制对象的进度(以百分比表示)。 | 介于 0 到 100 % 之间。值 -1 表示进度未知或不适用。 |
metadata.progress.remainingBytes |
从源存储分区复制到目标存储分区的剩余字节数。 | |
metadata.progress.remainingObjectCount |
仍需从源存储分区复制到目标存储分区的对象数量。 | |
metadata.progress.remainingSyncCount |
剩余待同步的对象元数据更新数量。 | |
metadata.progress.syncProgressPercent |
要同步的对象元数据更新进度(以百分比表示)。 | 介于 0 到 100 % 之间。值 -1 表示进度未知或不适用。 |
metadata.relocationState |
存储分区重定位的整体状态 |
|
metadata.sourceLocation |
存储分区的来源位置。 | |
metadata.validateOnly |
指示是否已启动存储分区重新定位的模拟运行。 | true ,false |
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
安装并初始化 gcloud CLI,以便为
Authorization
标头生成访问令牌。创建一个包含存储分区重新定位设置的 JSON 文件。如需查看完整的设置列表,请参阅
Buckets: advanceRelocateBucket
文档。以下是一些常用的设置,包括:{ "expireTime": "EXPIRE_TIME", "ttl": "TTL_DURATION" }
其中:
EXPIRE_TIME
是写入停机时间的到期时间。TTL_DURATION
是重定位过程中写入停机阶段的存留时间 (TTL)。它以字符串表示,例如12h
表示 12 小时。TTL_DURATION
用于确定写入停机阶段的允许时长上限。如果写入停机时间超过此限制,则重新配置过程会自动还原为增量复制步骤,并重新启用对存储分区的写入操作。该值必须介于6h
(6 小时)到48h
(48 小时)之间。如果未指定,则默认值为12h
(12 小时)。
-
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 通知。
完成存储分区迁移后任务
成功迁移存储分区后,请完成以下步骤:
- 可选:恢复存储分区上的所有基于标记的访问权限控制。
- 现有的商品目录报告配置不会在迁移过程中保留,您需要手动重新创建这些配置。如需了解如何创建清单报告配置,请参阅创建清单报告配置。
- 更新您的基础架构即代码配置(例如 Terraform 和 Google Kubernetes Engine 配置连接器),以指定存储分区的新位置。
- 区域性端点与特定位置相关联,您需要修改应用代码以反映新的端点。
如何处理失败的存储分区重新定位操作
在处理失败的存储分区重新定位操作之前,请考虑以下因素:
存储分区重新定位失败可能会在目标位置留下过时资源(例如临时文件或不完整的数据副本)。您必须等待 7 到 14 天,才能再次将存储分区迁移到同一目标位置。您可以立即发起将存储分区迁移到其他目的地的操作。
如果目标位置不是数据的最佳位置,您可能需要回滚重新定位。不过,您无法立即发起重新定位。您需要等待最多 14 天,才能再次发起重新定位流程。此限制是为了确保稳定性并防止数据冲突。
后续步骤
- 了解存储分区重定位。