0

(版本 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 命令所做的就是分离主节点。然后阻止插入数据库。

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

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

谢谢

4

1 回答 1

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

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

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

谢谢

于 2015-01-14T09:04:51.520 回答