我是 Postgresql 和 Pgpool II 设置的新手。我已经使用 Pgpool 和 Repmgr 配置了 Postgresql HA/负载平衡。
The setup consist of 3 nodes and verison of Application and OS is as mentioned below:
**Pgpool node** => 192.168.0.4, **Postgresql Nodes** => 192.168.0.6, 192.168.0.7
**OS version** => CentOS 6.8 (On all the 3 nodes)
**Pgpool II version** => pgpool-II version 3.5.0 (ekieboshi).
**Postgresql Version** => PostgreSQL 9.4.8
**Repmgr Version** => repmgr 3.1.3 (PostgreSQL 9.4.8)
我已按照链接进行设置。
当我关闭主节点时,故障转移成功发生,从节点接管为新的主节点。
故障转移后,我必须手动恢复故障节点并将其与新的主节点同步。
我想自动化恢复过程。
pgpool 节点上的pgpool.conf文件包含参数recovery_1st_stage_command。我在网上搜索了源码,发现参数“recovery_1st_stage_command”应该是在Pgpool节点的配置文件pgpool.conf中设置的。
我已经设置了参数recovery_1st_stage_command = 'basebackup.sh'。我已将脚本'basebackup.sh'文件放在数据目录'/var/lib/pgsql/9.4/data'下的两个 Postgresql 节点上。
此外,我已将脚本 'pgpool_remote_start' 放置在目录 '/var/lib/pgsql/9.4/data' 下的两个数据库节点上。
还在数据库节点上创建了 pgpool 扩展 pgpool_recovery 和 pgpool_adm。
当主节点停止时,会发生故障转移,但不会执行恢复脚本“basebackup.sh”。
我检查了 pgpool 日志并启用了调试级别。仍然无法找到脚本是否被执行。
请帮助我进行故障节点的自动在线恢复。找到我使用的脚本。
基本备份.sh
#!/bin/bash
# first stage recovery
# $1 datadir
# $2 desthost
# $3 destdir
#as I'm using repmgr it's not necessary for me to know datadir(master) $1
RECOVERY_NODE=$2
CLUSTER_PATH=$3
#repmgr needs to know the master's ip
MASTERNODE=`/sbin/ifconfig eth0 | grep inet | awk '{print $2}' | sed 's/addr://'`
cmd1=`ssh postgres@$RECOVERY_NODE "repmgr -D $CLUSTER_PATH --force standby clone $MASTERNODE"`
echo $cmd1
pgpool_remote_start 脚本。
#! /bin/sh
if [ $# -ne 2 ]
then
echo "pgpool_remote_start remote_host remote_datadir"
exit 1
fi
DEST=$1
DESTDIR=$2
PGCTL=/usr/pgsql-9.4/bin/pg_ctl
ssh -T $DEST $PGCTL -w -D $DESTDIR start 2>/dev/null 1>/dev/null < /dev/null &
谢谢。