注意:

使用 pglogical 扩展将 OCI 数据库与 PostgreSQL 跨区域同步

简介

pglogical 扩展支持通过 PostgreSQL 实例跨多个 Oracle Cloud Infrastructure (OCI) 数据库进行逻辑复制。它支持跨版本 PostgreSQL 复制,并促进在 OCI 中跨区域和本地可用性域部署的数据库之间进行数据同步。此外,它还允许在托管在多云提供商的托管 PostgreSQL 服务上的数据库与自托管社区 PostgreSQL 实例之间进行复制,无论这些实例是在云中还是内部部署中运行,都提供了高度灵活且可互操作的复制解决方案。

pglogical 利用发布 - 订阅模型,使逻辑流复制能够将对表、序列和其他对象的更改从发布者复制到订户。此扩展非常适合各种用例,包括:

限制

由于以下限制,pglogical 扩展可能不适用于某些用例:

有关更多信息,请参见 Limitations and Restrictions

目标

Prerequisites

任务 1:在数据库之间建立通信

要跨区域连接到数据库系统,必须设置 VCN 对等连接。

要使用动态路由网关 (DRG) 创建 VCN 对等连接,请执行以下子任务:

任务 1.1:将 DRG 附加到 VCN

  1. 根据您的需要,在源区域和目标区域中创建 VCN。

  2. 根据您的需求在源和目标区域中创建动态路由网关 (DRG)。

  3. 要将 DRG 连接到 VCN,请在源区域中选择您的 DRG。单击 VCN 附加创建虚拟云网络附加

  4. 创建 VCN 附件页中,输入附件名称并选择 VCN-A (源区域 VCN),然后单击创建 VCN 附件

  5. 重复相同的步骤来附加目标 VCN。

有关更多信息,请参见 Dynamic Routing Gateways

任务 1.2:创建远程对等连接 (RPC)

  1. 创建源区域 RPC (SOR-RPC )。

  2. 转到 SOURCE DRG 详细信息页面,然后单击远程对等连接附件

  3. 单击 Create remote peering connection(创建远程对等连接)

  4. 创建远程对等连接页中,输入连接名称并选择区间,然后单击创建远程对等连接

  5. 要创建目标区域 RPC (TAR-RPC ),请重复上述过程以创建目标区域 RPC。

任务 1.3:建立 RPC 连接

通过 SOR-RPC 连接建立从“源”区域到“目标”区域的连接。

  1. 转到 SOURCE DRG 详细信息页面,然后单击远程对等连接附件

  2. 通过单击远程对等连接列中的连接名称来查看 SOR-RPC 的详细信息。

  3. 在连接详细信息页中,单击建立连接,输入连接名称,然后选择区间。

  4. 建立连接页中,选择您的目标区域名称区域,然后输入目标 RPC 的 OCID (TAR-RPC )。建立连接后,RPC 的状态将更改为 PEERED

    因此,TAR-RPC 对等连接状态也更改为 PEERED

任务 1.4:在 VCN 中配置路由表以将流量发送到 DRG 附加

  1. Source-VCN 中配置路由表,以将流量发送到 Target-VCN 专用子网 CIDR。

  2. 转到 Source-VCN 详细信息页,然后单击路由表

  3. 在路由表列表下,单击 route table for private subnet-Source-VCN

  4. 在路由表页中,单击添加路由规则,然后根据您的要求输入路由规则信息。

  5. 要在 Target-VCN 中配置路由表以将流量发送到 Source-VCN 的专用子网 CIDR,请重复上述步骤,为 Source-VCN 的专用子网配置路由表。

任务 1.5:添加安全入站规则以允许通过 DRG 在 VCN 的专用子网之间通信

  1. 将入站规则添加到源 VCN 的专用子网 - 源 -VCN 安全列表,以允许来自 Target-VCN-private 子网到 Source-VCN-private 子网的流量

  2. 转到 Source-VCN 详细信息页,然后单击安全列表专用子网 - 源 -VCN 的安全列表

  3. 安全列表页中,单击添加入站规则,并根据您的要求输入入站规则信息。

  4. 要将入站规则添加到 Target-VCN专用子网 - 目标 -VCN 的安全列表,以允许从 Source-VCN-private 子网到 Target-VCN-private 子网的流量,请重复以上执行的相同步骤,为目标 -VCN 添加入站规则,但使用相应的入站规则。

