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

Tomohiro Hiramitsu hiramitsu.tomohiro @ lab.ntt.co.jp
2018年 3月 15日 (木) 16:53:49 JST


平光です。
お世話になっております。

すみません、まだ 
3.7.2-2では動作確認を出来ていないのですが、先に質問をさせてください。
以下のリリース内容によって、pgpoolマスタ~postgresqlマスタ間のNWをダウンさせた際にread-onlyになってしまう件がどのように修正されるのかよく分かりませんでした。

 > 今回のリリースでは、 3.7.2 のコミット 9022ff842fb5dbbe06e2f2f4cf38fadf47b592da 
が
 > 取り消されました。今回のリリースによって、primary node が 0 
以外の場合でも更新
 > クエリを実行できるようになりました。


質問:
=============
1.
バグであるのであれば、3.7.2-2ではpgpoolマスタ~postgresqlマスタ間のNWをダウンさせた際にどのような挙動をするのが仕様通りなのでしょうか。(pgpoolマスタが切り替わる、またはpostgresqlがフェイルオーバする.etc)

2.
今回取り消されたコミットはALWAYS_MASTER 
がオンの場合に発生するバグの修正かと思うのですが、当方の環境ではALWAYS_MASTERはデフォルトのオフ設定のままなので該当しません。
(fail_over_on_backend_errorもデフォルトの「on」です。 )
3.7.2-2でのコミット取り消しは上記のパラメータがデフォルトのままの環境にも影響するのでしょうか。

3.
取り消されたコミットはバグフィックスのようですが、これは 3.7.2-2では該当
のバグは再発するようになっている、という認識で合っているでしょうか。
=============


なお、当方の認識では仮想IPを持っているpgpoolマスタがpostgresqlマスタにアクセスできない以上、pgpoolマスタかpostgresqlマスタのフェイルオーバを実行しなけば仮想IPへのリクエストがread-onlyなってしまう事象は解消できないという認識です。

3.7.2-2で修正されたバグはフェイルオーバの実行に関するものではないように見えましたので、私が質問させて頂いたのとは別のバグではないでしょうか?

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

On 2018/03/14 21:55, Tatsuo Ishii wrote:
> 石井です。
> 
> Pgpool-II 3.7.2のバグである可能性があります。
> 
> Pgpool-II 3.7.2以外のバージョンを使用するか、git repositoryから3.7
> stableのHEADを取得していただくか、本日リリースされたばかりのRPMをお試
> しいただけますか?
> 
> 本日リリースされたRPMは、3.7 stable HEADと同等の内容です。
> --
> Tatsuo Ishii
> SRA OSS, Inc. Japan
> English: http://www.sraoss.co.jp/index_en.php
> Japanese:http://www.sraoss.co.jp
> 
>> 平光と申します。
>> お世話になっております。
>>
>> お聞きしたい事があり、投稿させて頂きます。
>>
>> 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
>>
>>
>> 以上です、よろしくお願いいたします。



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