(版本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个问题的方法。如果您需要更多信息,如日志等,请告诉我。
由于
答案 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
我已经完成了测试,似乎工作正常。
我希望将来可以帮助某人。
由于
罗布