Postgresql PGpool升级到主服务器和从服务器在失败时不会复制

Postgresql PGpool升级到主服务器和从服务器在失败时不会复制,postgresql,pgpool,Postgresql,Pgpool,(版本pgpool-II-pg93-3.4.0-3pgdg.rhel6.x86_64.rpm) 不久前,我在网上看到了一些关于这方面的聊天,但我还没有找到解决办法 我有2台pgpool服务器运行流式复制和负载平衡。它们连接到3台postgres服务器。2个是虚拟机,1个是物理机 我更喜欢物理机器作为主服务器。我已经使用pcp_promote_node命令进行了测试,我看到show pool_节点;显示我选择为主节点的节点,但在postgres端,命令select pg_是_in_recovery

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

不久前,我在网上看到了一些关于这方面的聊天,但我还没有找到解决办法

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

我更喜欢物理机器作为主服务器。我已经使用pcp_promote_node命令进行了测试,我看到show pool_节点;显示我选择为主节点的节点,但在postgres端,命令select pg_是_in_recovery();显示服务器仍在恢复中

pcp_promote命令执行的所有操作都是分离主节点。这将阻止插入数据库

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

以上两个问题是否有解决办法。如果你需要更多信息,如日志等,也请告诉我


谢谢

好的。根据设计,pgpool实现了上述功能

您需要使用pgpool.conf文件中的follow_master_命令来解决此问题

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

我已经做了测试,它似乎工作得很好

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

谢谢


Rob

我认为这更适合dba.stackexchange.com
#!/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