<div dir="ltr">石井様<div><br></div><div>お世話になっております。加藤です。</div><div><br></div><div>ご回答ありがとうございます。</div><div>failover.shは以下の通りです。<br></div><div>------------------------------------------------</div><div><div>#! /bin/sh</div><div># Execute command by failover.</div><div># special values:  %d = node id</div><div>#                  %h = host name</div><div>#                  %p = port number</div><div>#                  %D = database cluster path</div><div>#                  %m = new master node id</div><div>#                  %M = old master node id</div><div>#                  %H = new master node host name</div><div>#                  %P = old primary node id</div><div>#                  %R = new master database cluster path</div><div>#                  %r = new master port number</div><div>#                  %% = &#39;%&#39; character</div><div>failed_node_id=$1</div><div>failed_host_name=$2</div><div>failed_port=$3</div><div>failed_db_cluster=$4</div><div><br></div><div>new_master_id=$5</div><div>old_master_id=$6</div><div>new_master_host_name=$7</div><div>old_primary_node_id=$8</div><div>new_master_port_number=$9</div><div>new_master_db_cluster=${10}</div><div><br></div><div>log=/var/log/pgpool/failover2.log</div><div><br></div><div>PGPOOL_HOME=/usr/pgsql-9.3</div><div>PG_CTL=$PGPOOL_HOME/bin/pg_ctl</div><div>POSTMASTER=$PGPOOL_HOME/bin/postmaster</div><div><br></div><div>PCP_PORT=9898</div><div>PCP_SUPER_USER=postgres</div><div><br></div><div><br></div><div>echo &quot;&quot; &gt;&gt; $log</div><div>date &gt;&gt; $log</div><div>echo &quot;user[`whoami`] failed_node_id[$failed_node_id] failed_host_name[$failed_host_name] failed_port[$failed_port] failed_db_cluster[$failed_db_cluster] ### old_master_id[$old_master_id] old_primary_node_id[$old_primary_node_id] ### new_master_id[$new_master_id] new_master_host_name[$new_master_host_name] new_master_port_number[$new_master_port_number] new_master_db_cluster[$new_master_db_cluster]&quot; &gt;&gt; $log</div><div><br></div><div># masterが落ちた場合</div><div>if [ a&quot;$failed_node_id&quot; = a&quot;$old_primary_node_id&quot; ];then<span class="" style="white-space:pre">        </span># master failed</div><div><span class="" style="white-space:pre">        </span>echo &quot;ssh -l postgres -T $new_master_host_name $PG_CTL -D $new_master_db_cluster promote&quot; &gt;&gt; $log</div><div><span class="" style="white-space:pre">        </span>ssh -l postgres -T $new_master_host_name $PG_CTL -D $new_master_db_cluster promote</div><div>else</div><div><br></div><div><span class="" style="white-space:pre">        </span>############################</div><div><span class="" style="white-space:pre">        </span># スタンバイノードの起動</div><div><span class="" style="white-space:pre">        </span>############################</div><div><span class="" style="white-space:pre">        </span>echo &quot;ssh -l postgres -T $failed_host_name $POSTMASTER -i -p $failed_port -D $failed_db_cluster &amp;&quot; &gt;&gt; $log</div><div><span class="" style="white-space:pre">        </span>ssh -l postgres -T $failed_host_name $POSTMASTER -i -p $failed_port -D $failed_db_cluster &amp; &gt;&gt; $log 2&gt;&amp;1 &lt; /dev/null</div><div><span class="" style="white-space:pre">        </span>sleep 2 </div><div><br></div><div><br></div><div><span class="" style="white-space:pre">        </span>############################</div><div><span class="" style="white-space:pre">        </span># スタンバイノードの復帰</div><div><span class="" style="white-space:pre">        </span>############################</div><div><span class="" style="white-space:pre">        </span>echo &quot;/usr/local/pgpool-3.3/bin/pcp_attach_node 5 localhost $PCP_PORT $PCP_SUPER_USER $PCP_SUPER_USER $failed_node_id&quot; &gt;&gt; $log</div><div><span class="" style="white-space:pre">        </span>/usr/local/pgpool-3.3/bin/pcp_attach_node 5 localhost $PCP_PORT $PCP_SUPER_USER $PCP_SUPER_USER ${failed_node_id} &gt;&gt; $log 2&gt;&amp;1</div><div><br></div><div>fi</div></div><div><div>------------------------------------------------</div><div><br></div><div>お忙しいところすみませんが、ご確認いただけないでしょうか。</div><div>よろしくお願い致します。</div><div><br></div><div></div></div><div class="gmail_extra"><br><div class="gmail_quote">2014年11月13日 8:14 Tatsuo Ishii <span dir="ltr">&lt;<a href="mailto:ishii@sraoss.co.jp" target="_blank">ishii@sraoss.co.jp</a>&gt;</span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">石井です。<br>
<br>
添付してあるfailover.shは抜粋だと思います。<br>
全部見られたらなにか分かるかもしれません。<br>
--<br>
Tatsuo Ishii<br>
SRA OSS, Inc. Japan<br>
English: <a href="http://www.sraoss.co.jp/index_en.php" target="_blank">http://www.sraoss.co.jp/index_en.php</a><br>
Japanese:<a href="http://www.sraoss.co.jp" target="_blank">http://www.sraoss.co.jp</a><br>
<br>
From: sai kato &lt;<a href="mailto:tmi.katosai@gmail.com">tmi.katosai@gmail.com</a>&gt;<br>
Subject: [pgpool-general-jp: 1324] failover_commandの中でpcp_attach_nodeするとBackendError<br>
Date: Tue, 11 Nov 2014 10:58:34 +0900<br>
Message-ID: &lt;<a href="mailto:CAEn1G_G712mFK0LFvxiZ%2B8c7t%2BNCk_wUqzWpmLG2FJCRTm%2BrqA@mail.gmail.com">CAEn1G_G712mFK0LFvxiZ+8c7t+NCk_wUqzWpmLG2FJCRTm+rqA@mail.gmail.com</a>&gt;<br>
<div class="HOEnZb"><div class="h5"><br>
&gt; はじめまして、加藤と申します。<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; (文字化けしておりましたので、再送させていただきます)<br>
&gt;<br>
&gt; PgpoolⅡ3.3.4でエラーが発生しましたが、原因がわからないため、<br>
&gt;<br>
&gt; 困っております。<br>
&gt;<br>
&gt; ■環境<br>
&gt;<br>
&gt; OS:全てCentOS6.4<br>
&gt;<br>
&gt; DB:PostgreSQL9.3.4<br>
&gt;<br>
&gt; Pgpool:PgpoolⅡ3.3.4<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; PC1:pgpool<br>
&gt;<br>
&gt;    |-------PC2:DB1(マスタ)<br>
&gt;<br>
&gt;    |-------PC2:DB2(スレーブ)<br>
&gt;<br>
&gt;    |-------PC2:DB3(スレーブ)<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; DB1、DB2、DB3は同期レプリケーションをしており、<br>
&gt;<br>
&gt; DB1がマスタ、DB2,DB3はスレーブとなっております。<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; ■現象<br>
&gt;<br>
&gt; マスタのDB1がフェールオーバした場合は、以下のコマンドが実行されました。<br>
&gt;<br>
&gt; ①failover_command<br>
&gt;<br>
&gt; ②follow_master_command<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; コマンドの内容は以下の通りです。<br>
&gt;<br>
&gt; ①:スレーブを新マスタへ昇格<br>
&gt;<br>
&gt; ②:・旧マスタのrecovery.conf設定とDB起動、オンライン復帰<br>
&gt;<br>
&gt; ・他のスレーブのrecovery.conf設定とDB再起動、オンライン復帰<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 上記コマンドにより、DB1は自動でオンライン復帰することが出来ました。<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; 次に、スレーブのDB2がフェールオーバした場合は、以下のコマンドが実行されました。<br>
&gt;<br>
&gt; ①failover_command<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; failover_commandしか実行されないため、このコマンドにスレーブDBのリカバリの<br>
&gt;<br>
&gt; 処理をさせようと考えました。<br>
&gt;<br>
&gt; コマンドの内容は以下の通りです。<br>
&gt;<br>
&gt; ①:スレーブDBの起動、オンライン復帰<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; ①のコマンドの中でオンライン復帰(pcp_attach_node)が実行されると、<br>
&gt;<br>
&gt; BackendErrorとなりました。<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; エラーの後に、①で実施したpcp_attach_nodeをプロンプト上から実行すると、<br>
&gt;<br>
&gt; 成功しました。<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; ■pgpool.log<br>
&gt;<br>
&gt; ログは以下の通りです。<br>
&gt;<br>
&gt; 2014-10-31 16:04:56 LOG:   pid 1732: pcp child process received restart<br>
&gt; request<br>
&gt;<br>
&gt; 2014-10-31 16:04:56 LOG:   pid 1573: PCP child 1732 exits with status 256<br>
&gt; in failover()<br>
&gt;<br>
&gt; 2014-10-31 16:04:56 LOG:   pid 1573: fork a new PCP child pid 1788 in<br>
&gt; failover()<br>
&gt;<br>
&gt; 2014-10-31 16:04:56 DEBUG: pid 1573: health check: clearing alarm<br>
&gt;<br>
&gt; 2014-10-31 16:04:56 DEBUG: pid 1573: failover_handler called<br>
&gt;<br>
&gt; 2014-10-31 16:04:56 DEBUG: pid 1573: failover_handler: starting to select<br>
&gt; new master node<br>
&gt;<br>
&gt; 2014-10-31 16:04:56 ERROR: pid 1573: failover_handler: invalid node_id -1<br>
&gt; MAX_NUM_BACKENDS: 128<br>
&gt;<br>
&gt; 2014-10-31 16:04:56 DEBUG: pid 1573: reap_handler called<br>
&gt;<br>
&gt; 2014-10-31 16:04:56 DEBUG: pid 1573: reap_handler: call wait3<br>
&gt;<br>
&gt; 2014-10-31 16:04:56 LOG:   pid 1573: worker child 1733 exits with status 256<br>
&gt;<br>
&gt; 2014-10-31 16:04:56 LOG:   pid 1573: fork a new worker child pid 1789<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; ログのエラー内容からみると、pcp_attach_nodeに指定したノードIDが不正のようです。<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; ■pgpool.conf<br>
&gt;<br>
&gt; 設定は以下の通りです。<br>
&gt;<br>
&gt; replication_mode = off<br>
&gt;<br>
&gt; load_balance_mode = on<br>
&gt;<br>
&gt; connection_cache = off<br>
&gt;<br>
&gt; master_slave_mode = on<br>
&gt;<br>
&gt; master_slave_sub_mode = &#39;stream&#39;<br>
&gt;<br>
&gt; sr_check_period = 10<br>
&gt;<br>
&gt; sr_check_user = &#39;postgres&#39;<br>
&gt;<br>
&gt; sr_check_password = &#39;postgres&#39;<br>
&gt;<br>
&gt; delay_threshold = 10000000<br>
&gt;<br>
&gt; backend_hostname0 = &#39;xxxx&#39; ←PC2のIP<br>
&gt;<br>
&gt; backend_port0 = 5432<br>
&gt;<br>
&gt; backend_weight0 = 1<br>
&gt;<br>
&gt; backend_hostname1 = &#39;xxxx&#39; ←PC2のIP<br>
&gt;<br>
&gt; backend_port1 = 5433<br>
&gt;<br>
&gt; backend_weight1 = 1<br>
&gt;<br>
&gt; backend_hostname2 = &#39;xxxx&#39; ←PC2のIP<br>
&gt;<br>
&gt; backend_port2 = 5434<br>
&gt;<br>
&gt; backend_weight2 = 1<br>
&gt;<br>
&gt; follow_master_command = &#39;/usr/local/pgpool-3.3/bin/follow_master.sh %d %h<br>
&gt; %p %D %m %M %H %P %r %R&#39;<br>
&gt;<br>
&gt; failover_command = &#39;/usr/local/pgpool-3.3/bin/failover.sh %d %h %p %D %m %M<br>
&gt; %H %P %r %R&#39;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; ■failover.sh<br>
&gt;<br>
&gt; ############################<br>
&gt;<br>
&gt; # スタンバイノードの起動<br>
&gt;<br>
&gt; ############################<br>
&gt;<br>
&gt; ssh -l postgres -T $failed_host_name $POSTMASTER -i -p $failed_port -D<br>
&gt; $failed_db_cluster &amp; &gt;&gt; $log 2&gt;&amp;1 &lt; /dev/null<br>
&gt;<br>
&gt; sleep 2<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; ############################<br>
&gt;<br>
&gt; # スタンバイノードの復帰<br>
&gt;<br>
&gt; ############################<br>
&gt;<br>
&gt; /usr/local/pgpool-3.3/bin/pcp_attach_node 5 localhost $PCP_PORT<br>
&gt; $PCP_SUPER_USER $PCP_SUPER_USER $failed_node_id &gt;&gt; $log 2&gt;&amp;1<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; ■質問<br>
&gt;<br>
&gt; ①pcp_attach_nodeが失敗する原因は何でしょうか?対応方法はあるでしょうか?<br>
&gt;<br>
&gt; ②スレーブDBのフェールオーバ時の対応は上記で合っているでしょうか?<br>
&gt;<br>
&gt; →failover_commandの中でpcp_attach_nodeを実行してよいのか?<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; ご存知の方がおられましたらご教授お願い致します。<br>
&gt;<br>
&gt; お手数ですが、よろしくお願いします。<br>
</div></div></blockquote></div><br></div></div>