[pgpool-general-jp: 1551] Re: DBフェイルオーバ後の「show pool_nodes」コマンドの role列について

Bo Peng pengbo @ sraoss.co.jp
2018年 6月 18日 (月) 17:58:27 JST


中村 憲一さま

彭です。

ご報告頂いている不具合が以下のコミットで修正されました。

  https://git.postgresql.org/gitweb?p=pgpool2.git;a=commitdiff;h=3c02bd050ef66a0c7572639b3705efdd1c7cda6c

ご確認お願いします。

以上、よろしくお願いします。

On Mon, 4 Jun 2018 12:02:43 +0900
Bo Peng <pengbo @ sraoss.co.jp> wrote:

> 中村 憲一さま
> 
> 彭です。
> 
> 情報のご提供ありがとうございます。
> ご報告頂いている事象を再現しました。
> Watchdog の不具合の可能性が高いので、現在調査中です。
> 
> 調査に進展がございましたら、連絡いたします。
> 
> 以上、よろしくお願いします。
> 
> On Fri, 1 Jun 2018 17:43:13 +0900
> 中村憲一 <nakamura.kenichi @ po.ntt-tx.co.jp> wrote:
> 
> > 彭様
> > 
> > お世話になっております、中村です。
> > 
> > ご連絡を頂きありがとうございます。
> > 
> > 
> > 以下について、添付いたします。
> > 
> > - Pgpool-II 設定ファイル:pgpool.conf
> >  ・pgpoolマスタのファイル pgpool.conf-master
> >  ・pgpoolスタンバイのファイル pgpool.conf-standby
> > 
> > - PostgreSQL 設定ファイル:postgresql.conf
> >  ・PostgreSQLマスタのファイル(スタンバイも同じファイルを使用)
> > 
> > - フェイルオーバスクリプト
> >  ・failover.sh
> > 
> > - オンラインリカバリスクリプト
> >  ・未設定のため、ファイルがありません
> > 
> > 
> > 以上となります。
> > 
> > ご確認のほど、よろしくお願い致します。
> > 
> > 
> > On 2018/05/31 0:31, Bo Peng wrote:
> > > 彭です。
> > > 
> > > 確認しますので、以下の情報を提供していただけないでしょうか。
> > > 
> > > - Pgpool-II 設定ファイル:pgpool.conf
> > > - PostgreSQL 設定ファイル:postgresql.conf
> > > - フェイルオーバスクリプト
> > > - オンラインリカバリスクリプト
> > > 
> > > 以上、よろしくお願いします。
> > > 
> > > On Mon, 28 May 2018 14:44:30 +0900
> > > 中村憲一 <nakamura.kenichi @ po.ntt-tx.co.jp> wrote:
> > > 
> > >> お世話になっております、中村です。
> > >>
> > >> こちらのご確認のほうはいかがでしょうか?
> > >>
> > >>
> > >> 原因特定のための情報など、不足しているのであれば再取得しますので、
> > >> ご指摘いただければと思います。
> > >>
> > >>
> > >> ご対応のほど、よろしくお願い致します。
> > >>
> > >>
> > >> On 2018/05/11 11:13, 中村憲一 wrote:
> > >>> はじめまして、お世話になります、中村と申します。
> > >>>
> > >>>
> > >>> DBフェイルオーバを実施した際の、DBノード情報の各pgpoolノードへの
> > >>> 伝播タイミングについてご質問させてください。
> > >>>
> > >>>
> > >>> 【概要】
> > >>> DBフェイルオーバ後に pgpoolのスタンバイノードから「show pool_nodes」コマ
> > >>> ンドを
> > >>> 実行すると、フェイルオーバによる role列の変更が反映されていませんでした。
> > >>> また、role列の反映漏れに伴うエラーログが、pgpoolのスタンバイノード上で、
> > >>> 継続的に出力されています。
> > >>>
> > >>> なお、pgpoolのマスタノードでは role列の情報が変わっています。
> > >>> また、status 列の値は pgpoolの両ノードで up から down へと遷移しています。
> > >>>
> > >>> 【質問】
> > >>> 上記の事象は、
> > >>> ・pgpool-IIの再起動
> > >>> ・障害になったDBノードの復旧と pcp_attach_node の実行
> > >>> のいずれかを行うことで解消しますが、DBノードの情報の変更を、
> > >>> 自動的に pgpoolのスタンバイノードへ反映させる方法はないでしょうか?
> > >>>
> > >>>
> > >>> 以下、検証環境、DB構成および再現手順です。
> > >>>
> > >>> 【環境】
> > >>>  CentOS 7.2
> > >>>  PostgreSQL 10.2
> > >>>  pgpool-II 3.7.3(3.7.2でも同様)
> > >>>
> > >>> 【構成】
> > >>>  DBノード0(マスタ)
> > >>>  DBノード1(スタンバイ)
> > >>>   ※同期レプリケーション構成
> > >>>  pgpoolノード0(MASTER)
> > >>>  pgpoolノード1(STANDBY)
> > >>>   ※pgpoolは2台構成
> > >>>
> > >>> 【再現手順】
> > >>> 1. DBノード2台、pgpoolノード2台 ともに正常に稼動させる(pgpoolノード3台
> > >>> でも同様)
> > >>> 2. DBノード0(マスタ)を pg_ctl stop で停止させる
> > >>> 3. DBノード0(マスタ)の障害を pgpoolノード0(MASTER)が検知し、DBフェイ
> > >>> ルオーバを行う
> > >>> 4. DBフェイルオーバにより、DBノード1(スタンバイ)がマスタに昇格する
> > >>>
> > >>> この状態で pgpoolノード1(STANDBY)の psqlより「show pool_nodes」コマンドを
> > >>> 実行すると、実態と異なる、role列の値が出力されます。
> > >>>
> > >>> 5. DBノード0 をスタンバイとして復旧し、レプリケーション構成に再組み込み
> > >>> (pcp_attach_node)する
> > >>>
> > >>> この状態で pgpoolノード1(STANDBY)上で「show pool_nodes」コマンドを実行
> > >>> すると、
> > >>> role列の結果が正しい値になります。
> > >>>
> > >>>
> > >>>
> > >>> 「show pool_nodes」で表示される情報は以下のとおり変化します。
> > >>>
> > >>> (1) 正常動作時
> > >>> pgpoolノード0(MASTER)、pgpoolノード1(STANDBY)の status列、role列の値
> > >>> が同じである。(正しい状態)
> > >>>
> > >>> ▼pgpoolノード0(MASTER)
> > >>> -bash-4.2$ psql -p 9999 -U postgres -c "show pool_nodes" postgres
> > >>>    node_id |    hostname    | port | status | lb_weight |  role   |
> > >>> select_cnt | load_balance_node | replication_delay
> > >>> ---------+----------------+------+--------+-----------+---------+------------+-------------------+-------------------
> > >>>
> > >>>    0       | 192.168.56.246 | 5432 | up     | 0.500000  | primary | 2
> > >>>        | true              | 0
> > >>>    1       | 192.168.56.243 | 5432 | up     | 0.500000  | standby | 0
> > >>>        | false             | 0
> > >>> (2 行)
> > >>>
> > >>> ▼pgpoolノード1(STANDBY)
> > >>> -bash-4.2$ psql -p 9999 -U postgres -c "show pool_nodes" postgres
> > >>>    node_id |    hostname    | port | status | lb_weight |  role   |
> > >>> select_cnt | load_balance_node | replication_delay
> > >>> ---------+----------------+------+--------+-----------+---------+------------+-------------------+-------------------
> > >>>
> > >>>    0       | 192.168.56.246 | 5432 | up     | 0.500000  | primary | 0
> > >>>        | false             | 0
> > >>>    1       | 192.168.56.243 | 5432 | up     | 0.500000  | standby | 0
> > >>>        | true              | 0
> > >>> (2 行)
> > >>>
> > >>>
> > >>> (2) DBフェイルオーバ実施後
> > >>> DBノード0(マスタ)を停止し、フェイルオーバで DBノード1(スタンバイ)が
> > >>> マスタに昇格すると、
> > >>> pgpoolノード0(MASTER)と pgpoolノード1(STANDBY)の status列の値は同じ
> > >>> であるが、
> > >>> role列の値が異なる。(誤った状態との認識)
> > >>>
> > >>> ▼pgpoolノード0(MASTER)
> > >>> -bash-4.2$ psql -p 9999 -U postgres -c "show pool_nodes" postgres
> > >>>    node_id |    hostname    | port | status | lb_weight |  role   |
> > >>> select_cnt | load_balance_node | replication_delay
> > >>> ---------+----------------+------+--------+-----------+---------+------------+-------------------+-------------------
> > >>>
> > >>>    0       | 192.168.56.246 | 5432 | down   | 0.500000  | standby | 2
> > >>>        | false             | 0
> > >>>    1       | 192.168.56.243 | 5432 | up     | 0.500000  | primary | 0
> > >>>        | true              | 0
> > >>> (2 行)
> > >>>
> > >>> ▼pgpoolノード1(STANDBY)
> > >>> -bash-4.2$ psql -p 9999 -U postgres -c "show pool_nodes" postgres
> > >>>    node_id |    hostname    | port | status | lb_weight |  role   |
> > >>> select_cnt | load_balance_node | replication_delay
> > >>> ---------+----------------+------+--------+-----------+---------+------------+-------------------+-------------------
> > >>>
> > >>>    0       | 192.168.56.246 | 5432 | down   | 0.500000  | primary | 0
> > >>>        | false             | 0
> > >>>    1       | 192.168.56.243 | 5432 | up     | 0.500000  | standby | 0
> > >>>        | true              | 0
> > >>> (2 行)
> > >>>
> > >>> ※しばらく放置しても role列の値に変化なし。
> > >>>
> > >>>
> > >>> (3) DB復旧、再組み込み後
> > >>> 停止した DBノード0(マスタ)をスタンバイとして再組み込みし、
> > >>> pcp_attach_node すると
> > >>> pgpoolノード1(STANDBY)の role列の値が、pgpoolノード0(MASTER)の role
> > >>> 列の値と同じ値になった。(正しい状態)
> > >>>
> > >>> ▼pgpoolノード0(MASTER)
> > >>> -bash-4.2$ pcp_attach_node -n 0
> > >>> Password:
> > >>> pcp_attach_node -- Command Successful
> > >>>
> > >>> -bash-4.2$ psql -p 9999 -U postgres -c "show pool_nodes" postgres
> > >>>    node_id |    hostname    | port | status | lb_weight |  role   |
> > >>> select_cnt | load_balance_node | replication_delay
> > >>> ---------+----------------+------+--------+-----------+---------+------------+-------------------+-------------------
> > >>>
> > >>>    0       | 192.168.56.246 | 5432 | up     | 0.500000  | standby | 2
> > >>>        | false             | 0
> > >>>    1       | 192.168.56.243 | 5432 | up     | 0.500000  | primary | 0
> > >>>        | true              | 0
> > >>> (2 行)
> > >>>
> > >>> ▼pgpoolノード1(STANDBY)
> > >>> -bash-4.2$ psql -p 9999 -U postgres -c "show pool_nodes" postgres
> > >>>    node_id |    hostname    | port | status | lb_weight |  role   |
> > >>> select_cnt | load_balance_node | replication_delay
> > >>> ---------+----------------+------+--------+-----------+---------+------------+-------------------+-------------------
> > >>>
> > >>>    0       | 192.168.56.246 | 5432 | up     | 0.500000  | standby | 0
> > >>>        | false             | 0
> > >>>    1       | 192.168.56.243 | 5432 | up     | 0.500000  | primary | 0
> > >>>        | true              | 0
> > >>> (2 行)
> > >>>
> > >>>
> > >>> 以上です。
> > >>> ご確認のほど、よろしくお願い致します。
> > >>>
> > >>>
> > >>>
> > >>
> > >> -- 
> > >> /*------------------------------------------------
> > >> 中村 憲一
> > >> NTTテクノクロス株式会社 IV2BU
> > >> 横浜アイマークプレイス13階
> > >> TEL  : 045-212-7393
> > >> MAIL : nakamura.kenichi @ po.ntt-tx.co.jp
> > >> ------------------------------------------------*/
> > >>
> > >> _______________________________________________
> > >> pgpool-general-jp mailing list
> > >> pgpool-general-jp @ sraoss.jp
> > >> http://www.sraoss.jp/mailman/listinfo/pgpool-general-jp
> > > 
> > > 
> > 
> > -- 
> > /*------------------------------------------------
> > 中村 憲一
> > NTTテクノクロス株式会社 IV2BU
> > 横浜アイマークプレイス13階
> > TEL  : 045-212-7393
> > MAIL : nakamura.kenichi @ po.ntt-tx.co.jp
> > ------------------------------------------------*/
> 
> 
> -- 
> Bo Peng <pengbo @ sraoss.co.jp>
> SRA OSS, Inc. Japan
> 
> _______________________________________________
> pgpool-general-jp mailing list
> pgpool-general-jp @ sraoss.jp
> http://www.sraoss.jp/mailman/listinfo/pgpool-general-jp


-- 
Bo Peng <pengbo @ sraoss.co.jp>
SRA OSS, Inc. Japan



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