[pgpool-general-jp: 1324] failover_commandの中でpcp_attach_nodeするとBackendError
sai kato
tmi.katosai @ gmail.com
2014年 11月 11日 (火) 10:58:34 JST
はじめまして、加藤と申します。
(文字化けしておりましたので、再送させていただきます)
PgpoolⅡ3.3.4でエラーが発生しましたが、原因がわからないため、
困っております。
■環境
OS:全てCentOS6.4
DB:PostgreSQL9.3.4
Pgpool:PgpoolⅡ3.3.4
PC1:pgpool
|-------PC2:DB1(マスタ)
|-------PC2:DB2(スレーブ)
|-------PC2:DB3(スレーブ)
DB1、DB2、DB3は同期レプリケーションをしており、
DB1がマスタ、DB2,DB3はスレーブとなっております。
■現象
マスタのDB1がフェールオーバした場合は、以下のコマンドが実行されました。
①failover_command
②follow_master_command
コマンドの内容は以下の通りです。
①:スレーブを新マスタへ昇格
②:・旧マスタのrecovery.conf設定とDB起動、オンライン復帰
・他のスレーブのrecovery.conf設定とDB再起動、オンライン復帰
上記コマンドにより、DB1は自動でオンライン復帰することが出来ました。
次に、スレーブのDB2がフェールオーバした場合は、以下のコマンドが実行されました。
①failover_command
failover_commandしか実行されないため、このコマンドにスレーブDBのリカバリの
処理をさせようと考えました。
コマンドの内容は以下の通りです。
①:スレーブDBの起動、オンライン復帰
①のコマンドの中でオンライン復帰(pcp_attach_node)が実行されると、
BackendErrorとなりました。
エラーの後に、①で実施したpcp_attach_nodeをプロンプト上から実行すると、
成功しました。
■pgpool.log
ログは以下の通りです。
2014-10-31 16:04:56 LOG: pid 1732: pcp child process received restart
request
2014-10-31 16:04:56 LOG: pid 1573: PCP child 1732 exits with status 256
in failover()
2014-10-31 16:04:56 LOG: pid 1573: fork a new PCP child pid 1788 in
failover()
2014-10-31 16:04:56 DEBUG: pid 1573: health check: clearing alarm
2014-10-31 16:04:56 DEBUG: pid 1573: failover_handler called
2014-10-31 16:04:56 DEBUG: pid 1573: failover_handler: starting to select
new master node
2014-10-31 16:04:56 ERROR: pid 1573: failover_handler: invalid node_id -1
MAX_NUM_BACKENDS: 128
2014-10-31 16:04:56 DEBUG: pid 1573: reap_handler called
2014-10-31 16:04:56 DEBUG: pid 1573: reap_handler: call wait3
2014-10-31 16:04:56 LOG: pid 1573: worker child 1733 exits with status 256
2014-10-31 16:04:56 LOG: pid 1573: fork a new worker child pid 1789
ログのエラー内容からみると、pcp_attach_nodeに指定したノードIDが不正のようです。
■pgpool.conf
設定は以下の通りです。
replication_mode = off
load_balance_mode = on
connection_cache = off
master_slave_mode = on
master_slave_sub_mode = 'stream'
sr_check_period = 10
sr_check_user = 'postgres'
sr_check_password = 'postgres'
delay_threshold = 10000000
backend_hostname0 = 'xxxx' ←PC2のIP
backend_port0 = 5432
backend_weight0 = 1
backend_hostname1 = 'xxxx' ←PC2のIP
backend_port1 = 5433
backend_weight1 = 1
backend_hostname2 = 'xxxx' ←PC2のIP
backend_port2 = 5434
backend_weight2 = 1
follow_master_command = '/usr/local/pgpool-3.3/bin/follow_master.sh %d %h
%p %D %m %M %H %P %r %R'
failover_command = '/usr/local/pgpool-3.3/bin/failover.sh %d %h %p %D %m %M
%H %P %r %R'
■failover.sh
############################
# スタンバイノードの起動
############################
ssh -l postgres -T $failed_host_name $POSTMASTER -i -p $failed_port -D
$failed_db_cluster & >> $log 2>&1 < /dev/null
sleep 2
############################
# スタンバイノードの復帰
############################
/usr/local/pgpool-3.3/bin/pcp_attach_node 5 localhost $PCP_PORT
$PCP_SUPER_USER $PCP_SUPER_USER $failed_node_id >> $log 2>&1
■質問
①pcp_attach_nodeが失敗する原因は何でしょうか?対応方法はあるでしょうか?
②スレーブDBのフェールオーバ時の対応は上記で合っているでしょうか?
→failover_commandの中でpcp_attach_nodeを実行してよいのか?
ご存知の方がおられましたらご教授お願い致します。
お手数ですが、よろしくお願いします。
-------------- next part --------------
HTML$B$NE:IU%U%!%$%k$rJ]4I$7$^$7$?(B...
URL: <http://www.sraoss.jp/pipermail/pgpool-general-jp/attachments/20141111/784d0328/attachment-0001.html>
pgpool-general-jp メーリングリストの案内