全部產品
Search
文件中心

ApsaraDB RDS:邏輯複製(pglogical)

更新時間:Oct 30, 2024

pglogical是一個完全作為PostgreSQL擴充實現的邏輯複製系統,為PostgreSQL資料庫提供了邏輯流複製發布和訂閱的功能。

前提條件

  • RDS PostgreSQL執行個體大版本為10或以上。

    說明

    暫不支援RDS PostgreSQL 17。

  • 執行個體核心小版本為20230830或以上。

    重要

    20230830核心小版本之前已支援此外掛程式,但為了規範外掛程式管理,提升RDS PostgreSQL在外掛程式側的安全防護,RDS計劃在核心版本迭代中陸續對部分存在安全風險的外掛程式進行最佳化,部分外掛程式在低核心小版本無法建立,更多資訊,請參見【產品/功能變更】RDS PostgreSQL限制建立外掛程式說明

    • 如果您的執行個體核心小版本低於20230830,且已經使用了此外掛程式,則不影響使用。

    • 如果您首次建立或重新建立此外掛程式,請升級核心小版本到最新。

  • 使用該外掛程式前,需要將pglogical加入到shared_preload_libraries參數中。

    您可以使用RDS PostgreSQL參數設定功能,為shared_preload_libraries參數添加pglogical。具體操作,請參見設定執行個體參數

    說明

    該參數修改後,在提交參數時會立即重啟執行個體。重啟執行個體會造成串連中斷,重啟前請做好業務安排,並確保應用有自動重連機制,謹慎操作。

背景資訊

pglogical是PostgreSQL的拓展模組,使用發布/訂閱模型複製資料,使選擇性複製更加高效。提供比Slony、Bucardo或Londiste更快的複製速度,支援跨版本升級。支援多情境複製,具體包括:

  • 資料庫大版本升級。

  • 完整的資料庫複寫。

  • 利用複製集,選擇性地篩選表、行、列。

  • 可從多個上遊伺服器,用於資料的聚集和合并。

使用外掛程式

  • 開啟pglogical。

    CREATE EXTENSION pglogical;
  • 關閉pglogical。

    DROP EXTENSION pglogical;

快速配置邏輯流複製

  1. 在發布端建立發布節點。

    說明

    發布節點中host固定配置為127.0.0.1,port請通過SQL命令SHOW PORT;查詢擷取。

    SELECT pglogical.create_node(
        node_name := 'provider',
        dsn := 'host=127.0.0.1 port=<連接埠號碼> dbname=test user=provider_user password=provider_pass'
    );
  2. 配置複製集。

    將public中的所有表添加到default複製集。

    SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
    說明
    • 複製集用來控制將發布節點資料庫中的哪些表以及這些表上的哪些操作發布給訂閱者。

    • default複製集表示發布所有表及這些表的所有操作。更多複製集定義請參見pglogical官方文檔

  3. 在訂閱端建立訂閱節點。

    說明

    訂閱節點中host固定配置為127.0.0.1,port請通過SQL命令SHOW PORT;查詢擷取

    SELECT pglogical.create_node(
        node_name := 'subscriber',
        dsn := 'host=127.0.0.1 port=<連接埠號碼> dbname=test user=subscriber_user password=subscriber_pass'
    );
  4. 在訂閱端建立訂閱。

    說明
    • 訂閱中host必須配置為發布端的內網地址,例如pgm-****.pg.rds.aliyuncs.comport配置為發布端內網連接埠

    • 您可以前往RDS管理主控台查看內網地址內網連接埠,具體操作請參見查看或修改串連地址和連接埠

    SELECT pglogical.create_subscription(
        subscription_name := 'subscription',
        provider_dsn := 'host=<provider內網地址> port=<provider內網連接埠> dbname=test user=provider_user password=provider_pass'
    );

    建立訂閱後,將在後台啟動同步和複製流程。

相關參考

pglogical的詳細說明,請參見pglogical官方文檔