質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.80%

pgpool-II でフェールオーバ時に no primary node found となってしまう

解決済

回答 1

投稿

  • 評価
  • クリップ 0
  • VIEW 2,543

takito

score 3021

VirtualBox で2台のマシンを起動し、両方に PostgreSQL を入れて 
ストリーミングレプリケーションによる DB レプリケーションを行っています。 

CentOS 6.5 
PostgreSQL 9.3 
pgpool-II  3.4.2 

# マシン構成(2台) 
srv1 : マスタ, pgpool-II + PostgreSQL 
srv2 : スレーブ, PostgreSQL 


マスタのDBをダウンさせてフェールオーバが実行されるところまできたのですが、
no primary node found
となり、スレーブ側がマスタに昇格してくれません。

フェールオーバのスクリプトは以下の通りです。

------------------------------failover_stream.sh--------------------------------------
#! /bin/bash
# Failover command for streming replication.
# This script assumes that DB node 0 is primary, and 1 is standby.

# If standby goes down, does nothing(do pgsql9 stop only). If primary goes down, create a
# trigger file so that standby take over primary node.
#
# Arguments: $1: failed node id. $2: new master hostname. $3: path to
# trigger file.

failed_node=$1
new_master=$2
trigger_file=$3

# Do nothing if standby goes down.
if [ $failed_node = 1 ]; then
    exit 0;
fi

# Create trigger file.
su -l postgres -c "/usr/bin/ssh -T $new_master /bin/touch $trigger_file"
#ssh -T $new_master /bin/touch $trigger_file

exit 0;
------------------------------------------------------------------------------

srv2 の方に trigger_file は作成されているのでこのスクリプトは正常に動作しており、また srv2 が新マスタであると認識してくれていると思うのですが・・・。

フェールオーバ処理付近の pgpool.log は以下の通りです。


2015-07-01 16:43:40: pid 5259: LOG:  execute command: /usr/local/bin/failover_stream.sh 0 srv2 /tmp/trigger_file0
2015-07-01 16:43:40: pid 5259: LOCATION:  pgpool_main.c:2467
2015-07-01 16:43:41: pid 5259: LOG:  find_primary_node_repeatedly: waiting for finding a primary node
2015-07-01 16:43:41: pid 5259: LOCATION:  pgpool_main.c:2627
2015-07-01 16:43:41: pid 5259: LOG:  find_primary_node: checking backend no 0
    
2015-07-01 16:43:41: pid 5259: LOCATION:  pgpool_main.c:2569
2015-07-01 16:43:41: pid 5259: LOG:  find_primary_node: checking backend no 1
    
