移动实例

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

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

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

为什么要迁移 Spanner 实例?

迁移实例的好处包括:

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

价格

迁移实例时,源实例和目标实例配置均需按小时支付计算和存储费用。迁移完成后,您需要按目标配置为实例存储付费。

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

限制

  • 如需迁移实例,该实例必须至少具有 1 个节点(1,000 个处理单元)
  • 您无法在不同项目和 Google Cloud 账号之间迁移实例。
  • 您无法将使用标准版的实例直接从单区域实例配置迁移到双区域或多区域实例配置。您必须先将实例的版本升级到企业 Plus 版,然后再迁移实例。
  • 如果您的活跃请求在任何实例资源上使用区域服务端点,则实例迁移会影响所有使用区域端点的请求,因为区域级强制执行会阻止对跨区域实例的访问。使用全球端点的请求不受影响。
  • Spanner 备份特定于实例配置,并且在迁移实例时不包含在内。如需了解详情,请参阅备份
  • 在实例迁移期间,以下 API 会被停用:
    • InstanceAdmin.DeleteInstance
    • InstanceAdmin.UpdateInstance
    • DatabaseAdmin.CreateDatabase
    • DatabaseAdmin.UpdateDatabaseDdl(如果在请求中指定了 default_leader,则此 API 会被停用。)
    • DatabaseAdmin.RestoreDatabase
    • DatabaseAdmin.CreateBackup
    • DatabaseAdmin.CreateBackupSchedule
    • DatabaseAdmin.CopyBackup
  • 如果数据库具有修改后的默认主要区域,则如果该选择在目标实例配置中指定了读写区域,并且该配置是多区域配置,则该选择会保留。如果目标配置是单区域配置,或者不包含指定的读写区域,则系统会清除默认主要区域选择。
  • 迁移实例会更改实例的实例配置属性。如果您通过自动化管理 Spanner 资源,请务必做好准备并解决可能出现的任何不一致情况。
    • 例如,如果您使用 Terraform 管理 Spanner 实例和数据库,并启用 terraform apply --auto-approve 以保持资源同步,则在迁移实例时,系统会删除所有实例和子资源。请相应地更新配置,以避免删除和数据丢失。如需详细了解 apply 命令,请参阅 Terraform Apply 选项
  • 在实例迁移期间,Spanner 监控指标和图表可能会同时显示源实例配置和目标实例配置中的数据,也可能仅反映一种实例配置中的性能。
  • 如果您已配置开源自动扩缩器工具,则无需停用该工具。由于 InstanceAdmin.UpdateInstance(用于节点和处理单元更改)已停用,该工具会出现故障。
  • 如果实例上启用了 Spanner 托管式自动扩缩器功能,您将无法迁移该实例。如需迁移实例,您需要停用托管式自动扩缩器,迁移实例,然后重新启用托管式自动扩缩器。
    • 此外,如果您使用自动扩缩,则必须根据所述的最大建议值来预配足够的节点以应对 CPU 使用率高峰,然后在迁移实例之前停用自动扩缩功能。
  • 您无法迁移 Spanner 免费试用实例升级到付费实例后,您可以迁移该实例。

性能考虑因素

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

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

备份

迁移实例时,源实例中的备份不会自动迁移到新的目标配置。如果您在开始实例迁移时,源实例配置中存在备份,则系统会中止实例迁移。在迁移实例之前,请务必复制备份并考虑数据恢复计划

如果源实例中有需要保留的备份,建议您将备份复制到目标实例配置和另一个与要迁移的源实例具有相同实例配置的实例。如此一来:

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

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

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

如何迁移实例

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

前提条件

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

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

如需了解最佳实践,另请遵循以下准则:

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

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

移动实例

Google Cloud 控制台

  1. 前往 Google Cloud 控制台中的实例页面。

    实例

  2. 选择要迁移的实例。

  3. 在“实例概览”页面上,点击配置旁边的修改图标 将实例迁移到新配置

  4. 将数据库迁移到新配置窗格中,为实例选择新的实例配置。

  5. 点击保存

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. 克隆基本配置,并向新的自定义实例配置 custom-nam3-us-west2 添加只读副本添

    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
    

可选:迁移具有启用了 CMEK 的数据库的实例

使用 gcloud spanner instances move 命令迁移具有启用了 CMEK 的数据库的实例。您必须在命令中添加 --target-database-move-configs 标志和 KMS 密钥值,或者使用必要的 KMS 密钥配置 JSON 或 YAML 文件。

使用说明:

  • 如果您要迁移的实例中有多个启用了 CMEK 的数据库,则必须为每个数据库指定 -—target-database-move-configs。您可以为每个数据库使用相同的密钥,但必须为每个启用了 CMEK 的数据库指定密钥。
  • 您的密钥必须涵盖目标实例配置中的所有区域。例如,如果目标实例配置位于 nam3,则您必须在 us-east4us-east1us-central1 中设置密钥。
  • 在迁移实例时,您无法为未启用 CMEK 的数据库设置 KMS 密钥。
  • 迁移实例时,您不应在源实例或目标实例配置中停用或销毁 CMEK 密钥。如果您尝试,系统不会继续执行迁移。
gcloud spanner instances move INSTANCE_ID \
  --target-config=TARGET_CONFIG \
  --target-database-move-configs=^:^database-id=DATABASE_ID_1:kms-key-names=KMS_KEY_1[, KMS_KEY_2 ... ] \
  [--target-database-move-configs=^:^database-id=DATABASE_ID_2:kms-key-names=KMS_KEY_1 ... ]

gcloud spanner instances move INSTANCE_ID \
  --target-config=TARGET_CONFIG \
  --target-database-move-configs=CONFIG_FILE_PATH

使用数据库 ID 和 KMS 密钥配置 CONFIG_FILE_PATH 文件。以下配置文件示例包含两个数据库(database-1database-2)的 KMS 密钥,其中 us-east4us-east1us-central1 中的密钥相同,以涵盖 nam3 中的所有区域。

[
  {
    database-id: database-1,
    kms-key-names:
      "projects/[your-project]/locations/us-east4/keyRings/[your-keyring]/cryptoKeys/[your-key],projects/[your-project]/locations/us-east1/keyRings/[your-keyring]/cryptoKeys/[your-key],projects/[your-project]/locations/us-central1/keyRings/[your-keyring]/cryptoKeys/[your-key]",
  },
  {
    database-id: database-2,
    kms-key-names:
      "projects/[your-project]/locations/us-east4/keyRings/[your-keyring]/cryptoKeys/[your-key],projects/[your-project]/locations/us-east1/keyRings/[your-keyring]/cryptoKeys/[your-key],projects/[your-project]/locations/us-central1/keyRings/[your-keyring]/cryptoKeys/[your-key]",
  },
]

如何监控实例迁移和取消进度

您可以使用 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. 在信息中心工具栏中,点击信息中心设置下拉菜单。然后选择 JSON,再选择 JSON 编辑器
  5. JSON 编辑器窗格中,复制您下载的 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。

后续步骤