移动实例

本页面介绍了如何在 Spanner 中移动实例。

您可以将 Spanner 实例从任何实例配置迁移到任何其他实例配置,包括在单区域配置和多区域配置之间。移动实例不会导致停机,并且 Spanner 会在移动过程中继续提供常规事务保证,包括强一致性。

您还可以将实例从其源实例配置移至自定义实例配置(例如,具有 us-west2 只读副本的 nam3 基本配置)。由于无法更新现有实例配置的拓扑,因此您需要先使用所需的拓扑创建新的自定义实例配置。创建新的自定义实例配置后,您可以将实例从源实例配置迁移到新的自定义实例配置。

为什么要迁移 Spanner 实例?

移动实例的好处包括:

  • 提高可用性:在执行单区域到多区域迁移后,可实现 99.999% 的可用性且没有停机。
  • 减少延迟:通过单区域到多区域或多区域到多区域迁移,利用更多的只读副本来缩短延迟时间并扩大地理覆盖范围。
  • 降低费用:通过从多区域配置迁移到单区域配置来降低每小时费用。
  • 共置数据库:通过将实例移动到更优化的位置,使 Spanner 数据库与客户端应用共置。

价格

移动实例时,源实例和目标实例配置均需支付每小时的计算和存储费用。 移动完成后,您需要为目标配置处的实例存储空间付费。

如果您要将实例迁移到新的单区域或多区域实例配置,则可能需要支付出站数据传输费用。如需了解详情,请参阅 Spanner 价格

限制

  • 如需移动实例,实例必须至少有 1 个节点(1000 个处理单元)
  • 您无法跨项目和 Google Cloud 账号迁移实例。
  • 您无法迁移 Spanner 免费试用实例。您可以在升级到付费实例后迁移实例。
  • 如果您在任何实例资源上使用区域服务端点的活动请求,则实例移动会影响使用区域端点的所有请求,因为区域强制执行会阻止对跨区域实例的访问。使用全球端点的请求不受影响。
  • Spanner 备份特定于实例配置,在移动实例时不包含。如需了解详情,请参阅备份
  • 在实例移动期间,以下 API 会停用:
    • InstanceAdmin.DeleteInstance
    • InstanceAdmin.UpdateInstance
    • DatabaseAdmin.CreateDatabase
    • DatabaseAdmin.UpdateDatabaseDdl(如果在请求中指定了 default_leader,则已停用。)
    • DatabaseAdmin.RestoreDatabase
    • DatabaseAdmin.CreateBackup
    • DatabaseAdmin.CopyBackup
  • 您不能移动包含任何启用了 CMEK 的数据库的实例。
  • 如果数据库具有修改后的默认主要副本,且在目标实例配置中指定了读写区域,并且该配置是多区域配置,则系统会保留选择。如果目标配置是区域级的,或者不包含指定的读写区域,则系统会清除默认主要区域选择。
  • 移动实例会更改实例的实例配置属性。如果您通过自动化功能管理 Spanner 资源,请务必准备并解决任何可能出现的不一致问题。
    • 例如,如果您使用 Terraform 管理 Spanner 实例和数据库,并且启用了 terraform apply --auto-approve 来使资源保持同步,那么当我们移动实例时,所有实例和子资源都会被删除。相应地更新配置,以免被删除和数据丢失。如需详细了解 apply 命令,请参阅 Terraform Apply Options
  • 移动实例时,Spanner 监控指标和图表可能会同时显示源实例配置和目标实例配置中的数据,也可能只反映一种实例配置下的性能。
  • 如果您已配置开源自动扩缩器工具,则无需停用该工具。它会失败,因为 InstanceAdmin.UpdateInstance(用于节点和处理单元更改)已停用。
  • 如果实例启用了 Spanner 代管式自动扩缩器功能,您将无法移动该实例。如需移动实例,您需要停用代管式自动扩缩器,移动实例,然后重新启用代管式自动扩缩器。

    此外,如果您使用自动扩缩,则必须根据记录的最大建议配置足够的节点以应对 CPU 峰值用量,然后在移动实例之前停用自动扩缩功能。

性能考虑因素

