本页介绍了如何在 Spanner 中移动实例。
您可以将 Spanner 实例从任何实例配置移至任何其他实例配置,包括单区域、双区域和多区域配置之间。移动实例不会导致停机,并且 Spanner 会在移动过程中继续提供常规事务保证,包括强一致性。
您还可以将实例从其源实例配置移至自定义实例配置(例如,包含 us-west2
只读副本的 nam3
基础配置)。由于您无法更新现有实例配置的拓扑,因此您需要先创建具有所需拓扑的新自定义实例配置。创建新的自定义实例配置后,您可以将实例从源实例配置移至新的自定义实例配置。
为什么要迁移 Spanner 实例?
迁移实例的好处包括:
- 提高可用性:从单区域迁移到双区域或多区域后,可实现 99.999% 的可用性和零停机时间。
- 缩短延迟时间:通过将单区域位置改为双区域或多区域位置,或将多区域位置改为多区域位置,添加只读副本,从而缩短延迟时间并扩大地理覆盖范围。
- 降低费用:从双区域或多区域配置改为区域配置,从而降低每小时费用。
- 共置数据库:通过将实例移至更优化的位置,将 Spanner 数据库与客户端应用共置。
价格
迁移实例时,源实例配置和目标实例配置都需要按小时支付计算和存储费用。迁移完成后,您需要按目标配置的实例存储空间付费。
如果您将实例迁移到新的单区域、双区域或多区域实例配置,则可能会产生出站数据传输费用。如需了解详情,请参阅 Spanner 价格。
限制
- 如需移动实例,其必须至少有 1 个节点(1, 000 个处理单元)。
- 您无法在项目和 Google Cloud 账号之间移动实例。
- 您无法将使用标准版的实例直接从单区域实例配置移至双区域或多区域实例配置。您必须先将实例的版本升级到企业 Plus 版,然后再移动实例。
- 您无法移动 Spanner 免费试用实例。您可以在升级到付费实例后移动实例。
- 如果您在任何实例资源上有使用区域性服务端点的有效请求,则实例迁移会影响使用该区域性端点的所有请求,因为区域性强制执行会阻止访问跨区域实例。使用全球端点的请求不受影响。
- Spanner 备份特定于实例配置,并且在移动实例时不包含在内。如需了解详情,请参阅备份。
- 在实例迁移期间,以下 API 会被停用:
InstanceAdmin.DeleteInstance
InstanceAdmin.UpdateInstance
DatabaseAdmin.CreateDatabase
DatabaseAdmin.UpdateDatabaseDdl
(如果请求中指定了default_leader
,则处于停用状态。)DatabaseAdmin.RestoreDatabase
DatabaseAdmin.CreateBackup
DatabaseAdmin.CreateBackupSchedule
DatabaseAdmin.CopyBackup
- 您无法移动包含任何启用了 CMEK 的数据库的实例。
- 如果数据库具有经过修改的默认主副本,并且在目标实例配置中指定了读写区域且该配置是多区域配置,则系统会保留该选择。如果目标配置是区域性配置,或者不包含命名的读写区域,系统会清除默认主副本选择。
- 移动实例会更改实例的“实例配置”属性。如果您通过自动化方式管理 Spanner 资源,请务必做好准备,并解决可能出现的任何不一致问题。
- 例如,如果您使用 Terraform 管理 Spanner 实例和数据库,并启用
terraform apply --auto-approve
以保持资源同步,那么当我们移动实例时,所有实例和子资源都会被删除。请相应地更新配置,以免被删除和数据丢失。如需详细了解apply
命令,请参阅 Terraform 应用选项。
- 例如,如果您使用 Terraform 管理 Spanner 实例和数据库,并启用
- 在实例迁移期间,Spanner 监控指标和图表可能会同时显示源实例配置和目标实例配置中的数据,也可能会仅反映一个实例配置中的性能。
- 如果您已配置开源自动扩缩工具,则无需将其停用。失败的原因是
InstanceAdmin.UpdateInstance
(用于更改节点和处理单元)已停用。 如果实例启用了 Spanner 托管的自动扩缩器功能,则无法移动该实例。如需移动实例,您需要停用托管式自动扩缩器,移动实例,然后重新启用托管式自动扩缩器。
此外,如果您使用的是自动扩缩,则必须根据所述的最大建议预配足够的节点来应对 CPU 使用率高峰,然后在移动实例之前停用自动扩缩。
性能考虑因素
移动实例时,实例的读写延迟时间较长,事务中止率也较高。由于实例迁移是使用用户预配的备用 CPU 执行的,因此迁移期间的 CPU 利用率可能会高达 100%。不过,移动实例不会导致任何停机。实例迁移所需的时间取决于各种因素,包括数据库的大小、节点数量以及迁移类型(例如,从区域性迁移到多区域性)。
移动实例后,实例的性能将因实例配置的详细信息而异。例如,双区域和多区域配置通常比单区域配置具有更高的写入延迟和更低的读取延迟。
备份
移动实例时,源实例中的备份不会自动移至新的目标配置。如果您在启动实例迁移时源实例配置中存在备份,则系统会中止实例迁移。请务必先复制备份并考虑数据恢复计划,然后再移动实例。
如果源实例中有您需要保留的备份,我们建议您将备份复制到目标实例配置以及与要移动的源实例具有相同实例配置的另一个实例。这样做是为了:
- 实例迁移完成后,您可以立即将备份复制到目标实例配置。
- 如果您需要取消实例迁移,还可以从与源实例配置相同的配置的实例中快速恢复备份。
将备份复制到其他实例后,您必须先删除源实例中的所有现有备份,然后才能移动该实例。然后,实例迁移完成后,您在目标配置中就会有备份的副本。您也可以创建新的备份。
如需详细了解如何复制备份以及相关费用,请参阅复制备份。
如何移动实例
您可以使用 Google Cloud 控制台 Cloud Shell 和 gcloud CLI 中的 gcloud
命令来移动实例。
前提条件
在移动实例配置之前,请务必阅读限制和性能注意事项部分。然后,请按以下步骤操作:
- 检查您是否在源实例上拥有
spanner.instances.update
IAM 权限。 - 在迁移生产实例之前,请先迁移非生产实例(例如测试和预演实例),以帮助评估和了解实例迁移对工作负载的性能影响。
- 当您移动 Spanner 实例时,移动流程会删除您在 Data Catalog 中创建的实例标记。如需保留代码,您需要在迁移前导出代码,并在迁移后导入代码。如需了解详情,请参阅导出和导入代码。
如需了解最佳实践,请遵循以下准则:
- 在迁移生产实例之前,请先在目标实例配置中的非生产实例中测试性能工作负载。尝试移动与生产实例类似的预演实例,以了解移动生产实例需要多长时间。
- 使用 Key Visualizer 检查数据库中是否存在热点。
- 请检查以确保目标实例配置中有足够的节点配额来支持实例的预期高峰使用情况。如需了解详情,请参阅 Spanner 配额和限制。
- 确保您迁移的实例配置的实例CPU 利用率峰值低于 40%,并且每个节点的存储空间量低于 1 兆字节 (TiB)。
- 请勿在迁移过程中更改实例。这包括更改实例节点数、更改数据库架构、创建或删除数据库以及创建或删除备份。
如果您根据这些建议移动实例,迁移通常会在 24 小时内完成。不过,具体完成时间可能会因应用工作负载而异。
移动实例
Google Cloud 控制台
点击 Google Cloud 控制台顶部的 Activate Cloud Shell。
一个 Cloud Shell 会话随即会在 Google Cloud 控制台底部的新框内打开,并显示命令行提示符。该会话可能需要几秒钟来完成初始化。
使用
gcloud spanner instances move
命令移动实例。gcloud spanner instances move INSTANCE_ID \ --target-config=TARGET_CONFIG
替换以下内容:
- INSTANCE_ID:要迁移的实例的永久性标识符。
- TARGET_CONFIG:您要将实例迁移到的目标实例配置的永久性标识符。实例的新地理位置。这可以是单区域、双区域、多区域或自定义实例配置(例如
nam3
、us-central1
或custom-nam3-us-west2
)。
例如,如需将实例 test-instance
从其当前实例配置移至 nam3
,请运行以下命令:
gcloud spanner instances move test-instance --target-config=nam3
可选:如果您想向基础实例配置 nam3
添加只读副本 us-west2
,请执行以下操作:
克隆基本配置并添加只读副本:
gcloud spanner instance-configs create custom-nam3-us-west2 \ --clone-config=nam3 --add-replicas=location=us-west2, type=READ_ONLY
将实例
test-instance
从其当前实例配置移至此新的custom-nam3-us-west2
实例配置:gcloud spanner instances move test-instance --target-config=custom-nam3-us-west2
gcloud CLI
使用 gcloud spanner instances move
命令移动实例。
gcloud spanner instances move INSTANCE_ID \
--target-config=TARGET_CONFIG
替换以下内容:
- INSTANCE_ID:要迁移的实例的永久性标识符。
- TARGET_CONFIG:您要将实例迁移到的目标实例配置的永久性标识符。实例的新地理位置。这可以是单区域、双区域或多区域实例配置(例如
nam3
、us-central1
或custom-nam3-us-west2
)。
例如,如需将实例 test-instance
从其当前实例配置移至 nam3
,请运行以下命令:
gcloud spanner instances move test-instance --target-config=nam3
可选:如果您想向基础实例配置 nam3
添加只读副本 us-west2
,请执行以下操作:
克隆基本配置并添加只读副本:
gcloud spanner instance-configs create custom-nam3-us-west2 \ --clone-config=nam3 --add-replicas=location=us-west2, type=READ_ONLY
将实例
test-instance
从其当前实例配置移至此新的custom-nam3-us-west2
实例配置:gcloud spanner instances move test-instance --target-config=custom-nam3-us-west2
如何监控实例迁移和取消进度
您可以使用 gcloud spanner operations describe
或创建自定义 Cloud Monitoring 信息中心来监控实例迁移的进度。
查看迁移和取消操作进度
如需跟踪实例迁移或实例迁移取消操作的进度,请使用 gcloud spanner operations describe
命令。此命令需要提供正在进行的实例迁移操作的操作 ID。
运行以下命令可获取实例迁移操作的操作 ID:
gcloud spanner operations list --instance="INSTANCE_ID"
替换以下内容:
- INSTANCE_ID:要迁移的实例的永久性标识符。
输出显示了长时间运行的操作的列表,包括实例迁移操作。
运行
gcloud spanner operations describe
命令可查看进度百分比和状态:gcloud spanner operations describe OPERATION_ID --instance=INSTANCE_ID
替换以下内容:
- OPERATION_ID:您要检查的实例迁移操作的操作 ID。
- INSTANCE_ID:要检查的实例的 ID。
监控实例迁移操作
您可以创建自定义 Cloud Monitoring 信息中心,以便在实例迁移期间显示和监控指标。实例迁移是一项可能影响服务的长时间运行的操作。
信息中心中的总存储空间和按数据库划分的数据库总存储空间图表有助于监控迁移进度。您会看到源配置中的存储空间逐渐减少,而目标配置中的存储空间逐渐增加。
Google Cloud 控制台
- 下载
move-instance-dashboard.json
文件。此文件包含在“监控”中填充自定义信息中心所需的信息。 -
在 Google Cloud 控制台中,前往 信息中心页面:
如果您使用搜索栏查找此页面,请选择子标题为监控的结果。
- 在信息中心概览页面中,点击创建信息中心。
- 在信息中心工具栏中,点击信息中心设置下拉菜单。然后,依次选择 JSON 和 JSON 编辑器。
- 在 JSON 编辑器窗格中,复制您下载的
move-instance-dashboard.json
文件的内容,并将其粘贴到编辑器中。 - 如需将更改应用于信息中心,请点击应用更改。如果您不想使用此信息中心,请返回“信息中心概览”页面。
- 创建信息中心后,点击添加过滤条件。然后,选择
project_id
或instance_id
以监控实例迁移的进度。
gcloud CLI
- 下载
move-instance-dashboard.json
文件。此文件包含在“监控”中填充自定义信息中心所需的信息。 如需在项目中创建信息中心,请使用
gcloud monitoring dashboards create
命令:gcloud monitoring dashboards create --config-from-file=move-instance-dashboard.json
如需了解详情,请参阅
gcloud monitoring dashboards create
参考文档。
如何取消实例迁移
您只能取消仍在进行的实例迁移。如果您想还原已完成的实例迁移,则必须启动新的迁移。
您可以使用 gcloud spanner operations cancel
取消实例迁移操作。取消操作并非瞬间完成,所需时间与移动开始后经过的时间大致相同。这是因为数据必须移回源实例配置。
此命令需要提供正在进行的实例迁移操作的操作 ID。
运行以下命令以获取操作 ID:
gcloud spanner operations list --type=INSTANCE --instance="INSTANCE_ID" --filter="done:False AND metadata.@type:MoveInstanceMetadata
替换以下内容:
- INSTANCE_ID:要迁移的实例的永久性标识符。
输出会显示正在进行的实例迁移操作的列表。
运行
gcloud spanner operations cancel
命令可取消实例迁移:gcloud spanner operations cancel OPERATION_ID
替换以下内容:
- OPERATION_ID:您要取消的实例迁移操作的操作 ID。
后续步骤
- 详细了解 Spanner 的区域、双区域和多区域配置。
- 详细了解 Google Cloud 区域和可用区。