PGpool推动掌握,奴隶不会在失败时复制

时间:2015-01-13 13:38:10

标签: postgresql pgpool

(版本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个问题的方法。如果您需要更多信息,如日志等,请告诉我。

由于

1 个答案:

答案 0 :(得分:2)

好的。按照设计,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

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

我希望将来可以帮助某人。

由于

罗布