【问题标题】:PostgreSQL: difficulties with basic pglogical configurationPostgreSQL:基本 pglogical 配置的困难
【发布时间】:2016-10-31 15:55:20
【问题描述】:

我发现official pglogical documentation 非常混乱。不清楚的东西太多了。也许以前配置过 pglogical 的人可以解释一下如何设置基本的逻辑复制。

有两个 PostgreSQL 9.5 实例 - 10.128.0.8 (archlinux1) 和 10.128.0.9 (archlinux2)。扩展已安装,CREATE EXTENSION 成功。每个实例上都有一个表:

create table test (k text primary key, v text);

我想将它从 archlinux1 复制到 archlinux2。

根据文档,我应该创建一个提供者节点:

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

应该在master上执行吗? providerhost 应该是 127.0.0.1 还是 10.128.0.8?仅允许从本地主机(根据文档)进行当前复制-应该更改吗?我最好的猜测 - 它应该像这样在 master 上执行:

SELECT pglogical.create_node(
    node_name := 'provider1',
    dsn := 'host=127.0.0.1 port=5432 dbname=eax'
);
 create_node 
-------------
  2976894835
(1 row)

下一步:

SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);

应该在master、replica还是两者上执行?我的最佳猜测 - 仅在 master 上:

SELECT pglogical.replication_set_add_all_tables('default', ARRAY['public']);
 replication_set_add_all_tables 
--------------------------------
 t
(1 row)

下一步:

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

显然它应该在副本上执行:

SELECT pglogical.create_node(
    node_name := 'subscriber1',
    dsn := 'host=127.0.0.1 port=5432 dbname=eax'
);
 create_node 
-------------
   330520249
(1 row)

下一步:

SELECT pglogical.create_subscription(
    subscription_name := 'subscription1',
    provider_dsn := 'host=providerhost port=5432 dbname=db'
);

最佳猜测 - 像这样在副本上执行它:

SELECT pglogical.create_subscription(
    subscription_name := 'subscription1',
    provider_dsn := 'host=10.128.0.8 port=5432 dbname=eax'
);
ERROR:  could not connect to the postgresql server: could not connect to server: Connection refused
    Is the server running on host "10.128.0.8" and accepting
    TCP/IP connections on port 5432?

DETAIL:  dsn was:  host=10.128.0.8 port=5432 dbname=eax

哎呀。 OK,在master上正确修改pg_hba.conf和postgresql.conf:

# pg_hba.conf
host    all    all    10.128.0.0/16    md5
# postgresql.conf
listen_addresses = 'localhost,10.128.0.8

还是没有运气:

# SELECT pglogical.create_subscription(
    subscription_name := 'subscription1',
    provider_dsn := 'host=10.128.0.8 port=5432 dbname=eax user=eax password=qwerty'
);
ERROR:  could not connect to the postgresql server in replication mode: FATAL:  no pg_hba.conf entry for replication connection from host "10.128.0.9", user "eax", SSL off

DETAIL:  dsn was:  host=10.128.0.8 port=5432 dbname=eax user=eax password=qwerty

添加到 master 上的 pg_hba.conf:

host    replication     eax        10.128.0.0/16            md5

在副本上(成功!):

SELECT pglogical.create_subscription(
    subscription_name := 'subscription1',
    provider_dsn := 'host=10.128.0.8 port=5432 dbname=eax user=eax password=qwerty'
);
 create_subscription 
---------------------
          1763399739
(1 row)

现在在主人身上:

eax=# insert into test values ('aaa', 'bbb');
INSERT 0 1
eax=# select * from test;
  k  |  v  
-----+-----
 aaa | bbb
(1 row)

在副本上:

eax=# select * from test;
 k | v 
---+---
(0 rows)

自然没用。日志中没有任何帮助。有什么建议吗?

UPD:我还在 pglogical 问题跟踪器中创建了一个corresponding issue

【问题讨论】:

    标签: postgresql replication


    【解决方案1】:

    也许这是一个更好的指南:http://bonesmoses.org/2016/10/14/pg-phriday-perfectly-logical/ - 至少它告诉你在哪些节点上执行每个命令。

    【讨论】:

      【解决方案2】:

      Depesz 发表了一篇关于 pglogical 配置的优秀博文https://www.depesz.com/2016/11/08/major-version-upgrading-with-minimal-downtime/

      【讨论】:

        【解决方案3】:

        创建节点时需要指定外部 IP(不是 localhost)

        供应商

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

        订阅者

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

        【讨论】:

        • 如果您在提供者上创建节点时必须使用 suscriberhost,那么我猜您必须为每个订阅者创建一个节点。我错过了什么?
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-04-02
        • 2011-09-10
        • 1970-01-01
        • 2019-06-16
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多