[pgsql-jp: 36768] Re: pgpoolの障害時の動作と、その後の対応方法について

Reiji Matsumoto matsumoto @ spline.oc.to
2006年 2月 24日 (金) 07:49:32 JST


松本です。
コメントありがとうございます。

> ご指摘の通り,整合性が取れなくなります.
こちらでも、実際に確認できました。

私が危惧しているタイミングが、具体的にはソースの何行目なのかを
追ってみました。pgpool-3.0.0においては、pool_process_query.c
の607行目がそのポイントのひとつのようですね。
607行に'sleep(5)'と記述してリコンパイル後、pgpool -ndで実行し、
ポーリングしている時にctrl+cで止めると、見事(?)にDB-A、DB-Bの
整合性が崩れてしまいました。
sleepさせない場合、どのぐらいのパーセンテージで整合性が崩れる
可能性があるかは興味がありますので、調べてみたいと思っています。

> 明示的なトランザクションを使うと多少危険性は減りそうです.
略...
> 1-Mから2-S)のどこでWEB-Aが死んでもOK. 3-Mと3-Sの間にWEB-Aが死ぬとアウ
> トですが,それはあきらめるしかないのですが,INSERTよりはCOMMITの方が実
> 行時間が短いので多少はましかと.
確かにCOMMITの時間はかなり短いのでよい感じだと思いますが、NO STRICT
モードならマスタにコマンドを発行してからセカンダリに発行するまでの時間も
相当速いと思われますので、ひょっとしたら危険性、安全性は同程度になって
しまうかも知れません。

> ところで,2相コミットとテーブルロックを使うと,WEB-Aが突然死したことを
> 検知できるような気がします.
非常に参考になりました。
psqlで1行ずつSQLを発行して試してみましたが、別セッションは完全に止まり
ますので、今回の問題で整合性が崩れたDBを参照してしまう事態は防げそうな
気がしてます。WEB-Bのサービスは停止してしまいますが、この方法をメインに
構成を考えてみたいと思ってます。

ありがとうございました。





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