[pgpool-general-jp: 1226] Re: バックエンドDB3台構成時のフェイルオーバについて
InagakiTadashi
tadashi.1027 @ gmail.com
2013年 11月 7日 (木) 23:09:45 JST
長田さん
いつもお世話になっております。
アイ・エス・ビー稲垣です。
設定を以下にし、failover-stream.shの内容もご指摘の
ものに変更したらうまく行きました。
どうもありがとうございました。
また、追加の質問になっていまいますが、pgpool-IIでは
db03がPrimaryの状態でdb01、db02とオンラインリカバリで復旧し、
その後db03に障害発生した場合の切り替えをfailbackと
いうんでしょうか。
failbackがわかりづらかったので質問させていただきました。
[postgresql.conf]
========================================================================
ailover_command = “failover-stream.sh %d %P %H /tmp/trigger_file0"
[failover-stream.sh]
========================================================================
#! /bin/sh
failed_node=$1
old_primary=$2
new_master=$3
trigger_file=$4
if [ $failed_node -eq $old_primary ]; then
su - postgres -c "/usr/bin/ssh -T $new_master /bin/touch $trigger_file"
fi
exit 0
[実行結果]
========================================================================
[postgres @ db03 ~]$ psql -h 192.168.100.98 -p 9999
psql (9.2.4)
Type "help" for help.
postgres=# SHOW POOL_NODES;
node_id | hostname | port | status | lb_weight | role
---------+----------------+------+--------+-----------+---------
0 | 192.168.100.34 | 5432 | 2 | 0.333333 | primary
1 | 192.168.100.35 | 5432 | 2 | 0.333333 | standby
2 | 192.168.100.36 | 5432 | 2 | 0.333333 | standby
(3 rows)
postgres=# SHOW POOL_NODES;
The connection to the server was lost. Attempting reset: ^[[ASucceeded.
postgres=# SHOW POOL_NODES;
node_id | hostname | port | status | lb_weight | role
---------+----------------+------+--------+-----------+---------
0 | 192.168.100.34 | 5432 | 3 | 0.333333 | standby
1 | 192.168.100.35 | 5432 | 2 | 0.333333 | primary
2 | 192.168.100.36 | 5432 | 2 | 0.333333 | standby
(3 rows)
postgres=# SHOW POOL_NODES;
The connection to the server was lost. Attempting reset: Succeeded.
postgres=# SHOW POOL_NODES;
node_id | hostname | port | status | lb_weight | role
---------+----------------+------+--------+-----------+---------
0 | 192.168.100.34 | 5432 | 3 | 0.333333 | standby
1 | 192.168.100.35 | 5432 | 3 | 0.333333 | standby
2 | 192.168.100.36 | 5432 | 2 | 0.333333 | primary
(3 rows)
postgres=#
========================================================================
2013/11/06 19:15、Yugo Nagata <nagata @ sraoss.co.jp> のメール:
> 稲垣さん
>
> 長田です。
>
> 返信が遅くなってしまい申し訳ありません。
>
> 添付頂いた failover-stream.sh を拝見したところ
> db01 と db03 では同じ内容、db02 では違う内容となっていました。
>
> db01/db03 では「ダウンしたノードのIDが 0 の場合にフェールオーバ(trigger
> ファイルを touch)」となっており、db02 では「ダウンしたノードID が 2 の
> 場合にフェールオーバ」となっていました。(以下抜粋)
>
> ($failed_node にはダウンしたノードID (%d) が入っている)
> # Do nothing if standby goes down.
> if [ $failed_node != 0 ]; then
> exit 0; ~~ これが db02 では 2
> fi
>
> この設定ですとノードID = 1 の場合にはフェイルオーバが発生せず、db02 が
> 落ちた場合はこれに相当する現象と思われます。
>
>> db01、db02、db03のどのサーバがPrimaryであっても、Standbyに切り替わるよう
>> 設定したいと思っております
>
> スクリプトの中で「以前の Primary ノードID」を用いるには、pgpool.conf の
> failover_command の中で %P を指定します。
> (参考:http://www.pgpool.net/docs/latest/pgpool-ja.html#FAILBACK_COMMAND)
>
> 例えば
>
> failover_command = "failover.sh %d %P %H"
>
> と指定すると、failover.sh には以下が渡されます。
>
> - ダウンしたサーバのノードID
> - 旧プライマリサーバのノードID
> - 新しいマスタ(pgpool.conf に指定したバックエンドの内、生きていて番号が
> 最も若いもの)のホスト名
>
> この設定で failover.sh を以下のようにすると「(旧)プライマリが落ちた場合には
> 新しいマスターを新プライマリに昇格させる」という処理が可能です。
> (単純に新マスターを新プライマリにできる場合の処理です。)
>
> failed_node_id = $1
> old_primary_id = $2
> new_master_host = $3
>
> if [ $filed_node_id = $old_primary_id ];then
> su - postgres -c "/usr/bin/ssh -T $new_master_host /bin/touch $trigger_file"
> fi
>
>
> On Tue, 29 Oct 2013 19:31:03 +0900
> 稲垣 <tadashi.1027 @ gmail.com> wrote:
>
>> いつもお世話になっております。
>> アイ・エス・ビー稲垣です。
>>
>> バックエンドDB3台構成時のフェイルオーバ発生時に切り変わるときと、
>> 切り替わらないときがあります。
>> db01が落ちたときはdb02に切り替わる確立が高いですが、
>> db02が落ちたときは必ず切り替わりません。
>> 切り替わらない上にfailover: set new primary node: -1になってしまいます。
>>
>> db01、db02、db03のどのサーバがPrimaryであっても、Standbyに切り替わるよう
>> 設定したいと思っております。
>>
>> お忙しいところ大変失礼いたしますが、ご教授のほど宜しくお願い致します。
>>
>> 添付ファイルはdb01〜db03までのpgpool.confとfailover-stream.sh<http://pgpool.xn--conffailover-stream-ei4r.sh>
>> になります。
>> 構成、バージョン、フェイルオーバ時のログは以下のようになっております。
>>
>> 【構成】
>> pgpool-IIとPostgreSQLを同居させたサーバ3台構成です。
>>
>> host ipaddress
>> db01 192.168.100.34
>> db02 192.168.100.35
>> db03 192.168.100.36
>>
>> 【バージョン】
>> pgpool-II version 3.3.1 (tokakiboshi)
>> psql (PostgreSQL) 9.2.4
>>
>> 【フェイルオーバ時のログ】
>> Oct 29 18:46:23 m2m-pdbs01 pgpool-II[48029]: connect_inet_domain_socket:
>> getsockopt() detected error: Connection refused
>> Oct 29 18:46:23 m2m-pdbs01 pgpool-II[48029]: make_persistent_db_connection:
>> connection to 172.16.64.35(5432) failed
>> Oct 29 18:46:23 m2m-pdbs01 pgpool-II[48029]: health check failed. 1 th host
>> 172.16.64.35 at port 5432 is down
>> Oct 29 18:46:23 m2m-pdbs01 pgpool-II[48029]: set 1 th backend down status
>> Oct 29 18:46:23 m2m-pdbs01 pgpool-II[48029]: wd_start_interlock: start
>> interlocking
>> Oct 29 18:46:23 m2m-pdbs01 pgpool-II[48044]: wd_send_response: failover
>> request from other pgpool is canceled because it's while switching
>> Oct 29 18:46:23 m2m-pdbs01 pgpool-II[48044]: wd_send_response:
>> WD_STAND_FOR_LOCK_HOLDER received but lock holder exists already
>> Oct 29 18:46:24 m2m-pdbs01 pgpool-II[48029]: starting degeneration.
>> shutdown host 172.16.64.35(5432)
>> Oct 29 18:46:24 m2m-pdbs01 pgpool-II[48029]: Restart all children
>> Oct 29 18:46:24 m2m-pdbs01 pgpool-II[48029]: find_primary_node_repeatedly:
>> waiting for finding a primary node
>> Oct 29 18:46:32 m2m-pdbs01 pgpool-II[31414]: connect_inet_domain_socket:
>> getsockopt() detected error: Connection refused
>> Oct 29 18:46:32 m2m-pdbs01 pgpool-II[31414]: make_persistent_db_connection:
>> connection to 172.16.64.35(5432) failed
>> Oct 29 18:46:32 m2m-pdbs01 pgpool-II[31414]: check_replication_time_lag:
>> could not connect to DB node 1, check sr_check_user and sr_check_password
>> Oct 29 18:46:34 m2m-pdbs01 pgpool-II[48029]: wd_end_interlock: end
>> interlocking
>> Oct 29 18:46:35 m2m-pdbs01 pgpool-II[48029]: failover: set new primary
>> node: -1
>> Oct 29 18:46:35 m2m-pdbs01 pgpool-II[48029]: failover: set new master node:
>> 0
>
>
> --
> Yugo Nagata <nagata @ sraoss.co.jp>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://www.sraoss.jp/pipermail/pgpool-general-jp/attachments/20131107/b1cba177/attachment-0001.html>
pgpool-general-jp メーリングリストの案内