[pgpool-general-jp: 1241] Re: バックエンドDB3台構成時のフェイルオーバについて

稲垣 tadashi.1027 @ gmail.com
2013年 11月 21日 (木) 13:09:03 JST


石井様

いつもお世話になっております。
アイ・エス・ビー稲垣です。

現環境ではフェイルオーバした事がないです。
ちょっと出先なのですぐの確認は出来ませんが、明日の18時以降でしたら動作確認できそうです。
watchdogのoff設定で試してみたいと思います。

以上、宜しくお願いします。
2013/11/21 0:08 "Tatsuo Ishii" <ishii @ sraoss.co.jp>:

> $new_masterに入るのは、hostname0, 1, 2の中で、生きている(ダウン状態でな
> い)最も若いidを持つホスト名です。したがって、稲垣さんのpgpool.confであれば、
>
> db01: down
> db02: up
> db03: up
>
> なら、db02が入ります。
>
> db01: up
> db02: down
> db03: up
>
> なら、db01が入ります。
>
> それでも思ったような動作にならないのであれば、watchdogを切って試してみ
> てください。watchdogの障害の可能性もあるので。
> --
> Tatsuo Ishii
> SRA OSS, Inc. Japan
> English: http://www.sraoss.co.jp/index_en.php
> Japanese: http://www.sraoss.co.jp
>
> > 石井様
> >
> > いつもお世話になっております。
> > アイ・エス・ビー稲垣です。
> >
> > すみません。ご返信が遅くなりました。
> >
> > 以下のような書き方だとdb03がprimaryでdb01,db02がstandbyの場合、
> > $new_masterにdb01やdb02が入らないのですが、ここをハードコーディングで
> > 固定値にするしか方法はないんでしょうか。
> >
> >
> > [failover-stream.sh]
> > ========================================================================
> > #! /bin/ti
> > 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
> > ========================================================================
> >
> > 色々と試行錯誤しておりますが、現状ではフェイルオーバが行われず、
> > 運用でカバーする方向で検討しています。
> >
> > できればシステムとしてフェイルオーバできるような状態になっていることが
> > 望ましいと考えております。
> >
> > 以上、ご教授の程宜しくお願い致します。
> >
> >
> > 2013/11/12 7:10、Tatsuo Ishii <ishii @ sraoss.co.jp> のメール:
> >
> >> 横から失礼します。石井です。
> >>
> >>> 長田さん
> >>>
> >>> いつもお世話になっております。
> >>> アイ・エス・ビー稲垣です。
> >>>
> >>> 追加の質問ご教授ありがとうございまいした。
> >>> ではfailbackはpgpool-II管理下に組み込むだけで、
> >>> さらにPrimary状態に戻すような考え方ではないのですね。
> >>
> >> はい、そういう仕様です。
> >>
> >>> 現状ではdb01→db02→db03と順にフェイルオーバした場合に
> >>> db03→db01 or db02にフェイルオーバできない状況です。
> >>>
> >>> こちらはpgpool-IIの仕様なんでしょうか?
> >>
> >> 違います。
> >>
> >>> db03から復旧したdb01 or db02にフェイルオーバするよう
> >>> 設定することは可能でしょうか。
> >>
> >> db03に障害が起きた後、どのサーバにフェイルオーバするか、どのサーバをプ
> >> ライマリにするか(しないか)は、failover scriptの書き方次第です。
> >>
> >>> 立て続けの質問になってしまい申し訳ございません。
> >>>
> >>>
> >>> 2013/11/11 15:54、Yugo Nagata <nagata @ sraoss.co.jp> のメール:
> >>>
> >>>> 稲垣さん
> >>>>
> >>>> 長田です。
> >>>>
> >>>> On Thu, 7 Nov 2013 23:09:45 +0900
> >>>> InagakiTadashi <tadashi.1027 @ gmail.com> wrote:
> >>>>
> >>>>> 長田さん
> >>>>>
> >>>>> いつもお世話になっております。
> >>>>> アイ・エス・ビー稲垣です。
> >>>>>
> >>>>> 設定を以下にし、failover-stream.shの内容もご指摘の
> >>>>> ものに変更したらうまく行きました。
> >>>>> どうもありがとうございました。
> >>>>
> >>>> ご連絡ありがとうございます。
> >>>> うまくいってよかったです!
> >>>>
> >>>>>
> >>>>> また、追加の質問になっていまいますが、pgpool-IIでは
> >>>>> db03がPrimaryの状態でdb01、db02とオンラインリカバリで復旧し、
> >>>>> その後db03に障害発生した場合の切り替えをfailbackと
> >>>>> いうんでしょうか。
> >>>>> failbackがわかりづらかったので質問させていただきました。
> >>>>
> >>>> 世間一般の言う「主系・待機系の役割を障害の前の状態に戻すこと」の意味とは
> >>>> 違う意味で用いているので混乱されるかもしれません。
> >>>>
> >>>> pgpool-IIでは fail backを「一度でpgpool-II管理下から切り離したノード
> >>>> (但しダウン状態ではない)を、再びpgpool-II管理下に復帰させる操作」の意
> >>>> 味で使っています。
> >>>>
> >>>>>
> >>>>> [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>
> <http://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>
> >>>>>
> >>>>
> >>>>
> >>>> --
> >>>> Yugo Nagata <nagata @ sraoss.co.jp>
> >
>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://www.sraoss.jp/pipermail/pgpool-general-jp/attachments/20131121/723e9068/attachment-0001.html>


pgpool-general-jp メーリングリストの案内