教程:使用迁移服务从 Amazon Aurora PostgreSQL 在线迁移到 Azure Database for PostgreSQL

本文介绍了如何将 PostgreSQL 数据库从 Amazon Aurora 在线迁移到 Azure Database for PostgreSQL。

Azure Database for PostgreSQL 中的迁移服务是集成到 Azure 门户和 Azure CLI 中的完全托管服务。 它旨在简化迁移到 Azure Database for PostgreSQL 的过程。

在本教程中,你将了解:

  • 满足先决条件
  • 启动迁移
  • 监视迁移
  • 启动直接转换
  • 验证迁移

先决条件

在使用 Azure Database for PostgreSQL 中的迁移服务开始迁移之前,务必满足以下先决条件。 这些先决条件是专门为在线迁移场景设计的。

验证源版本

源 PostgreSQL 服务器版本必须为 9.5 或更高。 如果源 PostgreSQL 版本低于 9.5,请在开始迁移之前将该版本升级到 9.5 或更高版本。

安装 test_decoding 进行源设置

  • test_decoding 插件通过逻辑解码机制接收预写日志记录 (WAL)。 该插件将 WAL 解码为执行的操作的文本表示形式。
  • 在 Amazon RDS for PostgreSQL 中,test_decoding 插件已预先安装并随时可用于逻辑复制。 你可以轻松设置逻辑复制槽并流式传输 WAL 更改,以实现特定目的,例如,实施变更数据捕获 (CDC) 或复制到外部系统。

有关 test_decoding 插件的详细信息,请参阅 PostgreSQL 文档

配置目标设置

迁移之前,必须在 Azure 中创建 Azure Database for PostgreSQL 的实例。 为 Azure Database for PostgreSQL 灵活服务器预配的 SKU 应与源匹配。

有关详细信息,请参阅创建 Azure Database for PostgreSQL 的实例

启用 CDC 作为源

  • test_decoding 逻辑解码插件从源捕获已更改的记录。

  • 若要允许迁移用户访问复制权限,请执行以下命令:

    GRANT rds_replication TO <username>;
    
  • 在源 PostgreSQL 实例中,通过创建新的参数组来修改数据库群集参数组中的以下参数:

    • rds.logical_replication 设置为 1
    • max_replication_slots 设置为大于 1 的值。 该值应大于选择进行迁移的数据库的数量。
    • max_wal_senders 设置为大于 1 的值。 该值至少应与 max_replication_slots 的值相同,加上实例中已使用的发送器的数量。
    • wal_sender_timeout 参数会结束持续时间超过指定毫秒数的非活动复制连接。 Amazon Aurora PostgreSQL 实例的默认值为 30000 milliseconds (30 seconds)。 将该值设置为 0 (zero) 会禁用超时机制,这也是迁移的有效设置。
  • 在目标灵活服务器中,若要防止在线迁移耗尽存储来存储日志,请确保使用预配的托管磁盘的表空间中有足够的存储。 在迁移期间禁用服务器参数 azure.enable_temp_tablespaces_on_local_ssd。 在迁移后将参数还原至原始状态。

配置网络设置

网络设置对于迁移服务正常运行至关重要。 确保源 PostgreSQL 服务器可与 Azure Database for PostgreSQL 中的目标服务器通信。

有关网络设置的信息,请参阅迁移服务的网络方案

启用扩展

要确保使用 Azure Database for PostgreSQL 中的迁移服务成功进行迁移,可能需要验证源 PostgreSQL 实例的扩展。 扩展提供了应用程序可能需要的功能和特征。 在启动迁移过程之前,请确保验证源 PostgreSQL 实例上的扩展。

在 Azure Database for PostgreSQL 灵活服务器的目标实例中,启用在源 PostgreSQL 实例中标识的受支持的扩展。

有关详细信息,请参阅 Azure Database for PostgreSQL 中的扩展

注意

只要更改 shared_preload_libraries 参数,就需要重启。

检查服务器参数

