<div dir="ltr"><p class="">はじめまして、加藤と申します。<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class="">(文字化けしておりましたので、再送させていただきます)<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US">Pgpool</span>Ⅱ<span lang="EN-US">3.3.4</span>でエラーが発生しましたが、原因がわからないため、<span lang="EN-US"></span></p>

<p class="">困っております。<span lang="EN-US"></span></p>

<p class="">■環境<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US">OS:</span>全て<span lang="EN-US">CentOS6.4</span></p>

<p class=""><span lang="EN-US">DB:PostgreSQL9.3.4</span></p>

<p class=""><span lang="EN-US">Pgpool</span>:<span lang="EN-US">Pgpool</span>Ⅱ<span lang="EN-US">3.3.4</span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class=""><span lang="EN-US">PC1:pgpool</span></p>

<p class=""><span lang="EN-US">  
|-------PC2:DB1(</span>マスタ<span lang="EN-US">)</span></p>

<p class=""><span lang="EN-US">  
|-------PC2:DB2(</span>スレーブ<span lang="EN-US">)</span></p>

<p class=""><span lang="EN-US">  
|-------PC2:DB3(</span>スレーブ<span lang="EN-US">)</span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class=""><span lang="EN-US">DB1</span>、<span lang="EN-US">DB2</span>、<span lang="EN-US">DB3</span>は同期レプリケーションをしており、<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US">DB1</span>がマスタ、<span lang="EN-US">DB2,DB3</span>はスレーブとなっております。<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class="">■現象<span lang="EN-US"></span></p>

<p class="">マスタの<span lang="EN-US">DB1</span>がフェールオーバした場合は、以下のコマンドが実行されました。<span lang="EN-US"></span></p>

<p class="">①<span lang="EN-US">failover_command</span></p>

<p class="">②<span lang="EN-US">follow_master_command</span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class="">コマンドの内容は以下の通りです。<span lang="EN-US"></span></p>

<p class=""> ①:スレーブを新マスタへ昇格<span lang="EN-US"></span></p>

<p class=""> ②:・旧マスタの<span lang="EN-US">recovery.conf</span>設定と<span lang="EN-US">DB</span>起動、オンライン復帰<span lang="EN-US"></span></p>

<p class="">   ・他のスレーブの<span lang="EN-US">recovery.conf</span>設定と<span lang="EN-US">DB</span>再起動、オンライン復帰<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class="">上記コマンドにより、<span lang="EN-US">DB1</span>は自動でオンライン復帰することが出来ました。<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class="">次に、スレーブの<span lang="EN-US">DB2</span>がフェールオーバした場合は、以下のコマンドが実行されました。<span lang="EN-US"></span></p>

<p class="">①<span lang="EN-US">failover_command</span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class=""><span lang="EN-US">failover_command</span>しか実行されないため、このコマンドにスレーブ<span lang="EN-US">DB</span>のリカバリの<span lang="EN-US"></span></p>

<p class="">処理をさせようと考えました。<span lang="EN-US"></span></p>

<p class="">コマンドの内容は以下の通りです。<span lang="EN-US"></span></p>

<p class=""> ①:スレーブ<span lang="EN-US">DB</span>の起動、オンライン復帰<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class="">①のコマンドの中でオンライン復帰<span lang="EN-US">(pcp_attach_node)</span>が実行されると、<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US">BackendError</span>となりました。<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class="">エラーの後に、①で実施した<span lang="EN-US">pcp_attach_node</span>をプロンプト上から実行すると、<span lang="EN-US"></span></p>

<p class="">成功しました。<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class="">■<span lang="EN-US">pgpool.log</span></p>

<p class="">ログは以下の通りです。<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US">2014-10-31 16:04:56 LOG:   pid 1732: pcp child process received restart
request</span></p>

<p class=""><span lang="EN-US">2014-10-31 16:04:56 LOG:   pid 1573: PCP child 1732 exits with status
256 in failover()</span></p>

<p class=""><span lang="EN-US">2014-10-31 16:04:56 LOG:   pid 1573: fork a new PCP child pid 1788 in
failover()</span></p>

<p class=""><span lang="EN-US">2014-10-31 16:04:56 DEBUG: pid 1573:
health check: clearing alarm</span></p>

<p class=""><span lang="EN-US">2014-10-31 16:04:56 DEBUG: pid 1573:
failover_handler called</span></p>

<p class=""><span lang="EN-US">2014-10-31 16:04:56 DEBUG: pid 1573:
failover_handler: starting to select new master node</span></p>

