创建到现有目标集群的迁移作业

当您迁移到现有目标 AlloyDB for PostgreSQL 集群时,Database Migration Service 会降级目标集群,将其配置为外部副本。降级集群不会将 AlloyDB for PostgreSQL 置于只读模式,但在迁移过程中执行某些操作可能会导致迁移错误。在迁移到现有目标集群时,请注意以下操作注意事项:
  • 集群降级:Database Migration Service 会降级目标集群,将其配置为源数据库的副本。
  • 避免对迁移数据执行写入操作:请勿在目标集群中对迁移作业所涉及的表或数据库执行写入操作(例如 INSERT、UPDATE、DELETE 或 DDL 架构更改)。此类操作可能会导致与来自源的数据发生复制冲突。
  • 管理数据库用户:您可以随时使用标准 psql 命令或通过 Google Cloud 控制台中的 AlloyDB for PostgreSQL 创建和管理数据库用户。如需了解详情,请参阅 AlloyDB for PostgreSQL 文档中的管理数据库用户。

如需了解详情,请参阅现有目标集群的已知限制。

Database Migration Service 通过迁移作业将数据从源数据库迁移到目标 AlloyDB for PostgreSQL 集群。为现有目标集群创建迁移作业包括:

  • 定义迁移作业的设置
  • 定义来源设置并选择要迁移的数据库
  • 选择现有目标 AlloyDB for PostgreSQL 集群
  • 正在将现有集群降级,以将其配置为源数据库的副本
  • 在源数据库和目标数据库之间建立连接
  • 测试迁移作业,以确保您提供的连接信息有效

准备工作

在创建到现有 AlloyDB for PostgreSQL 目标集群的迁移作业之前,请确保:

  1. 验证此迁移类型是否可以支持您的场景。 例如,如果要迁移到在 Database Migration Service 之外创建的集群,则 AlloyDB for PostgreSQL 目标集群必须为空或仅包含系统配置数据。 如需了解详情,请参阅已知限制。
  2. 创建目标 AlloyDB for PostgreSQL 集群及其主实例。 请参阅 AlloyDB for PostgreSQL 文档中的创建集群及其主实例。

  3. 准备源数据库实例。请参阅以下页面:
    1. 配置源数据库
    2. 创建来源连接配置文件
    3. 配置连接

如需创建到现有目标集群的迁移作业,请执行以下操作:

控制台

定义迁移作业的设置

  1. 在 Google Cloud 控制台中,前往迁移作业页面。

    前往“迁移作业”

  2. 点击创建迁移作业。

    系统会打开迁移作业配置向导页面。 此向导包含多个面板,可引导您完成每个配置步骤。

    您可以随时点击保存并退出,暂停创建迁移作业。您在此时之前输入的所有数据都会保存在草稿迁移作业中。 您可以稍后完成迁移作业草稿。

  3. 在开始使用页面上,输入以下信息:
    1. 迁移作业名称

      这是迁移作业的人类可读名称。此值会显示在 Google Cloud 控制台中。

    2. 迁移任务 ID

      这是迁移作业的机器可读标识符。 您可以使用此值通过 Database Migration Service Google Cloud CLI 命令或 API 处理迁移作业。

    3. 从源数据库引擎列表中,选择 PostgreSQL。
    4. 从目标数据库引擎列表中,选择 AlloyDB for PostgreSQL。
    5. 选择您保存迁移作业的区域。

      Database Migration Service 是一款完全区域性的产品,这意味着与迁移相关的所有实体(源和目标连接配置文件、迁移作业、目标集群)都必须保存在单个区域中。选择现有目标集群所在的区域。 选择目标区域后,此选择便无法更改。

    6. 选择持续(快照 + 持续更改)作为迁移服务类型。到 AlloyDB for PostgreSQL 的同构迁移仅支持持续迁移。
  4. 点击保存并继续。

指定有关来源连接配置文件的信息

