pglogical 擴充套件為 PostgreSQL 提供邏輯流複製
我們使用以下術語來描述節點之間的資料流,有意重複使用早期的 Slony 技術:
• 節點 - PostgreSQL 資料庫例項
• 提供者和訂閱者 - 節點承擔的角色
• 複製集- 表的集合
建築細節:
• pglogical在每個資料庫級別上工作,而不是像物理流複製那樣在整個伺服器級別工作
• 一個提供程式可以為多個訂閱程式提供服務,而不會產生額外的磁碟寫入開銷
• 一個訂閱伺服器可以合併來自多個來源的變更,並透過自動和可配置的衝突解決方案檢測變更之間的衝突(多主伺服器所需的一些方面,但不是所有方面)。
• 級聯複製以變更集轉發的形式實現。
要求 :-
- 要使用 pglogical,提供商和訂閱者必須執行 PostgreSQL 9.4 或更新版本。
- 提供商和訂閱者都必須安裝 pglogical 擴充套件。您必須在兩者上都建立擴充套件 pglogical。
- 提供方和訂閱方的表必須具有相同的名稱並採用相同的架構。未來的修訂版本可能會新增對映功能。
- 提供者和訂閱者上的表必須具有相同的列,並且每列的資料型別相同。訂閱者上的 CHECK 約束、NOT NULL 約束等必須與提供者上的相同或更弱(更寬鬆)。
- 表必須具有相同的 PRIMARY KEY。除了 PRIMARY KEY 之外,不建議新增其他 UNIQUE 約束。
- 此處涵蓋更多限制和約束
安裝 pglogical 擴充套件。
從以下連結下載 pglogical 擴充套件的原始碼。
步驟1
解壓下載的資料夾。
第2步
我正在配置從 9.5 到 9.6 PostgreSQL 社群版本的複製。
確保您已經配置了正確的環境變數。
進入資料夾。
cd pglogical-master
make USE_PGXS=1 install
Make below changes into postgresql.conf in both side .
wal_level = 'logical'
max_worker_processes = 10
max_replication_slots = 10
max_wal_senders = 10
shared_preload_libraries = 'pglogical'
track_commit_timestamp = on
pg_hba.conf has to allow replication connections
建立兩個伺服器的擴充套件。
create extension pglogical;
create extension pglogical_origin ;
確保您也在副本伺服器上建立了表結構。
步驟3.建立節點和訂閱。
在主伺服器上。
A)
SELECT pglogical.create_node(
node_name := 'provider1',
dsn := 'host=Replica/Subscriber_host port=5432 dbname=postgres'
);
B)將“公共”模式中的所有表新增到“預設”複製集。
SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
在副本/輔助伺服器上。
A)
create table employee(id int primary key ,name varchar(20));
B)
一旦設定了提供者節點,訂閱者就可以訂閱它。首先
必須建立訂閱者節點:
SELECT pglogical.create_node(
node_name := 'subscriber1',
dsn := 'host=Replica_host port=5432 dbname=postgres'
);
C)
最後,在訂閱者節點上,你可以建立訂閱,它將
在後臺啟動同步和複製過程:
SELECT pglogical.create_subscription(
subscription_name := 'subscription1',
provider_dsn := 'host=master_host port=5432 dbname=postgres'
);
步驟4
讓我們在表中插入一些行並檢查是否開始與輔助節點同步。
我已經插入了 100 行,現在我正在主伺服器上插入另外 100 行。
在訂閱/輔助伺服器上驗證
步驟5.檢查哪些後端程序正在執行。
在主伺服器上
在輔助伺服器上 -