2016-09-07 15 views
0

PostgresqlとPgpool IIのセットアップが初めてです。私はPgpoolとRepmgrを使ってPostgresql HA/Loadのバランスを設定しました。失敗したpostgresqlマスターノードの自動回復がpgpool IIで機能していません

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) 

私はlinkの設定に従っています。

マスターノードを停止すると、フェールオーバーは正常に実行され、スレーブノードが新しいマスターノードとして機能します。
フェイルオーバー後、障害ノードを手動で回復し、新しいマスターノードと同期させる必要があります。

私は回復プロセスを自動化したいと思います。 pgpoolのノード上の

pgpool.confのファイルは、パラメータをrecovery_1st_stage_command含まれています。 私はソースをオンラインで検索しました。パラメータプール"recovery_1st_stage_command"は、Pgpoolノードの構成ファイルpgpool.confに設定する必要があります。

パラメータrecovery_1st_stage_command = 'basebackup.sh'を設定しました。 私は、スクリプト「basebackup.sh」上のファイルの両方PostgreSQLのノードデータディレクトリの下に「/var/lib/pgsql/9.4/data」を配置しています。

また、のスクリプトの 'pgpool_remote_start'は、データベースノードとディレクトリ '/var/lib/pgsql/9.4/data'の両方に配置されています。

また、両方のデータベースノードに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 [email protected]$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 &

感謝。

+0

フェールオーバー後、スタンバイノードが新しいマスターサーバーとして正常に昇格されています。そして今、** Pgpool **ノードで** pcp_recovery_node **コマンドを手動で実行する必要があります。このコマンドは、新しいMasterサーバー上で** basebackup.sh **スクリプトを実行し、失敗したノードを正常に回復し、ノードをクラスタに参加させます。 **このpcp_recovery_nodeコマンドexecuiton **を自動化したいです。 – yravi104

答えて

0

これは設計通りだと思います。マスタに障害が発生するとフェールオーバーが発生し、スレーブが昇進します。しかし、古いマスターは自動的にスレーブとして回復されません。反対に、通常、フェールオーバースクリプトは障害の発生したマスターを正常にシャットダウンし、再起動しないようにします(可能であれば、ノードがダウンして接続できない可能性があります)。

本当に必要な場合は、スレーブの昇格後に古いマスターでpcp_recovery操作を実行するようにフェールオーバースクリプトを変更できます。しかし、あなたが実際にやっているのは切り替えです...これは一連のステップとしてスクリプト化されるべきです。フェールオーバーは、(マシンが応答していないなどの)マスターに実際の問題がある場合のためです。

関連する問題