web-dev-qa-db-ja.com

pgpool-IIがフェイルオーバースクリプトを実行しない

ソースからpgpool-II3.3.4をインストールしました。 2つのpgpoolノードがあり、ウォッチドッグ構成を使用して、高可用性を備えたpgpoolサービスを取得しました。一方を止めると、もう一方が目覚め、すべてが順調です。

また、マスターとスレーブの2つのバックエンドがあり、フェイルオーバーコマンドを構成しました。これが私の問題です。マスターを停止すると、pgpoolはフェイルオーバーを実行しません。

私のバックエンドがあります:

backend_hostname0 = '172.23.0.70'
backend_port0 = 5432
backend_weight0 = 0
backend_data_directory0 = '/var/lib/postgresql/9.3/main'
backend_flag0 = 'ALLOW_TO_FAILOVER'

backend_hostname1 = '172.23.10.21'
backend_port1 = 5432
backend_weight1 = 0
backend_data_directory1 = '/var/lib/postgresql/9.3/main'
backend_flag1 = 'ALLOW_TO_FAILOVER'

私のフェイルオーバーコマンド宣言があります:

failover_command = 'failover.sh %d %M %m'

もちろん、フェイルオーバーをpgpoolノードの/ sbin /ディレクトリにコピーしました。 failover.shスクリプトコードがあります:

#!/bin/sh

FALLING_NODE=$1

# The new master
SLAVE1="172.23.10.21"

if test $FALLING_NODE -eq 0
then
ssh -T postgres@$SLAVE1 "touch /tmp/postgresql.trigger.5432"
ssh -T postgres@$SLAVE1 "while test ! -f /var/lib/postgresql/9.3/main/recovery.done; do sleep 1; done;"
ssh -T postgres@$SLAVE1 "/etc/init.d/postgresql restart"
/usr/local/bin/pcp_attach_node 10 localhost 9898 pgpool pgpool 1
fi

さて、failover.shを手動で実行すると機能するのに、なぜpgpoolで実行されないのでしょうか。

私はSudoユーザーでpgpoolを実行しているので:

  1. 他のユーザーと一緒にpgpoolを実行する必要がありますか?
  2. Pgpool構成に特定のユーザーを作成する必要がありますか? Sudoで手動で動作します!!!。
  3. フェイルオーバースクリプトコマンドを変更する必要がありますか?
1
Robert

スクリプトの実行にも問題がありました。しかし、最終的にそれを理解しました。

覚えておくべきいくつかの高レベルのステップ。

フェイルオーバースクリプトで、結果を次のようなログファイルにリダイレクトします。

ssh -T postgres@$SLAVE1 "touch /tmp/postgresql.trigger.5432" > /tmp/failover.log 2>&1

これは、失敗している理由を特定するのに役立つ場合があります。

ただし、フェイルオーバースクリプトを実行する方法の概要は次のとおりです。

  • pgpoolサーバーにフェイルオーバースクリプトをインストールする
  • pgpoolはrootの下で実行されています。そう...
  • ユーザールートとして実行ssh-keygen -t rsapgpoolサーバー上およびcat id_rsa.pubおよび>>からauthorized_keysdbサーバー上

そうすることで、対話型認証なしでスクリプトを実行できるようになります。これが私の問題でした。

1
torralba