2015-07-01 16:43:41: pid 5259: LOCATION:  pgpool_main.c:2569
2015-07-01 16:43:41: pid 5259: DEBUG:  SSL is requested but SSL support is not available
2015-07-01 16:43:41: pid 5259: LOCATION:  pool_ssl.c:333
2015-07-01 16:43:41: pid 5259: DEBUG:  authenticate kind = 0
2015-07-01 16:43:41: pid 5259: LOCATION:  child.c:1394
2015-07-01 16:43:41: pid 5259: DEBUG:  authenticate backend: key data received
2015-07-01 16:43:41: pid 5259: LOCATION:  child.c:1484
2015-07-01 16:43:41: pid 5259: DEBUG:  authenticate backend: transaction state: I
2015-07-01 16:43:41: pid 5259: LOCATION:  child.c:1518
2015-07-01 16:43:41: pid 5259: DEBUG:  do_query: extended:0 query:"SELECT pg_is_in_recovery()"
2015-07-01 16:43:41: pid 5259: LOCATION:  pool_process_query.c:2318
2015-07-01 16:43:41: pid 5259: DEBUG:  do_query: kind: 'T'
2015-07-01 16:43:41: pid 5259: LOCATION:  pool_process_query.c:2458
2015-07-01 16:43:41: pid 5259: DEBUG:  do_query: received ROW DESCRIPTION ('T')
2015-07-01 16:43:41: pid 5259: LOCATION:  pool_process_query.c:2569
2015-07-01 16:43:41: pid 5259: DEBUG:  do_query: row description: num_fileds: 1
2015-07-01 16:43:41: pid 5259: LOCATION:  pool_process_query.c:2591
2015-07-01 16:43:41: pid 5259: DEBUG:  do_query: kind: 'D'
2015-07-01 16:43:41: pid 5259: LOCATION:  pool_process_query.c:2458
2015-07-01 16:43:41: pid 5259: DEBUG:  do_query: received DATA ROW ('D')
2015-07-01 16:43:41: pid 5259: LOCATION:  pool_process_query.c:2646
2015-07-01 16:43:41: pid 5259: DEBUG:  do_query: kind: 'C'
2015-07-01 16:43:41: pid 5259: LOCATION:  pool_process_query.c:2458
2015-07-01 16:43:41: pid 5259: DEBUG:  do_query: received COMMAND COMPLETE ('C')
2015-07-01 16:43:41: pid 5259: LOCATION:  pool_process_query.c:2528
2015-07-01 16:43:41: pid 5259: DEBUG:  do_query: kind: 'Z'
2015-07-01 16:43:41: pid 5259: LOCATION:  pool_process_query.c:2458
2015-07-01 16:43:41: pid 5259: DEBUG:  do_query: received READY FOR QUERY ('Z')
2015-07-01 16:43:41: pid 5259: LOCATION:  pool_process_query.c:2521
2015-07-01 16:43:41: pid 5259: DEBUG:  find_primary_node: 1 node is standby
2015-07-01 16:43:41: pid 5259: LOCATION:  pgpool_main.c:2586
2015-07-01 16:43:41: pid 5259: DEBUG:  find_primary_node: no primary node found
2015-07-01 16:43:41: pid 5259: LOCATION:  pgpool_main.c:2594
2015-07-01 16:43:41: pid 5259: DEBUG:  reaper handler
2015-07-01 16:43:41: pid 5259: LOCATION:  pgpool_main.c:2045
2015-07-01 16:43:41: pid 5259: DEBUG:  reaper handler: exited due to switching
2015-07-01 16:43:41: pid 5259: LOCATION:  pgpool_main.c:2057
2015-07-01 16:43:42: pid 5259: LOG:  find_primary_node: checking backend no 0
    
2015-07-01 16:43:42: pid 5259: LOCATION:  pgpool_main.c:2569
2015-07-01 16:43:42: pid 5259: LOG:  find_primary_node: checking backend no 1



srv1 と srv2 の pg_hda.conf は全通しするようにしています。

local   all             all                                     trust
host    all             all             0.0.0.0/0               trust


どのような些細なことでも結構です、何かお気づきのことがありましたらアドバイスいただけないでしょうか。

どうぞよろしくお願いします。


  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 1

checkベストアンサー

0

このページの「Streaming Replicationでのフェイルオーバ」にある、recovery.confの設定は、
どの様にされているでしょうか?
この設定がうまくされていないと、trigger_fileを認識しないのでは無いかと思います。

# 前の質問を見ても、recovery.confについて触れられていなかったので気になりました。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2015/07/02 10:15

    回答ありがとうございます。

    大変助かりました。
    ご指摘を受けてはっと思い出し、いろいろと試しているうちに編集していたことを思い出しました。
    案の定、target_fileの記述がそっくる抜けてました・・・。

    おかげさまで無事にフェールオーバされ、スタンバイ側がプライマリに昇格しました。
    ありがとうございました。

    キャンセル

  • 2015/07/02 10:29

    良かったです。
    recovery.confをrecocery.confと誤記してしまっていたので回答を修正しました。

    キャンセル

  • 2015/07/02 15:22

    ご丁寧にありがとうございました。

    すでに解決しております、その後 pg_ctl promote コマンドを使うことで trigger_file を使わずに直接マスタ昇格させることにも成功しました

    今はオンラインリカバリに挑戦中です

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.80%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る