PGpool 升级为 master 并且 Slaves 不会在失败时复制
PGpool Promote to master and Slaves wont replicate on failure
(版本 pgpool-II-pg93-3.4.0-3pgdg.rhel6.x86_64.rpm)
之前在网上看到过一些关于这个的讨论,但是一直没找到解决方法
我有 2 个 pgpool 服务器 运行 流复制和负载平衡。他们连接到 3 个 postgres 服务器。 2 个是虚拟机和 1 个物理机。
我更希望物理机作为主服务器。我已经使用 pcp_promote_node 命令进行了测试,我看到显示 pool_nodes;将节点 I select 显示为主要节点,但是在 postgres 端显示命令 SELECT pg_is_in_recovery();显示该服务器仍在恢复中。
所有pcp_promote命令所做的,就是分离主节点。然后阻止插入数据库。
其次,如果主服务器发生故障,另一台服务器确实成为主服务器,但是另一个从服务器对此一无所知,并且在我从新主服务器恢复之前不会复制任何新数据。
是否有解决上述 2 个问题的方法。如果您需要更多信息,例如日志等,也请告诉我。
谢谢
好的。按照设计,pgpool 会执行上述操作。
pgpool.conf 文件中的 follow_master_command 是解决此问题所需要的。
我使用以下脚本(follow_master.sh,我将其放在 /etc/pgpool-II 文件夹中)
#!/bin/sh
################
##
## = node id
## = Old master node id
## = node hostname
##
###############
PGPOOLIP=10.**.**.**
PGUSER=postgres
PGPASS=*************
PGHOME=/var/lib/pgsql/9.3
REMOTE_PGDATA=/var/lib/pgsql/9.3/data
if [ = ]; then
/usr/bin/pcp_detach_node 10 $PGPOOLIP 9898 $PGUSER $PGPASS
else
sleep 5
ssh -T postgres@ "
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
/usr/bin/pcp_recovery_node 10 $PGPOOLIP 9898 $PGUSER $PGPASS
/usr/bin/pcp_attach_node 10 $PGPOOLIP 9898 $PGUSER $PGPASS
fi
我已经完成测试,似乎工作正常。
我希望这对以后的人有所帮助。
谢谢
罗伯
(版本 pgpool-II-pg93-3.4.0-3pgdg.rhel6.x86_64.rpm)
之前在网上看到过一些关于这个的讨论,但是一直没找到解决方法
我有 2 个 pgpool 服务器 运行 流复制和负载平衡。他们连接到 3 个 postgres 服务器。 2 个是虚拟机和 1 个物理机。
我更希望物理机作为主服务器。我已经使用 pcp_promote_node 命令进行了测试,我看到显示 pool_nodes;将节点 I select 显示为主要节点,但是在 postgres 端显示命令 SELECT pg_is_in_recovery();显示该服务器仍在恢复中。
所有pcp_promote命令所做的,就是分离主节点。然后阻止插入数据库。
其次,如果主服务器发生故障,另一台服务器确实成为主服务器,但是另一个从服务器对此一无所知,并且在我从新主服务器恢复之前不会复制任何新数据。
是否有解决上述 2 个问题的方法。如果您需要更多信息,例如日志等,也请告诉我。
谢谢
好的。按照设计,pgpool 会执行上述操作。
pgpool.conf 文件中的 follow_master_command 是解决此问题所需要的。
我使用以下脚本(follow_master.sh,我将其放在 /etc/pgpool-II 文件夹中)
#!/bin/sh
################
##
## = node id
## = Old master node id
## = node hostname
##
###############
PGPOOLIP=10.**.**.**
PGUSER=postgres
PGPASS=*************
PGHOME=/var/lib/pgsql/9.3
REMOTE_PGDATA=/var/lib/pgsql/9.3/data
if [ = ]; then
/usr/bin/pcp_detach_node 10 $PGPOOLIP 9898 $PGUSER $PGPASS
else
sleep 5
ssh -T postgres@ "
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
/usr/bin/pcp_recovery_node 10 $PGPOOLIP 9898 $PGUSER $PGPASS
/usr/bin/pcp_attach_node 10 $PGPOOLIP 9898 $PGUSER $PGPASS
fi
我已经完成测试,似乎工作正常。
我希望这对以后的人有所帮助。
谢谢
罗伯