<p class=""><span lang="EN-US">2014-10-31 16:04:56 ERROR: pid 1573:
failover_handler: invalid node_id -1 MAX_NUM_BACKENDS: 128</span></p>

<p class=""><span lang="EN-US">2014-10-31 16:04:56 DEBUG: pid 1573:
reap_handler called</span></p>

<p class=""><span lang="EN-US">2014-10-31 16:04:56 DEBUG: pid 1573:
reap_handler: call wait3</span></p>

<p class=""><span lang="EN-US">2014-10-31 16:04:56 LOG:   pid 1573: worker child 1733 exits with
status 256</span></p>

<p class=""><span lang="EN-US">2014-10-31 16:04:56 LOG:   pid 1573: fork a new worker child pid 1789</span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class="">ログのエラー内容からみると、<span lang="EN-US">pcp_attach_node</span>に指定したノード<span lang="EN-US">ID</span>が不正のようです。<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class="">■<span lang="EN-US">pgpool.conf</span></p>

<p class="">設定は以下の通りです。<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US">replication_mode = off</span></p>

<p class=""><span lang="EN-US">load_balance_mode = on</span></p>

<p class=""><span lang="EN-US">connection_cache = off</span></p>

<p class=""><span lang="EN-US">master_slave_mode = on</span></p>

<p class=""><span lang="EN-US">master_slave_sub_mode = &#39;stream&#39;</span></p>

<p class=""><span lang="EN-US">sr_check_period = 10</span></p>

<p class=""><span lang="EN-US">sr_check_user = &#39;postgres&#39;</span></p>

<p class=""><span lang="EN-US">sr_check_password = &#39;postgres&#39;</span></p>

<p class=""><span lang="EN-US">delay_threshold = 10000000</span></p>

<p class=""><span lang="EN-US">backend_hostname0 = &#39;xxxx&#39; </span>←<span lang="EN-US">PC2</span>の<span lang="EN-US">IP</span></p>

<p class=""><span lang="EN-US">backend_port0 = 5432</span></p>

<p class=""><span lang="EN-US">backend_weight0 = 1</span></p>

<p class=""><span lang="EN-US">backend_hostname1 = &#39;xxxx&#39; </span>←<span lang="EN-US">PC2</span>の<span lang="EN-US">IP</span></p>

<p class=""><span lang="EN-US">backend_port1 = 5433</span></p>

<p class=""><span lang="EN-US">backend_weight1 = 1</span></p>

<p class=""><span lang="EN-US">backend_hostname2 = &#39;xxxx&#39; </span>←<span lang="EN-US">PC2</span>の<span lang="EN-US">IP</span></p>

<p class=""><span lang="EN-US">backend_port2 = 5434</span></p>

<p class=""><span lang="EN-US">backend_weight2 = 1</span></p>

<p class=""><span lang="EN-US">follow_master_command =
&#39;/usr/local/pgpool-3.3/bin/follow_master.sh %d %h %p %D %m %M %H %P %r %R&#39;</span></p>

<p class=""><span lang="EN-US">failover_command =
&#39;/usr/local/pgpool-3.3/bin/failover.sh %d %h %p %D %m %M %H %P %r %R&#39;</span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class="">■<span lang="EN-US">failover.sh</span></p>

<p class=""><span lang="EN-US">############################</span></p>

<p class=""><span lang="EN-US"># </span>スタンバイノードの起動<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US">############################</span></p>

<p class=""><span lang="EN-US">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</span></p>

<p class=""><span lang="EN-US">sleep 2</span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class=""><span lang="EN-US">############################</span></p>

<p class=""><span lang="EN-US"># </span>スタンバイノードの復帰<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US">############################</span></p>

<p class=""><span lang="EN-US">/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</span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class="">■質問<span lang="EN-US"></span></p>

<p class="">①<span lang="EN-US">pcp_attach_node</span>が失敗する原因は何でしょうか?対応方法はあるでしょうか?<span lang="EN-US"></span></p>

<p class="">②スレーブ<span lang="EN-US">DB</span>のフェールオーバ時の対応は上記で合っているでしょうか?<span lang="EN-US"></span></p>

<p class="">→<span lang="EN-US">failover_command</span>の中で<span lang="EN-US">pcp_attach_node</span>を実行してよいのか?<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class=""><span lang="EN-US"> </span></p>

<p class="">ご存知の方がおられましたらご教授お願い致します。<span lang="EN-US"></span></p>

<p class="">お手数ですが、よろしくお願いします。<span lang="EN-US"></span></p>

<p class=""><span lang="EN-US"> </span></p></div>