将具有 pglogical 复制的第三台服务器添加到具有流同步复制的 2 服务器集群,并使用 patroni 进行故障保护

将具有 pglogical 复制的第三台服务器添加到具有流同步复制的 2 服务器集群,并使用 patroni 进行故障保护

我有 3 台服务器,分别安装有 Ubuntu 19.10、PostgreSQL 12.2 和 Patroni 1.6.4,我希望进行以下设置:

我想要拥有两台具有同步复制的服务器,并且我想添加具有 pglogical 复制的第三台服务器,仅用于接受对特定表的插入。没有 DELETE、TRUNCATE 或其他任何东西。

我每天记录大量的购买记录,大约 300M。我希望两台服务器已经拥有过去 30 天的购买历史记录,第三台服务器拥有非常大的存储空间,可以保存所有的购买历史记录。

到目前为止,我有一个带有 etcd 的 patroni 集群,包含 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 进行完全设置。

我读过关于如何使用设置 pglogicalhttps://blog.dbi-services.com/postgresql-logical-replication-with-pglogical/我想知道是否可以使用 pglogical 完全配置第 3 个服务器仅用于插入。

我是 Patroni 的新手,并且我很迷茫,因此如果能提供与此问题相关的任何信息我将非常感激。

答案1

我发现唯一的方法是创建一个 bash 脚本,执行配置 pglogical 的 psql 命令。

因此我在 yaml 中添加了 post_bootstrap 属性,如下所示:https://github.com/zalando/patroni/blob/master/docs/SETTINGS.rst

bash 脚本接收数据库 dsn 作为参数,我使用它来连接它并配置我喜欢的内容。

据我所知,没有办法直接从 patroni 配置 pglogical。

相关内容