服务器参数不会自动迁移到目标环境,必须手动进行配置。

  • 将源 PostgreSQL 数据库中的服务器参数值与 Azure Database for PostgreSQL 实例进行匹配。 在 Azure 门户中,转到“服务器参数”并手动更新值。

  • 保存参数更改并重启 Azure Database for PostgreSQL 实例以应用新配置(如果需要)。

检查用户和角色

迁移到 Azure Database for PostgreSQL 时,必须单独解决用户和角色的迁移问题,因为它们需要手动干预。

  • 手动迁移用户和角色:用户及其关联的角色必须以手动方式迁移到 Azure Database for PostgreSQL 实例。 为了方便此过程,可以将 pg_dumpall 实用工具与 --globals-only 标志一起使用,以导出角色和用户帐户等全局对象。

    执行以下命令。 将 <username> 替换为实际用户名,并将 <filename> 替换为要用于输出文件的名称。

    pg_dumpall --globals-only -U <username> -f <filename>.sql
    
  • 对超级用户角色的限制:Azure Database for PostgreSQL 不支持超级用户角色。 迁移之前必须移除超级用户权限。 请确保相应地调整权限和角色。

通过完成这些步骤,可以确保用户帐户和角色正确迁移到 Azure Database for PostgreSQL,而不会有与超级用户限制相关的问题。

在目标中禁用高可用性(可靠性)和只读副本

在启动迁移之前,禁用目标环境中的高可用性(可靠性)和只读副本至关重要。 只有在迁移完成后才能启用这些功能。

启动迁移

可以使用 Azure 门户或 Azure CLI 进行迁移。

Azure 门户提供简单直观的基于向导的体验,可引导你完成迁移。 完成本教程中所述的步骤,可以将数据库无缝转移到 Azure Database for PostgreSQL 灵活服务器,并利用其强大的功能和可伸缩性。

若要使用 Azure 门户进行迁移,请先配置迁移任务。 然后连接到源和目标并启动迁移。

配置迁移任务

若要在 Azure 门户中配置迁移任务,请执行以下操作:

  1. 打开 Web 浏览器,并转到 Azure 门户。 输入凭据登录。

  2. 转到你的 Azure Database for PostgreSQL 灵活服务器实例。

  3. 在服务菜单中,选择“迁移”。

    选择“迁移”的屏幕截图。

  4. 选择“创建”,从 Amazon Aurora 迁移到灵活服务器。

    第一次使用迁移服务时,将显示一个空网格,并提示你开始第一次迁移。 如果已创建向灵活服务器目标的迁移,则该网格中会包含有关尝试的迁移的信息。

  5. 选择“创建”,通过一系列选项卡逐步设置迁移。

    Azure 门户中迁移选择的屏幕截图。

安装

输入或选择以下信息:

  • 迁移名称:输入每个到此灵活服务器目标的迁移的唯一标识符。 迁移名称中只能使用字母数字字符和连字符 (-)。 名称不能以连字符开头,它对于目标服务器来说必须是独一无二的。 到同一灵活服务器目标的两个迁移不能同名。

  • 源服务器类型:选择与 PostgreSQL 源相对应的源类型,例如基于云的 PostgreSQL 服务、本地设置或虚拟机。

  • 迁移选项:选择以下选项之一进行预迁移验证:

    • 验证。 检查服务器和数据库就绪情况,以便迁移到目标源。
    • 迁移。 跳过验证并开始迁移。
    • 验证并迁移。 在触发迁移之前执行验证。 仅当未发生验证失败时,才会触发迁移。

    一个好的做法是选择“验证”或“验证并迁移”选项进行预迁移验证。

    有关详细信息,请参阅预迁移验证

  • 迁移模式:选择迁移的模式。 默认选项为“脱机”

选择“下一步: 连接到源”。

屏幕截图显示 Azure 门户中的“迁移设置”选项卡。

选择运行时服务器

迁移运行时服务器是迁移服务的一项专门功能。 运行时服务器在迁移期间充当中介服务器。 它是 Azure Database for PostgreSQL 灵活服务器的一个单独实例,不是目标服务器。 运行时服务器有助于从只能通过专用网络访问的源环境迁移数据库。