在定义来源页面上,执行以下步骤:

  1. 从来源连接配置文件下拉菜单中,选择源数据库的连接配置文件。
  2. 在自定义数据转储配置部分中,点击显示数据转储配置。

    数据转储并行速度与源数据库上的负载量有关:

    • 最佳(推荐):性能均衡,源数据库负载最佳。
    • 最大:提供最高的转储速度,但可能会导致源数据库负载增加。
    • 最低:占用源数据库上最少的计算资源,但转储吞吐量可能较低。

    如果您选择调整后的数据转储并行设置,请务必增加源数据库上的 max_replication_slots、max_wal_senders 和 max_worker_processes 参数。

  3. 点击保存并继续。

选择 AlloyDB for PostgreSQL 目标集群

  1. 从目标实例类型菜单中,选择现有集群。
  2. 在选择目标集群部分,选择目标 AlloyDB for PostgreSQL 集群。
  3. 查看集群详情部分中的信息,然后点击选择并继续。

    如需迁移到现有目标数据库,Database Migration Service 会降级目标集群并将其配置为副本。 如需表明可以安全地执行降级,请在确认窗口中输入目标集群标识符。

  4. 点击确认并继续。

在源数据库实例和目标集群之间建立连接

从连接方法下拉菜单中,选择一种网络连接方法。此方法定义了 AlloyDB for PostgreSQL 目标集群如何连接到源数据库。目前的网络连接方法包括 IP 许可清单、反向 SSH 隧道、Private Service Connect 接口、VPC 对等互连以及通过云托管虚拟机的 TCP 代理。

如果您想使用…请执行以下操作
IP 许可清单网络连接方法 复制目标集群主实例的两个出站公共 IP 地址,并用它们为源数据库服务器配置网络防火墙,同时修改 pg_hba.conf 文件。
反向 SSH 隧道网络连接方法 选择将托管隧道的 Compute Engine 虚拟机实例。

指定实例后,Google 会提供一个脚本,用于执行在源数据库和目标数据库之间设置隧道的步骤。从同时连接到源数据库和 Google Cloud的机器上,在 Google Cloud CLI 中运行脚本。

Private Service Connect 接口连接方法 Database Migration Service 会自动建立所需的连接。 只有当您拥有启用了 Private Service Connect 且具有网络连接的目标集群时,此连接方法才可用。如需详细了解 Private Service Connect,请参阅 AlloyDB for PostgreSQL 文档中的配置 Private Service Connect。
VPC 对等互连网络连接方法 选择源数据库所在的 VPC 网络。AlloyDB for PostgreSQL 集群使用专用服务访问通道连接到此网络。
通过云端托管式虚拟机的 TCP 代理连接方法 输入将托管 TCP 代理的新 Compute Engine 虚拟机实例所需的详细信息。

指定详细信息后, Google Cloud 控制台会提供一个脚本,用于在源数据库和目标数据库之间设置代理。在装有更新版 Google Cloud CLI 的机器上运行该脚本。

运行脚本后,输入新创建的虚拟机的专用 IP 地址,然后点击配置并继续。

选择并配置网络连接后,点击配置并继续。

配置迁移数据库

您可以从源实例迁移所有数据库,也可以仅选择特定数据库。

  1. 从要迁移的数据库列表中,选择以下选项之一:
    • 所有数据库:选择源中存在的所有数据库。
    • 特定数据库:可让您从源端的所有数据库中选择特定数据库。
  2. 如果您想迁移特定数据库,请过滤显示的列表,然后选择您希望 Database Migration Service 迁移到目标位置的数据库。

    如果未显示列表,而是显示数据库发现错误,请点击重新加载。如果数据库发现失败,作业会迁移所有数据库。您可以继续创建迁移作业,稍后再修正连接错误。

  3. 点击保存并继续。

测试、创建和运行迁移作业

在最后一步中,查看迁移作业设置、来源、目标和连接性的摘要,然后测试迁移作业设置的有效性。如果遇到任何问题,您可以修改迁移作业的设置。并非所有设置都可以修改。

  1. 在测试并创建迁移作业页面上,点击测试作业。

    如果测试失败,请在流程的适当部分解决问题,然后返回重新测试。如需了解如何排查迁移作业测试失败的问题,请参阅诊断 AlloyDB for PostgreSQL 的问题。

  2. 迁移作业测试完成后,点击创建并启动作业以创建迁移作业并立即启动,或点击创建作业以创建迁移作业但不立即启动。

    如果作业在创建时未启动,则可以从迁移作业页面点击启动来启动作业。无论迁移作业何时开始,您的组织都需要为目标集群的存在付费。

    您的迁移正在进行中。启动迁移作业后,Database Migration Service 会开始初始完整转储和持续复制。 如需了解详情,请参阅已知限制。

  3. 继续查看迁移作业。