任务 1.6:跨区域数据库连接测试和验证

连接到 Source-VM 以验证与目标数据库的连接,并同时验证源数据库与目标 VM 的连接,以确保双向通信。

任务 2:配置 A 记录条目

必须配置 A 记录条目以跨区域解析数据库系统的全限定域名 (Fully Qualified Domain Name,FQDN)。在本教程中,孟买区域用作目标区域。

  1. 切换到目标区域(孟买),在搜索栏中输入 DNS ,然后选择专用视图

  2. 将显示当前区域的 VCN 列表。选择已配置 DRG 的 VCN。

  3. 将显示 DNS 区域列表,包括孟买数据库系统的 FQDN。

  4. 为远程数据库系统添加条目。

    1. 单击创建区域

      图像

    2. 区域名称中,输入其他区域 (Ashburn) 中数据库系统的 FQDN。

    3. 单击创建以添加新区域条目。

  5. 配置 A 记录条目。

    1. 打开新创建的区域,单击管理记录并选择添加记录

    2. 输入以下信息。

      • 名称:输入名称。

      • 类型:选择 A (IPv4 Address)

      • TTL:输入 3600 秒(根据应用程序要求进行修改)。

      • RDATA 模式:选择基本

      • 地址:输入数据库系统在另一个区域中的主要端点 IP 地址。

  6. 依次单击保存更改发布更改以应用配置。

    通过此设置,数据库系统 B (Mumbai) 现在可以使用 FQDN 解析并连接到数据库系统 A (Ashburn),从而实现无缝的跨区域数据库通信。

任务 3:跨区域创建数据库系统

在 OCI 的各个区域中部署 PostgreSQL 数据库,以制定强大的灾难恢复 (Disaster Recovery,DR) 策略。有关在 OCI 中创建 PostgreSQL 数据库的更多信息,请参见 Creating a Database System

任务 4:启用跨区域的 pglogical 扩展

本教程通过将阿什本指定为源区域,将孟买指定为目标区域来演示 DR 的实施。

  1. 在阿什本区域中,登录到 OCI 控制台,导航到 PostgreSQL 数据库,选择数据库系统,并通过访问配置文件来修改配置设置。

    图像

  2. 您将被重定向到完整的配置文件。选择复制配置以继续,这将显示以下页。

    图像

  3. 根据您的规格输入所需的信息。然后,导航到用户变量(读/写),单击添加另一个变量,然后分别选择变量名称作为 wal_leveltrack_commit_timestamp,选择变量值作为 logical1

  4. 配置扩展中,选择 pglogical 作为 PostgreSQL 扩展。

  5. 单击创建以生成配置文件。

    图像

  6. 导航到您的数据库系统,在配置下选择编辑,并将以前创建的配置应用于您的数据库系统。

  7. 数据库系统将显示 Updating(更新)状态。等待它变为 Active ,然后继续。

  8. 激活后,登录到数据库系统并使用以下查询验证启用的扩展。

    SHOW oci.admin_enabled_extensions;
    
  9. 使用以下命令创建 pglogical 扩展。

    CREATE EXTENSION pglogical;
    

    下面是命令的输出样例。

    pglogical_source=> show oci.admin_enabled_extensions ;
    oci.admin_enabled_extensions
    ------------------------------
    pglogical
    (1 row)
    
    pglogical_source=> create extension pglogical;
    CREATE EXTENSION
    
  10. 在另一个(孟买)区域数据库中重复相同的过程以启用 pglogical 扩展。

任务 5:配置源数据库

运行以下查询以向源数据库授予启用逻辑复制的权限。

alter role psql with replication;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_reset() to psql ;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql ;
grant all on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql;