有关详细信息,请参阅迁移运行时服务器

“迁移运行时服务器”选项卡的屏幕截图。

连接到源

在“连接到源”选项卡上,输入或选择数据库源的以下信息:

  • 服务器名称 - 输入源 PostgreSQL 实例的主机名或 IP 地址。
  • 端口:输入源服务器的端口号。
  • 服务器管理员登录名:输入源 PostgreSQL 服务器的用户名。
  • 密码:输入源 PostgreSQL 服务器的密码。
  • SSL 模式:支持的值为“Prefer”和“Require”。 当源 PostgreSQL 服务器上的安全套接字层 (SSL) 处于关闭状态时,请选择“Prefer”。 如果源服务器上的 SSL 处于启用状态,请选择“Require”。 SSL 值在 postgresql.conf 文件中设置。
  • 测试连接:启动目标与源之间的连接性测试。 连接成功后,请转到下一步,以确定目标与源之间的网络问题,并验证源的用户名和密码。 建立测试连接需要几分钟时间。

测试连接成功后,选择“下一步: 选择迁移目标”。

屏幕截图显示了“连接到源”选项卡。

选择迁移目标

在“选择迁移目标”选项卡上,除了订阅、资源组和服务器名称之外,还请输入或选择灵活服务器目标的以下信息:

  • 管理员用户名:目标 PostgreSQL 服务器的管理员用户名。
  • 密码:目标 PostgreSQL 服务器的密码。
  • 自定义 FQDN/IP(可选):自定义 FQDN/IP 字段是可选的,可在目标位于自定义 DNS 服务器后面或具有自定义 DNS 命名空间时使用,这使得它只能通过特定的 FQDN 或 IP 地址进行访问。 例如,如果自定义 DNS 服务器包含 DNS 区域 postgres.database.azure.com 或将此区域的查询转发到 168.63.129.16(在 Azure 公共或私有 DNS 区域中解析 FQDN),则这可能包括 flexibleserver.example.com198.1.0.2 或 PostgreSQL FQDN(如 flexibleserver.postgres.database.azure.com)之类的条目。
  • 测试连接:启动目标与源之间的连接性测试。 连接成功后,请转到下一步,以确定目标与源之间的网络问题,并验证目标服务器的用户名和密码。 建立测试连接需要几分钟时间。

测试连接成功后,选择“下一步: 选择要迁移的数据库”。

屏幕截图显示了“连接目标迁移”选项卡。

选择要迁移的数据库

在“选择要迁移的数据库”选项卡上,请从要从源 PostgreSQL 服务器迁移的一系列用户数据库中进行选择。

选择数据库后,选择“下一步: 摘要”。

“选择要迁移的数据库”选项卡的屏幕截图。

总结

“摘要”选项卡汇总了用于创建验证或迁移的所有源和目标详细信息。 查看详细信息,然后选择“开始验证和迁移”。

迁移“摘要”选项卡的屏幕截图。

监视迁移

选择“开始验证和迁移”后,几秒钟内会显示一条通知,指出验证或迁移创建成功。 系统会将你重定向到灵活服务器实例的“迁移”窗格。 状态条目为 InProgress,子状态为 PerformingPreRequisiteSteps。 该工作流需要 2 到 3 分钟来设置迁移基础结构和检查网络连接。

屏幕截图显示了“监视迁移”窗格。

显示迁移的网格包含以下列:

  • Name
  • Status
  • 迁移模式
  • 迁移类型
  • 源服务器
  • 源服务器类型
  • 数据库
  • Duration
  • 开始时间

条目按开始时间降序显示,最新条目位于顶部。 可以选择菜单栏中的“刷新”来刷新验证或迁移运行的状态。

迁移详细信息

在迁移列表中,选择迁移的名称以查看关联的详细信息。

在“设置”选项卡中,选择迁移选项“验证并迁移”。 在这种情况下,将先完成验证,然后再开始迁移。 完成“PerformingPreRequisiteSteps”子状态后,工作流将进入“正在进行验证”子状态。

  • 如果验证出现错误,迁移将进入“失败”状态。

  • 如果验证完成且未出现任何错误,迁移会开始,并且工作流将进入“正在迁移数据”子状态。

