附註:

使用 pglogical Extension 將 OCI 資料庫與 PostgreSQL 進行跨區域同步化

簡介

此 pglogical 擴充可跨多個 Oracle Cloud Infrastructure (OCI) 資料庫與 PostgreSQL 執行處理進行邏輯複寫。它支援跨版本 PostgreSQL 複製,並可協助在 OCI 內跨區域和本機可用性網域部署的資料庫之間進行資料同步。此外,它允許在多雲端供應商管理的 PostgreSQL 服務和自行管理的社群 PostgreSQL 執行處理 (無論是在雲端或內部部署環境中執行) 之間進行資料庫複寫,提供高度彈性且互通的複寫解決方案。

使用發佈 - 訂閱模型,pglogical 可讓邏輯串流複製將變更複製到訂閱者的表格、序列和其他物件。此擴充功能適用於各種使用案例,包括:

限制

由於下列限制,pglogical 延伸可能不適用於特定使用案例:

如需詳細資訊,請參閱限制與限制

目標

必備條件

工作 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。

如需詳細資訊,請參閱動態路由閘道

工作 1.2:建立遠端對等互連連線 (RPC)

  1. 建立來源區域 RPC (SOR-RPC)。

  2. 移至 SOURCE DRG 詳細資訊頁面,然後按一下遠端對等互連連線附件

  3. 按一下建立遠端對等互連連線

  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. 在路由表清單中,按一下專用子網路 - 來源 -VCN 的路由表

  4. 在路由表頁面中,按一下新增路由規則,然後根據您的需求輸入路由規則資訊。

  5. 若要在 Target-VCN 中設定路由表,以將流量傳送至來源 VCN 的專用子網路 CIDR,請重複上述步驟,為來源 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 記錄項目,才能解決跨區域的資料庫系統完整網域名稱 (FQDN)。在本教學課程中,孟買區域為目標區域。

  1. 切換至目標區域 (孟買),在搜尋列中輸入 DNS ,然後選取專用檢視

  2. 將會顯示目前區域的 VCN 清單。選取已經設定 DRG 的 VCN。

  3. 將會顯示 DNS 區域清單,包括孟買資料庫系統的 FQDN。

  4. 新增遠端資料庫系統項目。

    1. 按一下建立區域

      圖像

    2. 區域名稱中,輸入其他區域 (阿什本) 中資料庫系統的 FQDN。

    3. 按一下建立,即可新增區域項目。

  5. 配置 A 記錄項目。

    1. 開啟新建立的區域,按一下管理記錄,然後選取新增記錄

    2. 請輸入下列資訊。

      • 名稱:輸入名稱。

      • 類型:選取 A (IPv4 位址)

      • TTL:輸入 3600 秒 (根據您的應用程式需求進行修改)。

      • 資料模式:選取基本

      • 位址:輸入其他區域中資料庫系統的主要端點 IP 位址。

  6. 按一下儲存變更,然後按一下發布變更以套用組態。

    使用此設定,資料庫系統 B (孟買) 現在可以使用 FQDN 解析並連線至資料庫系統 A (阿什本),以實現無縫接軌的跨區域資料庫通訊。

作業 3:跨區域建立資料庫系統

在 OCI 的各個區域部署 PostgreSQL 資料庫,以建立健全的災害復原 (DR) 策略。如需有關在 OCI 中建立 PostgreSQL 資料庫的詳細資訊,請參閱建立資料庫系統

任務 4:啟用跨區域的邏輯延伸

本教學課程示範將 Ashburn 指定為來源區域,並將孟買指定為目標區域,以導入災害復原。

  1. 在阿什本區域中,登入 OCI 主控台、瀏覽至 PostgreSQL 資料庫、選取資料庫系統,以及存取組態檔來修改組態設定值。

    圖像

  2. 系統會將您重新導向至完整的組態檔。選取複製組態以繼續進行作業,將會顯示下列頁面。

    圖像

  3. 根據您的規格輸入必要資訊。然後,導覽至使用者變數 (讀取 / 寫入) ,按一下新增其他變數,然後將變數名稱分別選取為 wal_leveltrack_commit_timestamp,並將變數值分別選取為 logical1

  4. 設定擴充功能中,選取 pglogical 作為 PostgreSQL 副檔名。

  5. 按一下建立,即可產生組態檔。

    圖像

  6. 瀏覽至您的資料庫系統,選取組態底下的編輯,然後將先前建立的組態套用至您的資料庫系統。

  7. 資料庫系統將會顯示更新狀態。請等到它變成作用中後再繼續。

  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. 在另一個 (孟買) 區域資料庫中重複相同的程序,以啟用邏輯擴充。

作業 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 Replication

  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 中,輸入在目標建立的訂閱名稱。

疑難排解

接下來的步驟

本教學課程提供使用 pglogical 擴充功能,在 OCI Database 中跨區域導入 DR 解決方案及使用 PostgreSQL 的全方位方法。課程內容涵蓋組態處理作業、資料複製及疑難排解常見問題。

此外,此方法可套用至 PostgreSQL 升級,確保最短停機時間,並在目標資料庫與來源完全同步後,讓應用程式切換變得順暢。

確認

其他學習資源

docs.oracle.com/learn 上探索其他實驗室,或在 Oracle Learning YouTube 頻道上存取更多免費學習內容。此外,請造訪 education.oracle.com/learning-explorer 以成為 Oracle Learning Explorer。

如需產品文件,請造訪 Oracle Help Center