Pglogical 複製概述

wongchaofan發表於2024-07-27

pglogical 擴充套件使用釋出/訂閱模組為 PostgreSQL 提供邏輯流複製。它基於作為 BDR 專案的一部分開發的技術。

我們使用以下術語來描述節點之間的資料流,有意重複使用早期的 Slony 技術:

  • 節點 - PostgreSQL 資料庫例項
  • 提供者和訂閱者 - 節點承擔的角色
  • 複製集——表的集合
pglogical 是利用最新核心功能的新技術,因此我們有以下版本限制:
  • 提供者和訂閱者節點必須執行 PostgreSQL 9.4+
  • 複製源過濾和衝突檢測需要 PostgreSQL 9.5+
  • 此外,訂閱者可以是 Postgres-XL 9.5+
支援的用例包括:
  • 主要版本之間的升級(考慮到上述限制)
  • 完整資料庫複製
  • 使用複製集選擇性地複製表集
  • 在釋出者或訂閱者端選擇性複製錶行(row_filter)
  • 釋出者端表列的選擇性複製
  • 從多個上游伺服器收集/合併資料
架構細節:
  • pglogical 在每個資料庫級別上工作,而不是像物理流複製那樣在整個伺服器級別工作
  • 一個提供程式可以為多個訂閱程式提供服務,而不會產生額外的磁碟寫入開銷
  • 一個訂閱者可以合併來自多個來源的更改,並使用自動和可配置的衝突解決方案檢測更改之間的衝突(多主所需的一些但不是所有方面)。
  • 級聯複製以變更集轉發的形式實現。

1.要求

要使用 pglogical,提供商和訂閱者必須執行 PostgreSQL 9.4 或更新版本。
提供商和訂閱者都必須安裝此 pglogical 擴充套件程式。您必須 CREATE EXTENSION pglogical在兩者上都安裝 。
提供方和訂閱方的表必須具有相同的名稱並採用相同的架構。未來的修訂版本可能會新增對映功能。
提供者和訂閱者上的表必須具有相同的列,並且每列的資料型別相同。 訂閱者上的CHECK約束、 NOT NULL 限制等必須與提供者上的相同或更弱(更寬鬆)。

2. 使用方法

本節介紹 pglogical 複製擴充套件的基本用法。

2.1 快速設定

首先,必須正確配置 PostgreSQL 伺服器以支援邏輯解碼:
wal_level = 'logical'
max_worker_processes = 10   # one per database needed on provider node
                            # one per node needed on subscriber node
max_replication_slots = 10  # one per node needed on provider node
max_wal_senders = 10        # one per node needed on provider node
shared_preload_libraries = 'pglogical'

如果您使用的是 PostgreSQL 9.5+(這在 9.4 上不起作用)並且想要透過最後/第一個更新獲勝來處理衝突解決(請參閱 下面的衝突),您可以將這個附加選項新增到 postgresql.conf:

track_commit_timestamp = on # needed for last/first update wins conflict resolution
                            # property available in PostgreSQL 9.5+
pg_hba.conf 必須允許來自本地主機的複製連線。
接下來 pglogical 必須在所有節點上安裝擴充套件:
CREATE EXTENSION pglogical;

如果使用 PostgreSQL 9.4,則 pglogical_origin 還必須在該節點上安裝擴充套件:

CREATE EXTENSION pglogical_origin;

現在建立提供者節點:

SELECT pglogical.create_node(
    node_name := 'provider1',
    dsn := 'host=providerhost port=5432 dbname=db'
);

將公共架構中的所有表新增到預設複製集。

SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
您還可以選擇建立額外的複製集並向其中新增表(請參閱下面的“複製集”)。
通常,最好在訂閱之前建立複製集,以便在單個初始事務中初始複製設定期間同步所有表。但是,大型資料庫的使用者可能希望逐步建立它們,以便更好地控制。

相關文章