Postgresql

將具有 pglogical 複製的第 3 台伺服器添加到具有流同步複製的 2 台伺服器集群中,並使用贊助人進行故障保護

  • April 22, 2020

我有 3 台帶有 Ubuntu 19.10、PostgreSQL 12.2 和 Patroni 1.6.4 的伺服器,我希望進行以下設置:

我想擁有兩台具有同步複製的伺服器,並且我想添加第三台具有 pglogical 複製的伺服器,只是為了接受對特定表的插入。沒有 DELETE、TRUNCATE 或其他任何東西。

我每天記錄大量購買,大約 3 億。我希望伺服器已經擁有過去 30 天的購買歷史記錄,並且具有非常大儲存空間的第三台伺服器將保存所有購買歷史記錄。

到目前為止,我有一個帶有 etcd 的讚助人集群,用於 2 台伺服器,配置如下:

這是針對第一台和第二台伺服器我有以下配置,當然每個配置中伺服器的名稱都不同:

scope: patroni_cluster_1
name: server_X

restapi:
 listen: 0.0.0.0:8008
 connect_address: X.X.X.X:8008

etcd:
 hosts: X.X.X.X:2379
 protocol: http

bootstrap:
 dcs:
   ttl: 30
   loop_wait: 10
   retry_timeout : 10
   maximum_lag_on_failover: 1048576
   postgresql:
     use_pg_rewind: true
     use_slots: true
     parameters:
       wal_keep_segments: 100

 initdb:
 - encoding: UTF8
 - data-checksums

 pg_hba:
 - host replication replicator 0.0.0.0/0 md5
 - host all all 0.0.0.0/0 md5

postgresql:
 listen: 0.0.0.0:5432
 connect_address: X.X.X.X:5432
 synchronous_mode: true
 synchronous_mode_strict: false
 data_dir: /var/lib/postgresql/patroni_cluster_1/server_X/data
 bin_dir: /usr/lib/postgresql/12/bin
 authentication:
   replication:
     username: replicator
     password: XXXX
   superuser:
     username: postgres
     password: XXXX
 parameters:
   shared_preload_libraries: pglogical

我將 pglogical 添加為共享庫,因為我想知道是否可以使用 Patroni 完全設置第三台伺服器。

我閱讀了有關如何使用https://blog.dbi-services.com/postgresql-logical-replication-with-pglogical/設置 pglogical 的資訊,我想知道我是否可以使用 pglogical 完全配置第三台伺服器以僅用於插入。

我是 Patroni 的新手,我很迷茫,所以關於這個問題的任何資訊都將不勝感激。

我發現這樣做的唯一方法是創建一個執行配置 pglogical 的 psql 命令的 bash 腳本。

所以我在 yaml 中添加了一個 post_bootstrap 屬性,如此處所述:https ://github.com/zalando/patroni/blob/master/docs/SETTINGS.rst

bash 腳本接收數據庫 dsn 作為參數,我用它來連接它並配置我喜歡的東西。

據我所知,沒有辦法直接從贊助人配置 pglogical。

引用自:https://serverfault.com/questions/1011271