教程:使用 DMS 将 RDS PostgreSQL 联机迁移到 Azure DB for PostgreSQL

可以使用 Azure 数据库迁移服务将 RDS PostgreSQL 实例中的数据库迁移到 Azure Database for PostgreSQL,在迁移期间,源数据库可保持联机状态。 换而言之,实现这种迁移只会对应用程序造成极短暂的停机。 本教程介绍如何在 Azure 数据库迁移服务中使用联机迁移活动将 DVD Rental 示例数据库从 RDS PostgreSQL 9.6 实例迁移到 Azure Database for PostgreSQL。

本教程介绍如何执行下列操作:

  • 使用 pg_dump 实用工具迁移示例架构。
  • 创建 Azure 数据库迁移服务的实例。
  • 使用 Azure 数据库迁移服务创建迁移项目。
  • 运行迁移。
  • 监视迁移。
  • 执行直接转换迁移。

注意

使用 Azure 数据库迁移服务执行联机迁移需要基于“高级”定价层创建实例。 有关详细信息,请参阅 Azure 数据库迁移服务定价页。 我们对磁盘进行加密,以防止在迁移过程中数据被盗。

重要

为获得最佳迁移体验,Azure 建议在目标数据库所在的 Azure 区域中创建 Azure 数据库迁移服务的实例。 跨区域或地理位置移动数据可能会减慢迁移过程并引入错误。

提示

在 Azure 数据库迁移服务中,可以脱机或联机迁移数据库。 使用脱机迁移时,应用程序停机时间从迁移开始时算起。 若要将停机时间限制为迁移后直接转换到新环境所需的时间,请使用联机迁移。 建议测试脱机迁移,以确定停机时间是否可接受。 如果无法接受预期的停机时间,请进行联机迁移。

本文介绍如何从 PostgreSQL 的本地实例联机迁移到 Azure Database for PostgreSQL。

先决条件

要完成本教程,需要:

  • 下载并安装 PostgreSQL 社区版 9.5、9.6 或 10。 源 PostgreSQL 服务器版本必须是 9.5.11、9.6.7、10 或更高版本。 有关详细信息,请参阅支持的 PostgreSQL 数据库版本一文。

    另请注意,目标 Azure Database for PostgreSQL 版本必须等于或晚于 RDS PostgreSQL 版本。 例如,RDS PostgreSQL 9.6 只能迁移到 Azure Database for PostgreSQL 9.6、10 或 11,而不能迁移到 Azure Database for PostgreSQL 9.5。

  • 创建 Azure Database for PostgreSQLAzure Database for PostgreSQL - 超大规模 (Citus) 的实例。 有关如何使用 pgAdmin 连接到 PostgreSQL 服务器的详细信息,请参阅此文档部分

  • 使用 Azure 资源管理器部署模型创建 Azure 数据库迁移服务的 Azure 虚拟网络,它将使用 ExpressRouteVPN 为本地源服务器提供站点到站点连接。 有关创建虚拟网络的详细信息,请参阅虚拟网络文档,尤其是提供了分步详细信息的快速入门文章。

  • 请确保虚拟网络的网络安全组规则不阻止 ServiceBus、存储服务和 AzureMonitor 的 ServiceTag 出站端口 443。 有关虚拟网络 NSG 流量筛选的更多详细信息,请参阅使用网络安全组筛选网络流量一文。

  • 配置针对数据库引擎访问的 Windows 防火墙

  • 打开 Windows 防火墙,使 Azure 数据库迁移服务能够访问源 PostgreSQL 服务器(默认情况下为 TCP 端口 5432)。

  • 在源数据库的前面使用了防火墙设备时,可能需要添加防火墙规则以允许 Azure 数据库迁移服务访问要迁移的源数据库。

  • 为 Azure Database for PostgreSQL 服务器创建服务器级防火墙规则,以允许 Azure 数据库迁移服务访问目标数据库。 提供用于 Azure 数据库迁移服务的虚拟网络子网范围。

设置 AWS RDS PostgreSQL 用于复制

  1. 若要创建新的参数组,请遵照 AWS 在使用 DB 参数组中提供的说明操作。

  2. 在 Azure 数据库迁移服务中使用主用户名连接到源。 如果使用的帐户不是主用户帐户,该帐户必须具有 rds_superuser 角色和 rds_replication 角色。 rds_replication 角色可以授予管理逻辑槽以及使用逻辑槽流式传输数据的权限。

  3. 使用以下配置创建新的参数组:

    a. 将 DB 参数组中的 rds.logical_replication 参数设置为 1。

    b. max_wal_senders =[并发任务数] - max_wal_senders 参数设置可以运行的并发任务数,建议设置为 10 个任务。

    c. max_replication_slots = [槽数],建议设置为 5 个槽。

  4. 将创建的参数组关联到 RDS PostgreSQL 实例。

迁移架构

  1. 从源数据库提取架构并将其应用到目标数据库,以完成所有数据库对象(例如表架构、索引和存储过程)的迁移。

    仅迁移架构的最简单方法是结合 -s 选项使用 pg_dump。 有关详细信息,请参阅 Postgres pg_dump 教程中的示例

    pg_dump -O -h hostname -U db_username -d db_name -s > your_schema.sql
    

    例如,若要转储 dvdrental 数据库的架构文件,请使用以下命令:

    pg_dump -O -h localhost -U postgres -d dvdrental -s  > dvdrentalSchema.sql
    
  2. 在目标服务(即 Azure Database for PostgreSQL)中创建一个空数据库。 若要连接和创建数据库,请参阅以下文章之一:

  3. 将架构导入目标服务(即 Azure Database for PostgreSQL)。 若要还原架构转储文件,请运行以下命令:

    psql -h hostname -U db_username -d db_name < your_schema.sql
    

    例如:

    psql -h mypgserver-20170401.postgres.database.chinacloudapi.cn  -U postgres -d dvdrental < dvdrentalSchema.sql
    

