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