你当前正在访问 Microsoft Azure Global Edition 技术文档网站。 如果需要访问由世纪互联运营的 Microsoft Azure 中国技术文档网站,请访问 https://docs.azure.cn

将 Azure Database for PostgreSQL 迁移到另一个区域

本文提供了在没有区域对可用于复制和异地还原的地理位置之间迁移 Azure Database for PostgreSQL 单一服务器和灵活服务器的迁移指导。

出于多种原因,你可能希望将现有 Azure 资源从一个区域移到另一个区域。 你可以采取以下建议:

  • 利用新的 Azure 区域。
  • 部署仅在特定区域可用的功能和服务。
  • 满足内部策略和治理要求。
  • 与公司合并和收购保持一致
  • 满足容量计划要求。

若要了解如何迁移 Azure Cosmos DB for PostgreSQL(以前称为 Azure Database for PostgreSQL - 超大规模 (Citus)),请参阅 Azure Cosmos DB for PostgreSQL 中的只读副本

有关原生复制支持的区域对的概述,请参阅跨区域复制

先决条件

先决条件仅适用于具有数据时的重新部署。 若要移动没有数据的数据库,可以跳到准备

  • 若要将包含数据的 PostgreSQL 从一个区域迁移到另一个区域,必须有额外的计算资源来运行备份和还原工具。 本指南中的示例使用运行 Ubuntu 20.04 LTS 的 Azure VM。 计算资源必须:
    • 通过专用网络或通过包含在防火墙规则中建立与源服务器和目标服务器的网络连接。
    • 位于源或目标区域中。
    • 使用加速网络(如果可用)。
    • 数据库内容不会保存到任何中间存储;逻辑备份工具的输出将被直接发送到目标服务器。
  • 根据你的 Azure Database for PostgreSQL 实例的设计,在迁移之前,可能需要在目标区域中部署和配置以下依赖资源:

停机时间

要了解可能涉及的故障时间,请参阅面向 Azure 的云采用框架:选择重定位方法

准备

若要开始,请导出资源管理器模板。 此模板包含描述自动化命名空间的设置。

  1. 登录 Azure 门户

  2. 选择“所有资源”,然后选择你的自动化资源

  3. 选择“导出模板”。

  4. 选择“导出模板”页中的“下载”。

  5. 找到从门户下载的 .zip 文件,并将该文件解压缩到你选择的某个文件夹中。

    此 zip 文件包含 .json 文件,后者包括模板和用于部署模板的脚本。

在没有数据的情况下重新部署

  1. 调整导出的模板参数以匹配目标区域。

重要

目标服务器必须与源服务器具有不同的名称。 必须重新配置客户端以指向新服务器。

  1. 将模板重新部署到新区域。 有关如何使用 ARM 模板创建 Azure Database for PostgreSQL 的示例,请参阅快速入门:使用 ARM 模板创建 Azure Database for PostgreSQL 灵活服务器

在具有数据的情况下重新部署

Azure Database for PostgreSQL 的带数据迁移的重新部署基于逻辑备份和还原,并且需要使用原生工具。 因此,还原期间可能会有明显的停机时间。

提示

你可以使用 Azure 门户来迁移 Azure Database for PostgreSQL 灵活服务器。 若要了解如何为单一服务器执行复制,请参阅使用 Azure 门户将 Azure Database for PostgreSQL 灵活服务器移动到另一个区域

  1. 调整导出的模板参数以匹配目标区域。

重要

目标服务器名称必须不同于源服务器名称。 必须重新配置客户端以指向新服务器。

  1. 将模板重新部署到新区域。 有关如何使用 ARM 模板创建 Azure Database for PostgreSQL 的示例,请参阅快速入门:使用 ARM 模板创建 Azure Database for PostgreSQL 灵活服务器

  2. 在为迁移预配的计算资源上,安装要迁移的 PostgreSQL 版本的 PostgreSQL 客户端工具。 以下示例在运行 Ubuntu 20.04 LTS 的 Azure VM 上使用 PostgreSQL 版本 13:

      sudo sh -c 'echo "deb http://apt.postgresql.org/pub/repos/apt $(lsb_release -cs)-pgdg main" > /etc/apt/sources.list.d/pgdg.list'
      wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add -
      sudo apt-get update
      sudo apt-get install -y postgresql-client-13
    

    有关在 Ubuntu 中安装 PostgreSQL 组件的详细信息,请参阅 Linux 下载 (Ubuntu)

    对于其他平台,请转到 PostgreSQL 下载

  3. (可选)如果你在源服务器中创建了其他角色,请在目标服务器中创建它们。 若要获取现有角色的列表,请使用以下查询:

    select *
    from pg_catalog.pg_roles
    where rolename not like 'pg_%' and rolename not in ('azuresu', 'azure_pg_admin', 'replication')
    order by rolename;
    
  4. 若要迁移每个数据库,请执行以下步骤:

    1. 停止源服务器上的所有数据库活动。
    2. 替换以下脚本中的凭据信息、源服务器、目标服务器和数据库名称:
        export USER=admin_username
        export PGPASSWORD=admin_password
        export SOURCE=pgsql-arpp-source.postgres.database.azure.com
        export TARGET=pgsql-arpp-target.postgres.database.azure.com
        export DATABASE=database_name
        pg_dump -h $SOURCE -U $USER --create --exclude-schema=pg_catalog $DATABASE | psql -h $TARGET -U $USER postgres
    
    1. 若要迁移数据库,请运行该脚本。

    2. 配置客户端以指向目标服务器。

    3. 对应用程序执行功能测试。

      1. 确保 ignoreMissingVnetServiceEndpoint 标志设置为 False,这样,当目标区域中未配置服务终结点时,IaC 无法部署数据库。