适用于: Azure Database for PostgreSQL - 灵活服务器
本文介绍如何使用 Microsoft Azure 门户和 Azure CLI 将 PostgreSQL 实例从本地或 Azure 虚拟机 (VM) 迁移到 Azure Database for PostgreSQL 灵活服务器。
Azure Database for PostgreSQL 中的迁移服务是集成到 Microsoft Azure 门户和 Azure CLI 中的完全托管服务。 它旨在简化迁移到 Azure Database for PostgreSQL 灵活服务器的过程。
- 配置你的 Azure Database for PostgreSQL 灵活服务器
- 配置迁移任务
- 监视迁移
- 完成后检查迁移
如要开始迁移,需满足以下先决条件:
在开始使用 Azure Database for PostgreSQL 迁移服务进行迁移之前,必须满足以下专为联机迁移方案规定的先决条件。
源 PostgreSQL 服务器版本必须为 9.5 或更高。
如果源 PostgreSQL 版本低于 9.5,请在开始迁移之前将其升级到 9.5 或更高版本。
test_decoding 通过逻辑解码机制接收 WAL,并将其解码为所执行操作的文本表示形式。
有关 test-decoding 插件的详细信息,请参阅 PostgreSQL 文档
- 在迁移之前,必须创建 Azure Database for PostgreSQL - 灵活服务器。
- 为 Azure Database for PostgreSQL - 灵活服务器预配的 SKU 应与源匹配。
- 若要创建新的 Azure Database for PostgreSQL,请访问创建 Azure Database for PostgreSQL - 灵活服务器实例
- 跨 PostgreSQL 版本(主要或次要版本)进行迁移时,请查看发行说明,了解潜在的重大更改,确保数据库和应用程序之间的兼容性。
test_decoding
逻辑解码插件从源捕获已更改的记录。- 在源 PostgreSQL 实例中,在 postgresql.conf 配置文件中设置以下参数和值:
Set wal_level = logical
Set max_replication_slots
为大于 1 的值,该值应大于选择进行迁移的数据库数量。Set max_wal_senders
为大于 1 的值,该值应至少设置为与 max_replication_slots 相同的值加上实例已使用的发件人数。wal_sender_timeout
参数将结束持续时间超过指定毫秒数的非活动复制连接。 本地 PostgreSQL 数据库的默认值为 60000 毫秒(60 秒)。 将该值设置为 0(零)会禁用超时机制,这也是迁移的有效设置。
要防止联机迁移遇到空间不足问题,请使用预配的托管磁盘确保具有足够的表空间。 为此,请在迁移期间在灵活服务器上禁用服务器参数 azure.enable_temp_tablespaces_on_local_ssd
,并在迁移后将其还原到原始状态。
网络设置对于迁移服务正常运行至关重要。 确保源 PostgreSQL 服务器可与目标 Azure Database for PostgreSQL 服务器通信。 以下网络配置对于成功迁移至关重要。
有关网络设置的信息,请访问迁移服务的网络指南。
- 其他网络注意事项:
pg_hba.conf 配置:为了促进源与目标 PostgreSQL 实例之间的连接,必须验证 pg_hba.conf 文件并对其进行可能的修改。 此文件包括客户端身份验证,必须配置为允许目标 PostgreSQL 连接到源。 对 pg_hba.conf 文件的更改通常需要重启源 PostgreSQL 实例才能生效。
pg_hba.conf 文件位于 PostgreSQL 安装的数据目录中。 如果源数据库是本地 PostgreSQL 服务器或 Azure VM 上托管的 PostgreSQL 服务器,则应检查并配置此文件。
要确保使用 Azure Database for PostgreSQL 中的迁移服务成功进行迁移,可能需要验证源 PostgreSQL 实例的扩展。 扩展提供了应用程序可能需要的功能和特征。 在启动迁移过程之前,请确保验证源 PostgreSQL 实例上的扩展。
在 Azure Database for PostgreSQL 灵活服务器的目标实例中,启用在源 PostgreSQL 实例中标识的受支持的扩展。
有关详细信息,请参阅 Azure Database for PostgreSQL 中的扩展。
备注
只要更改 shared_preload_libraries
参数,就需要重启。
- 需要根据源中配置的服务器参数值,在 Azure Database for PostgreSQL - 灵活服务器中手动配置服务器参数值。
- 必须将用户和不同的角色手动迁移到 Azure Database for PostgreSQL – 灵活服务器。 若要迁移用户和角色,可以使用
pg_dumpall --globals-only -U <<username> -f <<filename>>.sql
。 - Azure Database for PostgreSQL - 灵活服务器不支持任何超级用户;迁移之前,需要移除具有超级用户角色的用户。
可以使用 Azure 门户或 Azure CLI 进行迁移。
本文介绍如何使用 Azure 门户将 PostgreSQL 数据库从 Azure VM 或本地 PostgreSQL 服务器迁移到 Azure Database for PostgreSQL。 你可以使用 Azure 门户执行各种任务,包括数据库迁移。 可以按照本教程中所述的步骤将数据库无缝转移到 Azure,并利用其强大功能和可伸缩性。
该迁移服务在 Microsoft Azure 门户中提供了一种基于向导的简单体验。 下面介绍如何开始:
打开 Web 浏览器并转到门户。 输入凭据登录。 默认视图是服务仪表板。
转到你的 Azure Database for PostgreSQL 灵活服务器目标。
在灵活服务器的“概述”选项卡的左侧菜单中,向下滚动到“迁移”并将其选中。
选择“创建”按钮,以从 Azure 虚拟机 (VM) 或本地 PostgreSQL 服务器迁移到灵活服务器。 第一次使用迁移服务时,将会显示一个空网格,并提示你开始第一次迁移。
如果已创建向灵活服务器目标的迁移,则该网格中会包含有关尝试的迁移的信息。
选择“创建”按钮。 然后,你会通过一系列基于向导的选项卡来创建从 PostgreSQL 源服务器到此灵活服务器目标的迁移。
第一个选项卡是“设置”选项卡,用户通过提供迁移名称和源类型等迁移详细信息来启动迁移。
“迁移名称”是每个到此灵活服务器目标的迁移的唯一标识符。 此字段仅接受字母数字字符,不接受除连字符 (-) 之外的任何特殊字符。 名称不能以连字符开头,并且对于目标服务器应是唯一的。 到同一灵活服务器目标的两个迁移不能同名。
源服务器类型 - 根据 PostgreSQL 源,可以选择“Azure VM 或本地”。
借助迁移选项,可以在在触发迁移之前执行验证。 可以选择以下任一选项:
- 验证 - 检查服务器和数据库就绪情况,以便迁移到目标。
- 迁移 - 跳过验证并开始迁移。
- 验证并迁移 - 在触发迁移之前执行验证。 仅当未发生验证失败时,才会触发迁移。
在运行迁移之前,选择“验证”或“验证并迁移”选项始终是执行预迁移验证时的良好做法。 若要详细了解迁移前验证,请参阅此文档。
“迁移模式”允许选择迁移的模式。 “脱机”是默认选项。
选择“下一步: 连接到源”按钮。
迁移运行时服务器是 Azure Database for PostgreSQL 中的迁移服务中的一项专用功能,旨在充当迁移期间的中间服务器。 它是一个单独的 Azure Database for PostgreSQL 灵活服务器实例,该实例不是目标服务器,而是用于帮助从只能通过专用网络访问的源环境迁移数据库。
有关运行时服务器的详细信息,请访问迁移运行时服务器。
“连接到源”选项卡会提示你提供与“设置”选项卡中选择的源相关的详细信息,该源是数据库的源。
- 服务器名称 - 提供源 PostgreSQL 实例的主机名或 IP 地址
- 端口 - 源服务器的端口号
- 服务器管理员登录名 - 源 PostgreSQL 服务器的用户名
- 密码 - 源 PostgreSQL 服务器的密码
- SSL 模式 - 支持的值是首选值,也是必需值。 当源 PostgreSQL 服务器上的 SSL 为“关”时,请使用 SSLMODE=prefer。 如果源服务器上的 SSL 为“开”,请使用 SSLMODE=require。 SSL 值可以在 postgresql.conf 文件中确定。
- 测试连接 - 执行目标与源之间的连接测试。 连接成功后,用户可以继续执行下一步操作。 否则,你需要确定目标与源之间的网络问题,并验证源的用户名/密码。 测试连接需要几分钟时间才能在目标与源之间建立连接
测试连接成功后,选择“下一步: 选择迁移目标”
“选择迁移目标”选项卡显示灵活服务器目标的元数据,例如订阅名称、资源组、服务器名称、位置和 PostgreSQL 版本。
- 管理员用户名 - 目标 PostgreSQL 服务器的管理员用户名
- 密码 - 目标 PostgreSQL 服务器的密码
- 自定义 FQDN/IP(可选):自定义 FQDN/IP 字段是可选的,可在目标位于自定义 DNS 服务器后面或具有自定义 DNS 命名空间时使用,这导致只能通过特定的 FQDN 或 IP 地址对它进行访问。 例如,如果自定义 DNS 服务器包含 DNS 区域
postgres.database.chinacloudapi.cn
或将此区域的查询转发到168.63.129.16
(在 Azure 公共或私有 DNS 区域中解析 FQDN),则这可能包括flexibleserver.example.com
、198.1.0.2
或 PostgreSQL FQDN(如flexibleserver.postgres.database.chinacloudapi.cn
)之类的条目。 - 测试连接 - 执行目标与源之间的连接测试。 连接成功后,用户可以继续执行下一步操作。 否则,我们需要确定目标与源之间的网络问题,并验证目标的用户名/密码。 该测试连接需要几分钟时间才能在目标与源之间建立连接。
测试连接成功后,选择“下一步: 选择要迁移的数据库”
在此选项卡下,用户数据库列表位于设置选项卡中选择的源服务器内。可以在一次迁移尝试中选择和迁移最多 8 个数据库。 如果用户数据库超过 8 个,则会在源服务器和目标服务器之间针对下一组数据库重复迁移过程。
选择数据库后,选择“下一步: 摘要”
“摘要”选项卡汇总了用于创建验证或迁移的所有源和目标详细信息。 查看详细信息,然后选择开始按钮。
选择“开始”按钮后,会在几秒钟内显示一条通知,指出验证或迁移创建已成功。 将自动重定向到灵活服务器的“迁移”边栏选项卡,该边栏选项卡具有最近创建的验证或迁移的新条目。
显示迁移的网格将包含以下列:“名称”、“状态”、“迁移模式”、“迁移类型”、“源服务器”、“源服务器类型”、“数据库”、“持续时间”和“开始时间”。 条目按开始时间降序显示,最新条目位于顶部。 可以使用“刷新”按钮刷新验证或迁移的状态。 在网格中选择迁移名称以查看关联的详细信息。
创建验证或迁移后,它会进入“InProgress”状态和“PerformingPreRequisiteSteps”子状态。 该工作流需要 2 到 3 分钟来设置迁移基础结构和网络连接。
在“设置”选项卡中,我们已选择迁移选项“迁移并验证”。 在这种情况下,将先执行验证,然后再执行迁移。 完成“PerformingPreRequisiteSteps”子状态后,工作流将进入“正在进行验证”子状态。
- 如果验证出现错误,迁移将进入“失败”状态。
- 如果验证完成且未出现任何错误,迁移会开始,并且工作流将进入“正在迁移数据”子状态。
验证结果显示在“验证”选项卡下,并在“迁移”选项卡下监视迁移。
部分可能的迁移状态:
状态 | 说明 |
---|---|
InProgress | 正在设置迁移基础结构,或者正在进行实际数据迁移。 |
已取消 | 迁移已被取消或删除。 |
已失败 | 迁移失败。 |
验证失败 | 验证失败。 |
成功 | 迁移成功并已完成。 |
WaitingForUserAction | 仅适用于联机迁移。 等待用户操作以执行直接转换。 |
子状态 | 说明 |
---|---|
PerformingPreRequisiteSteps | 正在设置基础结构以进行数据迁移。 |
验证正在进行 | 正在进行验证。 |
MigratingData | 数据迁移正在进行中。 |
CompletingMigration | 迁移处于完成的最后阶段。 |
已完成 | 迁移已完成。 |
已失败 | 迁移失败。 |
子状态 | 说明 |
---|---|
已失败 | 验证失败。 |
成功 | 验证成功。 |
警告 | 验证处于警告状态。 |
如果同时存在“迁移”和“验证并迁移”,则需要执行另一个步骤才能完成联机迁移 - 用户必须执行直接转换操作。 完成基本数据的复制/克隆后,迁移会进入 WaitingForUserAction
状态和 WaitingForCutoverTrigger
子状态。 在这种状态下,用户可以通过选择迁移从门户触发直接转换。
在启动直接转换之前,请务必确保:
- 已停止写入源 -
Latency
值为 0 或接近 0。 可以从迁移详细信息屏幕中获取Latency
信息,如下所示: latency
值减小为 0 或接近 0latency
值表示目标上次与源同步的时间。 此时,可以停止写入源并启动直接转换。 如果源中存在大量流量,建议先停止写入,以便Latency
可以接近 0,然后启动直接转换。
直接转换操作会将源中所有挂起的更改应用到目标,并完成迁移。 如果触发“直接转换”,则即使 Latency,
非零,复制也会在该时间点之前停止。 然后会在目标上应用直接转换点之前源中的所有数据。 如果在直接转换点处的延迟为 15 分钟,则会向目标应用过去 15 分钟内的所有更改数据。
所需时间取决于过去 15 分钟内发生的更改积压工作。 因此,建议在触发直接转换之前,延迟应达到零或接近零。
- 进入
Migrating Data
子状态或直接转换(联机迁移中)成功完成后,迁移将进入Succeeded
状态。 如果Migrating Data
子状态出现问题,迁移将进入Failed
状态。
可以取消任何正在进行的验证或迁移。 工作流必须处于 InProgress 状态才能取消。 无法取消处于“成功”或“失败”状态的验证或迁移。
取消验证会停止任何进一步的验证活动,并且验证会进入“已取消”状态。
取消迁移会停止目标服务器上的进一步迁移活动,并进入“已取消”状态。 此操作不会删除或回滚目标服务器上的任何更改。 请确保删除取消迁移所涉及的目标服务器上的数据库。
完成数据库后,需要人工在源和目标之间验证数据,并确认目标数据库中的所有对象都已成功创建。
迁移后,可以执行以下任务:
- 验证灵活服务器上的数据,并确保它是源实例的确切副本。
- 验证后,根据需要在灵活服务器上启用高可用性选项。
- 根据应用程序的需求更改灵活服务器的 SKU。 需要重启数据库服务器才能使此更改生效。
- 如果更改了源实例中任何服务器参数的默认值,请将这些服务器参数值复制到灵活服务器中。 将标记、警报和防火墙规则(如果适用)等其他服务器设置从源实例复制到灵活服务器。
- 更改应用程序以将连接字符串指向灵活服务器。
- 密切监视数据库性能,以查看是否需要进行性能优化。