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

中村憲一 nakamura.kenichi @ po.ntt-tx.co.jp
2018年 5月 28日 (月) 14:44:30 JST


お世話になっております、中村です。

こちらのご確認のほうはいかがでしょうか?


原因特定のための情報など、不足しているのであれば再取得しますので、
ご指摘いただければと思います。


ご対応のほど、よろしくお願い致します。


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 メーリングリストの案内