移动实例时,会遇到更高的读写延迟时间和更高的事务中止率。移动期间的 CPU 利用率可能上升到 100%,因为实例移动是使用用户预配的备用 CPU 执行的。但是,移动实例不会导致任何停机。移动实例所需的时间取决于各种因素,包括数据库的大小、节点数和移动类型(例如,从单区域迁移到多区域)。

移动实例后,实例的性能会因实例配置的详细信息而异。例如,与单区域配置相比,多区域配置通常具有更高的写入延迟和更低的读取延迟。

备份

移动实例时,源实例中的备份不会自动迁移到新的目标配置。如果启动实例移动时源实例配置中存在备份,则实例移动将被取消。在移动实例之前,请务必复制备份并考虑数据恢复方案

如果需要保留源实例中的备份,我们建议您复制备份到目标实例配置,以及与要移动的源实例具有相同实例配置的其他实例。如此一来:

  • 实例移动完成后,您可以立即将备份复制到目标实例配置。
  • 如果需要取消实例移动,您还可以使用与源实例配置相同的配置从实例快速恢复备份。

将备份复制到另一个实例后,您必须先删除源实例中的所有现有备份,然后才能移动该实例。然后,在实例移动完成后,您在目标配置中已经拥有备份的副本。您也可以创建新的备份

如需详细了解如何复制备份和相关费用,请参阅复制备份

如何移动实例

您可以使用 gcloud 命令通过 Google Cloud 控制台 Cloud Shell 和 gcloud CLI 移动实例。

前提条件

在迁移实例配置之前,请确保您已阅读限制性能注意事项部分。然后,请按以下步骤操作:

  1. 检查您是否拥有对源实例的 spanner.instances.update IAM 权限
  2. 如果适用,请先移动非生产实例(如测试实例和预演实例),然后再移动生产实例,这有助于评估和了解实例迁移期间对工作负载的性能影响。
  3. 移动 Spanner 实例时,移动进程会删除您在 Data Catalog 中创建的实例标记。要保留代码,您需要在移动前导出代码,在移动后导入代码。如需了解详情,请参阅导出和导入代码

对于最佳实践,还应遵循以下准则:

  • 在移动生产实例之前,在目标实例配置中���试非生产实例中的性能工作负载。尝试移动与生产实例类似的预演实例,以便了解移动生产实例需要多长时间。
  • 使用 Key Visualizer 检查您的数据库中是否存在热点。
  • 检查以确保目标实例配置中有足够的节点配额,以支持实例的预期峰值使用量。如需了解详情,请参阅 Spanner 配额和限制
  • 对于您移动的实例配置,请确保实例的峰值 CPU 利用率低于 40%,并且每个节点的存储空间量小于 1 TiB。
  • 请勿在移动期间对实例进行更改。这包括更改实例节点数、更改数据库架构、创建或修改数据库以及创建或删除备份。

如果您根据这些建议移动实例,则移动通常会在 24 小时内完成。但是,完成时间可能会更长或更短,具体取决于应用工作负载。

移动实例

Google Cloud 控制台

  1. 点击 Google Cloud 控制台顶部的 激活 Cloud Shell 图标 激活 Cloud Shell

    一个 Cloud Shell 会话随即会在 Google Cloud 控制台底部的新框内打开,并显示命令行提示符。 该会话可能需要几秒钟来完成初始化。

  2. 使用 gcloud spanner instances move 命令移动实例。

    gcloud spanner instances move INSTANCE_ID \
    --target-config=TARGET_CONFIG
    

    请替换以下内容:

    • INSTANCE_ID:您要移动的实例的永久性标识符。
    • TARGET_CONFIG:要将实例移至的目标实例的永久性标识符。实例的新地理位置。这可以是单区域、多区域或自定义实例配置(例如 nam3us-central1custom-nam3-us-west2)。

例如,如需将实例 test-instance 从其当前实例配置移至 nam3,请运行以下命令:

  gcloud spanner instances move test-instance --target-config=nam3

