【问题标题】:PGpool Promote to master and Slaves wont replicate on failurePGpool 升级为 master 并且 Slave 不会在失败时复制
【发布时间】:2015-01-13 13:38:09
【问题描述】:

(版本 pgpool-II-pg93-3.4.0-3pgdg.rhel6.x86_64.rpm)

不久前我在网上看到过一些关于这个问题的讨论,但我还没有找到解决办法。

我有 2 台 pgpool 服务器运行流复制和负载平衡。它们连接到 3 个 postgres 服务器。 2 台是虚拟机,1 台是物理机。

我希望物理机成为主服务器。我已经使用 pcp_promote_node 命令完成了测试,我看到了 show pool_nodes;显示我选择为主节点的节点,但是在 postgres 端,命令 SELECT pg_is_in_recovery();显示该服务器仍在恢复中。

所有 pcp_promote 命令所做的就是分离主节点。然后阻止插入到数据库中。

其次,如果主服务器发生故障,另一台服务器确实会成为主服务器,但是另一个从服务器对此一无所知,并且在我从新主服务器恢复之前不会复制任何新数据。

是否有解决上述 2 个问题的方法。如果您需要更多信息,例如日志等,请告诉我。

谢谢

【问题讨论】:

  • 我认为这更适合 dba.stackexchange.com

标签: postgresql pgpool


【解决方案1】:

好的。按照设计,pgpool 执行上述操作。

您需要使用 pgpool.conf 文件中的 follow_master_command 来解决此问题。

我使用以下脚本(follow_master.sh,我放在 /etc/pgpool-II 文件夹中)

#!/bin/sh

################
##
## $1 = node id
## $2 = Old master node id
## $3 = node hostname
##
############### 
PGPOOLIP=10.**.**.**    
PGUSER=postgres
PGPASS=*************
PGHOME=/var/lib/pgsql/9.3
REMOTE_PGDATA=/var/lib/pgsql/9.3/data

if [ $1 = $2 ]; then
        /usr/bin/pcp_detach_node 10 $PGPOOLIP 9898 $PGUSER $PGPASS $1
else
        sleep 5
        ssh -T postgres@$3 "
        LD_LIBRARY_PATH=$PGHOME/lib:LD_LIBRARH_PATH;
        $PGHOME/bin/pg_ctl -w -D $REMOTE_PGDATA stop"
        /usr/bin/pcp_detach_node 10 $PGPOOLIP 9898 $PGUSER $PGPASS $1
        /usr/bin/pcp_recovery_node 10 $PGPOOLIP 9898 $PGUSER $PGPASS $1
        /usr/bin/pcp_attach_node 10 $PGPOOLIP 9898 $PGUSER $PGPASS $1
fi

我已经完成了测试,它似乎工作正常。

我希望这对将来的某人有所帮助。

谢谢

罗伯

【讨论】:

    猜你喜欢
    • 2015-08-08
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 2018-08-06
    • 2013-09-22
    • 2011-11-17
    • 2012-09-02
    相关资源
    最近更新 更多