请注意,“psql”是在数据库设置过程中创建的示例用户。

任务 6:在源数据库中设置 pglogical Extension Replication

  1. 在源数据库上创建发布者节点。

    SELECT pglogical.create_node(node_name := 'provider1',dsn :='host=primary.xxxxxxxxx.postgresql.us-ashburn-1.oci.oraclecloud.com port=5432 user=xxxx password=xxxxx dbname=pglogical_source');
    
    • node_name: 指定要在源数据库上创建的发布者的名称。
    • host: 输入源数据库的全限定域名 (FQDN)。
    • port_number: 提供运行源数据库的端口。
    • database_name: 指定将在其中创建发布的数据库。
  2. 将公共方案中的所有表都包括在默认复制集中。

    SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
    

任务 7:配置目标数据库

运行以下查询以向目标数据库授予启用逻辑复制的权限。

alter role psql with replication;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_reset() to psql ;
grant EXECUTE on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql ;
grant all on FUNCTION pg_catalog.pg_replication_origin_session_setup to psql;

请注意,“psql”是在数据库设置过程中创建的示例用户。

在授予必要的权限后,复制目标数据库中的所有必需对象以匹配源数据库结构。

任务 8:在目标数据库中设置 pglogical 复制

  1. 在目标数据库上创建订户节点。

    SELECT pglogical.create_node(node_name := 'subscriber1',dsn :='host=primary.xxxxxxx.postgresql.ap-mumbai-1.oci.oraclecloud.com port=5432 user=xxxx password=xxxxx dbname=pglogical_target');
    
    • node_name: 定义目标数据库上订户的名称。
    • host: 输入目标数据库的全限定域名 (FQDN)。
    • port_number: 输入运行目标数据库的端口。
    • database_name: 提供要在其中创建订阅的数据库的名称。
  2. 在订户节点上创建订阅,该订阅将启动后台同步和复制流程。

    SELECT pglogical.create_subscription(subscription_name := 'subscription1',provider_dsn := 'host=primary.xxxxxxxx.postgresql.us-ashburn-1.oci.oraclecloud.com port=5432 user=xxxx password=xxxxxx dbname=pglogical_source sslmode=verify-full sslrootcert=/etc/opt/postgresql/ca-bundle.pem');
    
    SELECT pglogical.wait_for_subscription_sync_complete('subscription1');
    
    • subscription_name: 提供订阅的名称。
    • host: 提供源数据库的 FQDN。
    • port_number: 提供运行目标数据库的端口。
    • database_name: 提供源数据库的名称。

    注:请确保在订阅创建字符串中使用 sslmode=verify-fullsslrootcert = /etc/opt/postgresql/ca-bundle.pem,以防止任何连接失败。

任务 9:验证订阅状态

运行以下语句检查您的订阅在目标数据库上的状态。

select * from pglogical.show_subscription_status();

任务 10:检验数据复制是否正在运行

运行以下语句以检查源数据库上的复制状态。

SELECT * FROM pg_stat_replication;

任务 11:(可选)停止或启动复制

注:subscription_name 中,输入在目标处创建的订阅的名称。

任务 12:(可选)删除订阅

要删除目标数据库上的订阅,请运行以下命令。

select pglogical.drop_subscription('subscription_name');

注:subscription_name 中,输入在目标处创建的订阅的名称。

疑难解答

后续步骤

本教程提供了在 OCI 数据库中跨区域实施 DR 解决方案的综合方法,其中 PostgreSQL 使用 pglogical 扩展。它涵盖了配置过程、数据复制以及常见问题的故障排除。

此外,此方法可以应用于 PostgreSQL 升级,确保最短停机时间,并在目标数据库与源完全同步后实现顺畅的应用程序切换。

确认

更多学习资源

通过 docs.oracle.com/learn 浏览其他实验室,或者通过 Oracle Learning YouTube 频道访问更多免费学习内容。此外,请访问 education.oracle.com/learning-explorer 以成为 Oracle Learning Explorer。

有关产品文档,请访问 Oracle 帮助中心