可选:如果要将只读副本 us-west2 添加到基本实例配置 nam3 中,请执行以下操作:

  1. 克隆基本配置并添加只读副本:

    gcloud spanner instance-configs create custom-nam3-us-west2 \
    --clone-config=nam3 --add-replicas=location=us-west2, type=READ_ONLY
    
  2. 将您的实例 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:要将实例移至的目标实例的永久性标识符。实例的新地理位置。这可以是单区域或多区域实例配置(例如 nam3us-central1custom-nam3-us-west2)。

例如,如需将实例 test-instance 从其当前实例配置移至 nam3,请运行以下命令:

  gcloud spanner instances move test-instance --target-config=nam3

可选:如果要将只读副本 us-west2 添加到基本实例配置 nam3 中,请执行以下操作:

  1. 克隆基本配置并添加只读副本:

    gcloud spanner instance-configs create custom-nam3-us-west2 \
    --clone-config=nam3 --add-replicas=location=us-west2, type=READ_ONLY
    
  2. 将您的实例 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。

  1. 通过运行以下命令获取实例移动操作的操作 ID:

    gcloud spanner operations list --instance="INSTANCE_ID"
    

    请替换以下内容:

    • INSTANCE-ID:要移动的实例的永久性标识符。

    输出会显示长时间运行的操作的列表,包括实例移动操作。

  2. 运行 gcloud spanner operations describe 命令以查看进度百分比和状态:

    gcloud spanner operations describe OPERATION_ID --instance=INSTANCE_ID
    

    请替换以下内容:

    • OPERATION_ID:您要检查的实例移动操作的操作 ID。
    • INSTANCE_ID:要检查的实例 ID。

监控实例移动操作

您可以创建自定义 Cloud Monitoring 信息中心,以在实例迁移期间显示和监控指标。实例移动是一项长时间运行的操作,可能会对服务产生影响。

信息中心内的总存储空间总数据库存储空间(按数据库)图表有助于监控迁移进度。您可以看到,源配置中的存储空间会逐渐减少,而目标配置中的存储空间则会增加。

Google Cloud 控制台

  1. 下载 move-instance-dashboard.json 文件。此文件包含填充 Monitoring 中的自定义信息中心所需的信息。
  2. 在 Google Cloud 控制台中,转到 信息中心页面:

    前往信息中心

    如果您使用搜索栏查找此页面,请选择子标题为监控的结果。

  3. 信息中心概览页面中,点击创建信息中心
  4. 在信息中心工具栏中,点击信息中心设置下拉菜单。然后,依次选择 JSONJSON 编辑器
  5. JSON Editor 窗格中,复制您下载的 move-instance-dashboard.json 文件的内容并将其粘贴到编辑器中。
  6. 要将更改应用到信息中心,请点击应用更改。如果您不想使用此信息中心,请导航回“信息中心概览”页面。
  7. 创建信息中心后,点击添加过滤条件。然后选择 project_idinstance_id 以监控实例的移动进度。

gcloud CLI

  1. 下载 move-instance-dashboard.json 文件。此文件包含填充 Monitoring 中的自定义信息中心所需的信息。
  2. 如需在项目中创建信息中心,请使用 gcloud monitoring dashboards create 命令:

    gcloud monitoring dashboards create --config-from-file=move-instance-dashboard.json
    

    如需了解详情,请参阅 gcloud monitoring dashboards create 参考文档。

如何取消实例移动

您只能取消仍在进行中的实例移动。如果要还原已完成的实例移动,则必须开始新的移动。

您可以使用 gcloud spanner operations cancel 取消实例移动操作。取消操作不是即时的,并且与移动开始后经过的时间大致相同。这是因为必须将数据移回源实例配置。

此命令需要正在进行的实例移动操作的操作 ID。

  1. 通过运行以下命令获取操作 ID:

    gcloud spanner operations list --type=INSTANCE --instance="INSTANCE_ID"
    --filter="done:False AND metadata.@type:MoveInstanceMetadata
    

    请替换以下内容:

    • INSTANCE_ID:要移动的实例的永久性标识符。

    输出会显示进行中的实例移动操作的列表。

  2. 运行 gcloud spanner operations cancel 命令以取消实例移动:

    gcloud spanner operations cancel OPERATION_ID
    

    请替换以下内容:

    • OPERATION_ID:要取消的实例移动操作的操作 ID。

后续步骤