1

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 &

ありがとう。

4

1 に答える 1