可以在实例级别和数据库级别对验证详细信息进行检查:

  • 实例级别的验证:

    • 检查与源版本的连接性检查(PostgreSQL version >= 9.5 服务器参数检查)相关的验证,即是否在 Azure Database for PostgreSQL 灵活服务器实例的服务器参数中启用了扩展。
  • 数据库级别的验证:

    • 检查与 Azure Database for PostgreSQL 灵活服务器中的扩展和排序规则支持相关的对单个数据库的验证。

可以在迁移详细信息窗格中查看迁移和验证的当前状态。

迁移详细信息的屏幕截图。

下表描述了某些可能的迁移状态和子状态。

迁移状态

状态 说明
InProgress 正在设置迁移基础结构,或者正在进行实际数据迁移。
已取消 迁移已被取消或删除。
已失败 迁移失败。
验证失败 验证失败。
成功 迁移成功并且已完成。
WaitingForUserAction 仅适用于在线迁移。 等待用户执行直接转换。

迁移子状态

子状态 说明
PerformingPreRequisiteSteps 正在设置基础结构以进行数据迁移。
验证正在进行 正在进行验证。
MigratingData 数据迁移正在进行中。
CompletingMigration 迁移处于完成的最后阶段。
已完成 迁移已完成。
已失败 迁移失败。

验证子状态

子状态 说明
已失败 验证失败。
成功 验证成功。
警告 验证显示一个警告。

启动直接转换

如果同时出现“迁移”和“验证并迁移”,则完成在线迁移需要执行启动直接切换的额外步骤。 完成基础数据的复制和克隆后,迁移将进入“WaitingForUserAction”状态和“WaitingForCutoverTrigger”子状态。 在这种状态下,用户可以通过选择迁移从门户触发直接转换。

在启动直接转换之前,请务必确保:

  • 已停止写入源。
  • latency 值减小为 0 或接近 0。

可以在迁移详细信息窗格中获取 latency 值:

屏幕截图显示了“直接转换迁移”窗格。

latency 值表示目标上次与源同步的时间。 此时,可以停止写入源并启动直接转换。 如果源服务器上的流量很大,建议先停止写入,以便 latency 能够接近 0。 然后启动直接转换。

直接转换操作会将源中所有挂起的更改应用到目标,并完成迁移。 如果触发直接转换,则即使 latency 为非零值,复制也会在该时间点停止。 在目标上应用直接转换点之前源中的所有数据。 例如,如果直接转换点处的延迟为 15 分钟,则会对目标应用过去 15 分钟内的所有更改数据。 完成直接转换所需的时间取决于这 15 分钟内出现的更改积压工作。 因此,建议在触发直接转换之前,应确保延迟达到零或接近零。

屏幕截图显示了在迁移期间确认直接转换的对话框。

进入“正在迁移数据”子状态或直接转换(在线迁移模式)成功完成后,迁移就会进入“已成功”状态。 如果“正在迁移数据”子状态出现问题,迁移将进入“已失败”状态。

屏幕截图显示了 Azure 门户中一项成功迁移的结果。

验证迁移

数据库迁移完成后,请在源和目标之间手动验证数据。 验证目标数据库中的所有对象是否都已成功创建。

迁移后,可以完成以下任务:

  • 验证灵活服务器上的数据,并确保它是源实例的确切副本。
  • 验证后,根据需要在灵活服务器上启用高可用性选项。
  • 根据应用程序的需求更改灵活服务器的 SKU(版本)。 此更改需要重启数据库服务器。
  • 如果更改了源实例中任何服务器参数的默认值,请将这些服务器参数值复制到灵活服务器。
  • 将标记、警报和防火墙规则(如果适用)等其他服务器设置从源实例复制到灵活服务器。
  • 更改应用程序以将连接字符串指向灵活服务器。
  • 密切监视数据库性能,以查看是否需要进行性能优化。