こんにちは
VirtualBox で2台のマシンを起動し、両方に PostgreSQL を入れて
ストリーミングレプリケーションによる DB レプリケーションを行っています。
pgpool-II を使ってフェールオーバーとオンラインリカバリを試したいのですが
フェールオーバがどうしてもうまくいきません。
試している環境は以下の通りです。
CentOS 6.5
PostgreSQL 9.3
pgpool-II 3.4.2
マシン構成(2台)
srv1 : マスタ, pgpool-II + PostgreSQL
srv2 : スレーブ, PostgreSQL
PostgreSQL 間のレプリケーションはうまくいっていて、
手作業でマスター/スレーブの切り替えもできます。
マスタ側で pool_nodes を見た状態は以下の通りです。
postgres=# show pool_nodes;
node_id | hostname | port | status | lb_weight | role
---------+----------+------+--------+-----------+---------
0 | srv1 | 5432 | 2 | 0.500000 | primary
1 | srv2 | 5432 | 3 | 0.500000 | standby
(2 行)
このように、srv2 側の status が 3 のままです。
この状態で srv1 で DB を停止させ
psql -h srv1 -p 9999 testdb
などのコマンド で DB アクセスを発生させると
フェールオーバの処理には入るのですが最終的に失敗してしまいます。
pgpool.conf では pgpool.conf.sample-stream をベースに使い
以下のように定義しています
(関係しそうな箇所のみ抜粋、記載無い部分はデフォルトのままです)
lang
1#------------------------------------------------------------------------------ 2# CONNECTIONS 3#------------------------------------------------------------------------------ 4listen_addresses = '*' 5 6backend_hostname0 = 'srv1' 7backend_port0 = 5432 8backend_weight0 = 1 9backend_data_directory0 = '/var/lib/pgsql/9.3/data' 10backend_flag0 = 'ALLOW_TO_FAILOVER' 11 12backend_hostname1 = 'srv2' 13backend_port1 = 5432 14backend_weight1 = 1 15backend_data_directory1 = '/var/lib/pgsql/9.3/data' 16backend_flag1 = 'ALLOW_TO_FAILOVER' 17 18#------------------------------------------------------------------------------ 19# REPLICATION MODE 20#------------------------------------------------------------------------------ 21 22replication_mode = off 23 24#------------------------------------------------------------------------------ 25# LOAD BALANCING MODE 26#------------------------------------------------------------------------------ 27 28load_balance_mode = on 29ignore_leading_white_space = on 30 31#------------------------------------------------------------------------------ 32# MASTER/SLAVE MODE 33#------------------------------------------------------------------------------ 34 35master_slave_mode = on 36master_slave_sub_mode = 'stream' 37 38sr_check_period = 10 39sr_check_user = 'postgres' 40sr_check_password = 'password' 41 42#------------------------------------------------------------------------------ 43# HEALTH CHECK 44#------------------------------------------------------------------------------ 45 46health_check_period = 10 47health_check_user = 'chk_user' 48health_check_password = '' 49 50#------------------------------------------------------------------------------ 51# FAILOVER AND FAILBACK 52#------------------------------------------------------------------------------ 53 54failover_command = '/usr/local/bin/failover_stream.sh %d %H /tmp/trigger_file0' 55 56#------------------------------------------------------------------------------ 57# ONLINE RECOVERY 58#------------------------------------------------------------------------------ 59 60recovery_user = 'postgres' 61recovery_password = 'password' 62recovery_1st_stage_command = 'recovery_1st_stage.sh' 63recovery_2st_stage_command = ''
ログを見ると、failover_command の実行時に %H 部分が空欄になっていることがわかりました。
(プライマリにするホスト名が不明なために失敗)
空欄になってしまう理由は恐らく srv2 が正しく認識されないためだと思っているのですが・・・
どなたかご経験ある方いらしゃいましたら、どのような些細な事でも結構ですのでアドバイスいただけませんでしょうか。
ご不明な点は何でもご質問ください。
※参考にしているサイト
http://www.pgpool.net/docs/latest/pgpool-ja.html
http://lets.postgresql.jp/documents/technical/pgpool/3
どうぞよろしくお願いします。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/07/01 05:34
2015/07/01 05:53 編集
2015/07/01 06:21