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が含まれています。ソースをオンラインで検索したところ、Pgpool ノードの構成ファイル pgpool.conf にパラメーター 「recovery_1st_stage_command」を設定する必要があることがわかりました。
パラメータrecovery_1st_stage_command = 'basebackup.sh'を設定しました。スクリプト'basebackup.sh'ファイルを両方の Postgresql ノードのデータ ディレクトリ'/var/lib/pgsql/9.4/data' の下に配置しました。
また、ディレクトリ「/var/lib/pgsql/9.4/data」の下の両方のデータベースノードにスクリプト「pgpool_remote_start」を配置しました。
また、両方のデータベース ノードで pgpool 拡張機能 pgpool_recovery と pgpool_adm を作成しました。
マスター ノードが停止すると、フェイルオーバーが発生しますが、復旧スクリプト「basebackup.sh」は実行されません。
pgpool ログを確認し、デバッグ レベルも有効にしました。スクリプトが実行されたかどうかはまだわかりません。
故障したノードの自動オンライン復旧を手伝ってください。私が使用したスクリプトを見つけてください。
basebackup.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 &
ありがとう。