[pgpool-general-jp: 1325] Re: failover_commandの中でpcp_attach_nodeするとBackendError

Tatsuo Ishii ishii @ sraoss.co.jp
2014年 11月 13日 (木) 08:14:36 JST


石井です。

添付してあるfailover.shは抜粋だと思います。
全部見られたらなにか分かるかもしれません。
--
Tatsuo Ishii
SRA OSS, Inc. Japan
English: http://www.sraoss.co.jp/index_en.php
Japanese:http://www.sraoss.co.jp

From: sai kato <tmi.katosai @ gmail.com>
Subject: [pgpool-general-jp: 1324] failover_commandの中でpcp_attach_nodeするとBackendError
Date: Tue, 11 Nov 2014 10:58:34 +0900
Message-ID: <CAEn1G_G712mFK0LFvxiZ+8c7t+NCk_wUqzWpmLG2FJCRTm+rqA @ mail.gmail.com>

> はじめまして、加藤と申します。
> 
> 
> 
> (文字化けしておりましたので、再送させていただきます)
> 
> 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を実行してよいのか?
> 
> 
> 
> 
> 
> ご存知の方がおられましたらご教授お願い致します。
> 
> お手数ですが、よろしくお願いします。


pgpool-general-jp メーリングリストの案内