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

Reiji Matsumoto matsumoto @ spline.oc.to
2006年 2月 16日 (木) 00:35:35 JST


松本と申します。
DBの負荷分散と障害対策を目的とし、pgpoolを負荷分散モードで
稼動させる事を計画しています。それに伴い、DB本体では無く
pgpoolに障害が発生した場合の対応方法についてお聞きしたいと
思います。よろしくお願いします。

想定している構成は以下の通りです

WEB-A
 apache+phpで稼動。localhost:9999でpgpoolに接続
 pgpoolはDB-A、DB-Bに接続している

WEB-B
 apache+phpで稼動。localhost:9999でpgpoolに接続
 WEB-Aとは違うサービスを提供するが、アクセス
 するデータベースはWEB-Aと同じ。
 pgpoolはDB-A、DB-Bに接続している

DB-A,DB-B
postgresqlが稼動している。WEB-A、WEB-Bからpgpool
を通してアクセスされる。
DB-Aがpgpoolのマスタ、DB-Bがセカンダリとする。

この構成において、WEB-Aがメモリのハードウェアエラー等、致命的
なエラーで動作を停止してしまったとします。この場合、WEB-Aで稼
動しているpgpoolも当然停止します。
pgpoolはマスタに出力してからセカンダリに出力しますが、もし、
マスタへはコマンドを発行し、セカンダリには発行していないタイ
ミングでWEB-Aが停止したとしたら、DB-A、DB-Bの整合性はどうなる
でしょうか。単純に考えると、DB-Aにのみコマンドが発行されてし
まうような気がします。最後のコマンドが更新系のコマンドだとし
たら、DB-AとDB-Bの整合性が取れなくなってしまうという事は無い
でしょうか。

WEB-Bが存在しないとしたら、WEB-Aが突然終了した場合には、マスタ
のデータをセカンダリにコピーしてから運用を再開するという運用ル
ールで乗り切れると思います。しかし、実際にはWEB-Aが停止してか
らも、WEB-Bのサービスを継続しなければなりません。また、将来的
にはWEB-A自身もロードバランサー等で冗長化する可能性があります。

このような事故が発生した後でも、WEB-Bのサービスを安全に継続す
る事は可能でしょうか。
また予想する通りの問題が起こるとしたら、考えられうる対処方法を
ご教示頂けましたら幸いです。

よろしくお願いします。







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