[pgpool-general-jp: 575] Re: replication_stop_on_mismatch

Tatsuo Ishii ishii @ sraoss.co.jp
2009年 7月 8日 (水) 09:21:55 JST


> 現在pgpool-II-2.2.2で
> バックエンド2台でレプリケーションモードで使用しております。
> 
> pgpool.confで関係すると思われる設定箇所を抜粋します。
> 
> replication_mode : true
> load_balance_mode : false
> replicate_select : false
> replication_stop_on_mismatch : true
> 
> マニュアル上replication_stop_on_mismatchの説明として
> trueを指定すると不一致があった場合
>    に強制的に縮退運転に入るという記述がありましたので
> 試しに異なる件数のテーブルを用意して、select と updateを実行してみました。
> 
> ●件数が異なるようにselect文を発行すると主系の結果が返ってきました。
> replicate_select : falseであるため、仕様通りの動きと理解しております。
> 
> ⇒ここでエラーを発生させるためには「replicate_select : true」とする他ないのでしょうか?

はい、そうです。

> ●更新件数が異なるようにupdateを発行すると、エラーが発生しましたが
> 縮退しませんでした。
> 
> ログには下記だけ出力されていました。
>   pgpool detected difference of the number of inserted, updated or delete
> d tuples. Possible last query was: "update tellers set bid=1 where tid=8;
>   
> replicate_select : trueとして同様にupdateを試しましたが、やはり結果は
> 同じでした。(replicate_selectなので関係ないですよね)
> 
> ⇒updateの挙動としては(おそらくdeleteも?)更新結果の件数が異なる
>  場合でも縮退しないものなのでしょうか?

INSERTもそうです(めったに起きませんが)。

ただ、このケースで縮退しないのが果たして良いのかどうかに関しては議論の
余地があるところだと思います。

もしreplication_stop_on_mismatchがtrueの場合には、このケースで縮退させるよ
うにするとして、賛成、反対の方のご意見を広く伺いたいと思います。

> またマニュアル上replication_stop_on_mismatchの説明にある
> 「マスターDBと他のDBノードの間でデータの不一致があった場合
>> とは何をもって不一致としているのでしょうか?

「PostgreSQLから流れてくる応答パケットの数や種類が異なったとき」という
のが一番正確な説明です。典型的な例としては、SELECTが返す件数が異なった
とき、PostgreSQLのクエリ実行結果で、片方が正常終了、もう一方が異常終了、
などの場合です。
--
Tatsuo Ishii
SRA OSS, Inc. Japan


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