[pgpool-general-jp: 1504] pgpoolマスタとpostgresqlマスタ間のNW断時の挙動について

Tomohiro Hiramitsu hiramitsu.tomohiro @ lab.ntt.co.jp
2018年 3月 12日 (月) 10:43:29 JST


平光と申します。
お世話になっております。

お聞きしたい事があり、投稿させて頂きます。

3.7系で追加されたwatchdogクォーラム機能について質問させてください。

以下の構成の環境において、pgpoolマスタ~postgresqlマスタ間のNWをダウンさせた状態で仮想IP(またはpgpoolマスタ)に対してSQLを実行するとサービスがread-onlyであると返ってきます。

以前の3.6系などクォーラム機能が追加される前はpgpoolがpostgresqlをフェイルオーバさせていたのでサービスを継続できていましたが、3.7系ではread-onlyになってしまっています。

・環境
CentOS 7.4
pgpool-II 3.7.2(ノード3台)
postgresql 10.2(ノード2台)

・設定
モード:ストリーミングレプリケーションモード
watchdog:有効
クォーラム機能:有効(デフォルト設定)
   failover_when_quorum_exists = on
   failover_require_consensus = on
   allow_multiple_failover_requests_from_node = off


NW断に利用したコマンドの例(pgpoolマスタで実行)
---
# iptables -A OUTPUT -p all -s [pgpoolマスタ] -d [postgresqlマスタ] -j DROP
---

SQLエラーの例
---
$ psql -h [仮想IP] -p 9999 -U postgres -d postgres -c "create table test 
(i int)"
ERROR:  cannot execute CREATE TABLE in a read-only transaction
---

pgpoolマスタでのshow pool_nodesの実行結果
---
  node_id |  hostname   | port |   status   | lb_weight |  role   | 
select_cnt | load_balance_node | replication_delay
---------+-------------+------+------------+-----------+---------+------------+-------------------+-------------------
  0       | 192.168.1.1 | 5432 | quarantine | 0.500000  | standby | 0 
       | false             | 0
  1       | 192.168.1.2 | 5432 | up         | 0.500000  | standby | 2 
       | true              | 0
(2 rows)
---
※192.168.1.1がpostgresqlマスタなので隔離されている

また、以下を確認しました。
・各pgpoolノードに対してpcp_watchdog_infoを実行した結果から
pgpoolマスタはNW断前後でノードが切り替わっていないことを確認。

・postgresqlサーバはフェイルオーバされていないことを確認。


上記の状況から、
pgpoolマスタ~postgresqlマスタ間のNWをダウンさせた結果pgpoolマスタはpostgresqlマスタを隔離したが、他の2台のpgpoolスタンバイノードはpostgresqlマスタに正常にアクセスできるためクォーラム機能の投票の結果、フェイルオーバは実施されずpgpoolマスタも切り替わっていない。
そのため、pgpoolマスタや仮想IPからはpostgresqlのスタンバイにアクセスしてしまうことでread-onlyになっていると推測しています。

このような場合はpgpool側のマスタがスタンバイのいずれかに切り替わればサービスには影響が出ないと思いのですが、当方の環境では切り替わりませんでした。

以下のページの「5.14.6. 
フェイルオーバの挙動の制御」の項目を見ると、上記の挙動は想定通りにも見えますが、確認のため以下の2点を質問させてください。
http://www.pgpool.net/docs/latest/ja/html/runtime-watchdog-config.html


質問:
1.前述の環境構成時にpgpoolマスタ~postgresqlマスタ間のNWをダウンさせると仮想IP、pgpoolマスタからのアクセスがread-onlyになってしまうのは仕様通りでしょうか。

2. 
以下のようにクォーラム機能をoffに設定した場合は、クォーラム機能が実装される以前の3.6系と同じ挙動になるという理解で正しいでしょうか。
   failover_when_quorum_exists = off
   failover_require_consensus = off
   allow_multiple_failover_requests_from_node = off


以上です、よろしくお願いいたします。
-- 
+------------------------------------------------+
   平光 友博 (Tomohiro Hiramitsu)

   NTT OSSセンタ 基盤技術ユニット DBMS担当
   Tel: 03-5860-5115
   E-mail: hiramitsu.tomohiro @ lab.ntt.co.jp
+------------------------------------------------+



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