注意

迁移服务在内部处理外键和触发器的启用/禁用,以确保可靠且稳定的数据迁移。 因此,你不需要担忧对目标数据库架构所做的任何修改。

注册资源提供程序

在创建数据库迁移服务的第一个实例之前,请注册 Microsoft.DataMigration 资源提供程序。

  1. 登录到 Azure 门户。 搜索并选择“订阅”。

    Show portal subscriptions

  2. 选择要在其中创建 Azure 数据库迁移服务实例的订阅,再选择“资源提供程序”。

    Show resource providers

  3. 搜索迁移,然后选择 Microsoft.DataMigration 旁的“注册” 。

    Register resource provider

创建 Azure 数据库迁移服务的实例

  1. 在 Azure 门户中,选择 + 创建资源,搜索 Azure 数据库迁移服务,然后从下拉列表选择Azure 数据库迁移服务

    Azure Marketplace

  2. 在“Azure 数据库迁移服务”屏幕上,选择“创建” 。

    Create Azure Database Migration Service instance

  3. 在“创建迁移服务”屏幕上,为服务、订阅以及新的或现有资源组指定名称。

  4. 选择要在其中创建 Azure 数据库迁移服务实例的位置。

  5. 选择现有虚拟网络或新建一个。

    虚拟网络为 Azure 数据库迁移服务提供对源 PostgreSQL 实例和目标 Azure Database for PostgreSQL 实例的访问权限。

    有关如何在 Azure 门户中创建虚拟网络的详细信息,请参阅使用 Azure 门户创建虚拟网络一文。

  6. 选择定价层;对于此联机迁移,请务必选择“高级:4vCores”定价层。

    Configure Azure Database Migration Service instance settings

  7. 选择“创建” 来创建服务。

创建迁移项目

创建服务后,在 Azure 门户中找到并打开它,然后创建一个新的迁移项目。

  1. 在 Azure 门户中,选择“所有服务”,搜索 Azure 数据库迁移服务,然后选择“Azure 数据库迁移服务”。

    Locate all instances of the Azure Database Migration Service

  2. 在“Azure 数据库迁移服务”屏幕上,搜索所创建的 Azure 数据库迁移服务实例名称,选择该实例,然后选择“+ 新建迁移项目” 。

  3. 在“新建迁移项目”屏幕上指定项目名称,在“源服务器类型”文本框中选择“AWS RDS for PostgreSQL”,在“目标服务器类型”文本框中选择“Azure Database for PostgreSQL”。

  4. 在“选择活动类型”部分选择“联机数据迁移”。

    重要

    请确保选择“联机数据迁移”;此方案不支持脱机迁移 。

    Create Database Migration Service Project

    注意

    也可以现在就选择“仅创建项目”来创建迁移项目,在以后再执行迁移。

  5. 选择“保存” 。

  6. 选择“创建并运行活动”,以便创建项目并运行迁移活动。

    注意

    请在项目创建边栏选项卡中记下设置联机迁移所要满足的先决条件。

指定源详细信息

  • 在“添加源详细信息” 屏幕上,指定源 PostgreSQL 实例的连接详细信息。

    Source Details

指定目标详细信息

  1. 选择“保存”,然后在“目标详细信息”屏幕上指定目标 Azure Database for PostgreSQL 服务器的连接详细信息,该服务器是提前预配的,具有使用 pg_dump 部署的 DVD Rentals 架构。

    Target details

  2. 选择“保存”,然后在“映射到目标数据库”屏幕上,映射源和目标数据库以进行迁移。

    如果目标数据库包含的数据库名称与源数据库的相同,则 Azure 数据库迁移服务默认会选择目标数据库。

    Map to target databases

  3. 选择“保存”,在“迁移摘要”屏幕上的“活动名称”文本框中指定迁移活动的名称,然后查看摘要,确保源和目标详细信息与此前指定的信息相符 。

    Migration Summary

运行迁移

  • 选择“运行迁移” 。

    迁移活动窗口随即出现,活动的“状态”为“正在初始化” 。

监视迁移

  1. 在迁移活动屏幕上选择“刷新” ,以便更新显示,直到迁移的“状态” 显示为“正在运行” 。

    Activity Status - running

  2. 在“数据库名称”下选择特定数据库即可转到“完整数据加载”和“增量数据同步”操作的迁移状态。

    “完整数据加载”会显示初始加载迁移状态,而“增量数据同步”则会显示变更数据捕获 (CDC) 状态。

    Inventory screen - full data load

    Inventory screen - incremental data sync

执行迁移直接转换

完成初始的完整加载后,数据库会被标记为“准备好交接”。

  1. 如果准备完成数据库迁移,请选择“启动直接转换”。

  2. 等到“挂起的更改” 计数器显示“0” 以确保源数据库的所有传入事务都已停止,选中“确认” 复选框,然后选择“应用” 。

    Complete cutover screen

  3. 当数据库迁移状态显示“已完成”后,请将应用程序连接到新的目标 Azure Database for PostgreSQL 数据库。

将 RDS PostgreSQL 的本地实例联机迁移到 Azure Database for PostgreSQL 现已完成。

后续步骤