[pgsql-jp: 34018] Re: pgpool-2.1においてコミット時にセカンダリがダウンした際の不具合?について

Yoichi ISOZAKI iso @ mindgame.net
2004年 9月 22日 (水) 04:03:50 JST


磯崎です。
お世話になっております。

On Tue, 21 Sep 2004 20:19:47 +0900 (JST)
Tatsuo Ishii <t-ishii @ sra.co.jp> wrote:

> 石井です.

〜省略〜

> もしpgpoolで対応するとすると,マスタが正常コミット,セカンダリがエラー
> になった場合にはアプリケーションにエラーを通知せず,黙ってセカンダリを
> 切り放すしかないのですが,それはそれで不都合かもしれないと思ってしまい
> ます.そのあたり,いかがでしょう?

この件も含めまして、現行のpgpoolにおける縮退運転モードへの移行時の
動作につきまして、ちょっと私なりに勝手に考えてみましたので、
一つの意見としてお聞きいただければ幸いです。
もし見当違いなことを言っていましたら、その際は申し訳ございませんが、
聞き流していただくか、またはご指摘いただければと存じます。

今回pgpoolの動作検証を行っていた際に、一つ疑問に思った点があります。

まず、マスタもしくはセカンダリのPostgreSQLデータベースが停止した際に
pgpoolがその状況を検知して縮退運転モードに移行しますが、
その際にクライアント側にエラーが通知されて接続が切断されます。

幾つかのエラーケースを試した限りでは、概ね次のようになりました。
・マスタ側だけを停止した場合は、エラーが2回発生する。
・セカンダリ側だけを停止した場合は、エラーが1回発生する。
・接続中だったセッションは、エラーによって接続を切断される。

そこで私は、そもそもこのエラーをPostgreSQLデータベースに接続する
クライアントアプリケーション側に通知する必要があるのだろうか?
と疑問に思い始めました。

pgpoolを使用することにより、物理的に2つのPostgreSQLデータベースで
論理的に1つのPostgreSQLデータベースを構成することができ、
それによって負荷分散や冗長化などのメリットを実現しています。
pgpoolを導入することはシステム環境レベルでの検討項目であり、
本来はクライアントアプリケーション自体がpgpoolの仕様を意識する
必要はないものと考えています。
pgpoolの公式ページにおいてpgpoolのメリットの1番目に
『アプリケーションの変更の必要がありません』とありますが、
まさしくこのメリットはそのことを指しているものと考えます。
http://www2b.biglobe.ne.jp/~caco/pgpool/

よって、pgpoolが縮退運転モードに移行する際は、
クライアントアプリケーションに対してエラーを通知して
接続を切断する必要はないのではないでしょうか。

たとえマスタもしくはセカンダリが停止したとしても、
その代わりが稼動していればクライアントアプリケーションは
処理を行えますので、このエラーを通知する意味が薄れると思います。

もちろん、縮退運転モードに移行した時は、その事象を管理者に知らせる
必要がありますが、それはクライアントアプリケーションからではなく、
他の方法(例えばメールなど)でpgpoolから通知できるようになっていれば
十分ではないでしょうか。
もしくは監視プログラムを別に用意するのでもいいと思います。

したがいまして、管理者への通知方法が別に設けられているならば、
クライアントアプリケーションにエラーを通知せず、
黙ってセカンダリを切り放してもいいのでは…と考えています。


> > 現時点での最新版であるpgpool-2.1では、2フェーズコミットなどの機能は
> > 実装されていないと認識すればよろしいのでしょうか?
> 
> 2フェーズコミットをpgpoolのようなPostgreSQLのアプリケーションだけで実
> 装するのは無理です.PostgreSQL自体が2フェーズコミットに対応しないと...

この点、了解いたしました。
PostgreSQL本体との仕様上の制約にぶつかるのでは…と推測していましたので、
現状は何ともいかんしがたいものとして認識しました。


最後に、私は仕様上の制約や開発経緯を知らない上で発言していますので、
もしお気に触る点がございましたらご容赦ください。
以上です。

Yo[u]ichi ISOZAKI
E-Mail:iso @ mindgame.net




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