Google Cloud CLI

使用 Google Cloud CLI 迁移到现有集群时,您必须手动为目标集群创建连接配置文件。使用 Google Cloud 控制台时,您无需执行此操作,因为 Database Migration Service 会为您创建和移除目标连接配置文件。

  1. 创建目标连接配置文件。
    通过运行 gcloud database-migration connection-profiles create 命令,为现有目标集群创建目标连接配置文件(点击链接可展开):

    gcloud database-migration connection-profiles create postgresql

    此示例使用可选的 --no-async 标志,以便同步执行所有操作。这意味着某些命令可能需要一段时间才能完成。您可以跳过 --no-async 标志,以异步方式运行命令。如果这样做,您需要使用 gcloud database-migration operations describe 命令来验证操作是否成功。

    在使用下面的命令数据之前,请先进行以下替换:

    • 将 DEST_CONN_ID 替换为目标连接配置文件标识符。
    • 将 REGION 替换为您要在其中保存连接配置文件的区域。此区域应与目标集群区域相同。
    • DEST_CLUSTER 替换为预先创建的 AlloyDB for PostgreSQL 目标集群的 ID。
    • 将 DEST_USER 替换为目标数据库中迁移用户的用户名。
    • 将 DEST_PASSWORD 替换为目标数据库中迁移用户的密码。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud database-migration connection-profiles create postgresql DEST_CONN_ID \
      --region=REGION \
      --alloydb-cluster=DEST_CLUSTER \
      --username=DEST_USER \
      --password=DEST_PASSWORD \
      --role=DESTINATION \
      --no-async

    Windows (PowerShell)

    gcloud database-migration connection-profiles create postgresql DEST_CONN_ID `
      --region=REGION `
      --alloydb-cluster=DEST_CLUSTER `
      --username=DEST_USER `
      --password=DEST_PASSWORD `
      --role=DESTINATION `
      --no-async

    Windows (cmd.exe)

    gcloud database-migration connection-profiles create postgresql DEST_CONN_ID ^
      --region=REGION ^
      --alloydb-cluster=DEST_CLUSTER ^
      --username=DEST_USER ^
      --password=DEST_PASSWORD ^
      --role=DESTINATION ^
      --no-async

    您应该会收到类似如下所示的响应:

    Waiting for connection profile [DEST_CONN_ID]
    to be created with [OPERATION_ID]
    
    Waiting for operation [OPERATION_ID] to complete...done.
    
    Created connection profile DEST_CONN_ID [OPERATION_ID]
    
  2. 创建迁移作业。
    以下示例展示了在源数据库和目标数据库之间使用专用 IP 连接的迁移场景。如果您使用其他连接类型(例如 IP 许可清单、VPC 对等互连或反向 SSH 隧道),请务必添加所需的标志,例如 --static-ip、--peer-vpc 或 --vm、--vm-ip、--vm-port 和 --vpc。 如需了解详情,请参阅配置连接和 Google Cloud CLI 示例。
    运行以下命令(点击链接可展开):

    gcloud database-migration migration-jobs create

    此示例使用可选的 --no-async 标志,以便同步执行所有操作。这意味着某些命令可能需要一段时间才能完成。您可以跳过 --no-async 标志,以异步方式运行命令。如果这样做,您需要使用 gcloud database-migration operations describe 命令来验证操作是否成功。

    在使用下面的命令数据之前,请先进行以下替换:

    • 将 MIGRATION_JOB_ID 替换为迁移作业的机器可读标识符。您可以使用此值通过 Database Migration Service Google Cloud CLI 命令或 API 处理迁移作业。
    • 将 REGION 替换为您要保存迁移作业的区域标识符。
    • 将 MIGRATION_JOB_NAME 替换为迁移作业的人类可读名称。此值显示在 Google Cloud 控制台的 Database Migration Service 中。
    • 将 SOURCE_CONNECTION_PROFILE_ID 替换为来源连接配置文件的机器可读标识符。如需了解详情,请参阅创建来源连接配置文件。
    • DESTINATION_CONNECTION_PROFILE_ID 替换为目标连接配置文件的机器可读标识符。
    • 可选:默认情况下,Database Migration Service 会迁移来源中的所有数据库。如果您只想迁移特定数据库,请使用 --databases-filter 标志,并以英文逗号分隔列表的形式指定其标识符。

      例如:--databases-filter=my-business-database,my-other-database

      您稍后可以使用 gcloud database-migration migration-jobs update 命令修改使用 --databases-filter 标志创建的迁移作业。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud database-migration migration-jobs \
    create MIGRATION_JOB_ID \
      --no-async \
      --region=REGION \
      --display-name=MIGRATION_JOB_NAME \
      --source=SOURCE_CONNECTION_PROFILE_ID \
      --destination=DESTINATION_CONNECTION_PROFILE_ID \
      --type=CONTINUOUS

    Windows (PowerShell)

    gcloud database-migration migration-jobs `
    create MIGRATION_JOB_ID `
      --no-async `
      --region=REGION `
      --display-name=MIGRATION_JOB_NAME `
      --source=SOURCE_CONNECTION_PROFILE_ID `
      --destination=DESTINATION_CONNECTION_PROFILE_ID `
      --type=CONTINUOUS

    Windows (cmd.exe)

    gcloud database-migration migration-jobs ^
    create MIGRATION_JOB_ID ^
      --no-async ^
      --region=REGION ^
      --display-name=MIGRATION_JOB_NAME ^
      --source=SOURCE_CONNECTION_PROFILE_ID ^
      --destination=DESTINATION_CONNECTION_PROFILE_ID ^
      --type=CONTINUOUS

    您应该会收到类似如下所示的响应:

    Waiting for migration job [MIGRATION_JOB_ID]
    to be created with [OPERATION_ID]
    
    Waiting for operation [OPERATION_ID] to complete...done.
    
    Created migration job MIGRATION_JOB_ID [OPERATION_ID]
    
  3. 降级目标数据库。
    Database Migration Service 要求您先将现有目标集群降级,将其配置为外部副本,然后再启动迁移作业。运行 gcloud database-migration migration-jobs demote-destination 命令(点击链接可展开):

    gcloud database-migration migration-jobs demote-destination

    在使用下面的命令数据之前,请先进行以下替换:

    • 将 MIGRATION_JOB_ID 替换为您的迁移作业标识符。

      如果您不知道标识符,可以使用 gcloud database-migration migration-jobs list 命令列出给定区域中的所有迁移作业并查看其标识符。

    • 将 REGION 替换为保存迁移作业的区域的标识符。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud database-migration migration-jobs \
    demote-destination MIGRATION_JOB_ID \
      --region=REGION

    Windows (PowerShell)

    gcloud database-migration migration-jobs `
    demote-destination MIGRATION_JOB_ID `
      --region=REGION

    Windows (cmd.exe)

    gcloud database-migration migration-jobs ^
    demote-destination MIGRATION_JOB_ID ^
      --region=REGION

    结果

    该操作以异步方式执行。 因此,此命令会返回一个表示长时间运行的操作的 操作实体:

    done: false
    metadata:
      '@type': type.googleapis.com/google.cloud.clouddms.v1.OperationMetadata
      apiVersion: v1
      createTime: '2024-02-20T12:20:24.493106418Z'
      requestedCancellation: false
      target: MIGRATION_JOB_ID
      verb: demote-destination
    name: OPERATION_ID
    

    如需查看操作是否成功,您可以查询返回的操作对象,或检查迁移作业的状态:

  4. 可选:验证迁移作业。
    此时,您的迁移作业已配置并连接到目标集群。您可以使用 verify、start、stop、restart 和 resume 操作来管理它。 我们建议您先运行 gcloud database-migration migration-jobs verify 命令来验证迁移作业(点击链接可展开):

    gcloud database-migration migration-jobs verify

    在使用下面的命令数据之前,请先进行以下替换:

    • 将 MIGRATION_JOB_ID 替换为您的迁移作业标识符。

      如果您不知道标识符,可以使用 gcloud database-migration migration-jobs list 命令列出给定区域中的所有迁移作业并查看其标识符。

    • 将 REGION 替换为保存迁移作业的区域的标识符。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud database-migration migration-jobs \
    verify MIGRATION_JOB_ID \
      --region=REGION

    Windows (PowerShell)

    gcloud database-migration migration-jobs `
    verify MIGRATION_JOB_ID `
      --region=REGION

    Windows (cmd.exe)

    gcloud database-migration migration-jobs ^
    verify MIGRATION_JOB_ID ^
      --region=REGION

    结果

    该操作以异步方式执行。 因此,此命令会返回一个表示长时间运行的操作的 操作实体:

    done: false
    metadata:
      '@type': type.googleapis.com/google.cloud.clouddms.v1.OperationMetadata
      apiVersion: v1
      createTime: '2024-02-20T12:20:24.493106418Z'
      requestedCancellation: false
      target: MIGRATION_JOB_ID
      verb: verify
    name: OPERATION_ID
    

    如需查看操作是否成功,您可以查询返回的操作对象,或检查迁移作业的状态:

  5. 启动迁移作业。
    通过运行 gcloud database-migration migration-jobs start 命令启动迁移作业(点击链接可展开):

    gcloud database-migration migration-jobs start

    在使用下面的命令数据之前,请先进行以下替换:

    • 将 MIGRATION_JOB_ID 替换为您的迁移作业标识符。

      如果您不知道标识符,可以使用 gcloud database-migration migration-jobs list 命令列出给定区域中的所有迁移作业并查看其标识符。

    • 将 REGION 替换为保存迁移作业的区域的标识符。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud database-migration migration-jobs \
    start MIGRATION_JOB_ID \
      --region=REGION

    Windows (PowerShell)

    gcloud database-migration migration-jobs `
    start MIGRATION_JOB_ID `
      --region=REGION

    Windows (cmd.exe)

    gcloud database-migration migration-jobs ^
    start MIGRATION_JOB_ID ^
      --region=REGION

    结果

    该操作以异步方式执行。 因此,此命令会返回一个表示长时间运行的操作的 操作实体:

    done: false
    metadata:
      '@type': type.googleapis.com/google.cloud.clouddms.v1.OperationMetadata
      apiVersion: v1
      createTime: '2024-02-20T12:20:24.493106418Z'
      requestedCancellation: false
      target: MIGRATION_JOB_ID
      verb: start
    name: OPERATION_ID
    

    如需查看操作是否成功,您可以查询返回的操作对象,或检查迁移作业的状态:

  6. 提升迁移作业。
    迁移达到变更数据捕获 (CDC) 阶段后,您可以将目标集群从副本提升为独立主集群。 运行 gcloud database-migration migration-jobs promote 命令(点击链接可展开):

    gcloud database-migration migration-jobs promote

    在使用下面的命令数据之前,请先进行以下替换:

    • 将 MIGRATION_JOB_ID 替换为您的迁移作业标识符。

      如果您不知道标识符,可以使用 gcloud database-migration migration-jobs list 命令列出给定区域中的所有迁移作业并查看其标识符。

    • 将 REGION 替换为保存迁移作业的区域的标识符。

    执行以下命令:

    Linux、macOS 或 Cloud Shell

    gcloud database-migration migration-jobs \
    promote MIGRATION_JOB_ID \
      --region=REGION

    Windows (PowerShell)

    gcloud database-migration migration-jobs `
    promote MIGRATION_JOB_ID `
      --region=REGION

    Windows (cmd.exe)

    gcloud database-migration migration-jobs ^
    promote MIGRATION_JOB_ID ^
      --region=REGION

    结果

    该操作以异步方式执行。 因此,此命令会返回一个表示长时间运行的操作的 操作实体:

    done: false
    metadata:
      '@type': type.googleapis.com/google.cloud.clouddms.v1.OperationMetadata
      apiVersion: v1
      createTime: '2024-02-20T12:20:24.493106418Z'
      requestedCancellation: false
      target: MIGRATION_JOB_ID
      verb: promote
    name: OPERATION_ID
    

    如需查看操作是否成功,您可以查询返回的操作对象,或检查迁移作业的状态: