[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 メーリングリストの案内