[pgsql-jp: 32620] Re: pgpool 1.0 alpha1リリース

Tatsuo Ishii t-ishii @ sra.co.jp
2004年 3月 29日 (月) 21:13:35 JST


石井です.

From: ALIHALA Hiroshi <arihara.hiroshi @ jp.fujitsu.com>
> こんばんは。早速replyをありがとうございます。

どういたしまして.

>  想定したケースは、PostgreSQLがダウン→復旧となったときにpgpoolは起
> 動しっ放しだった場合、ドキュメントを読む限りはA、B共に復旧してても、
> pgpoolを再起動しないとレプリケーションは再開しない、と解釈したんです
> が。
>    DBサーバ pgpoolの状態
> 正常 A○ B○ コネクションプール中、レプリケーション中
> 異常 A× B○ コネクションプール中、フェイルオーバー中
> 復帰 A○ B○ コネクションプール中
> →ここでpgpoolを再起動しないと永遠に↓の状態に戻らない
> 正常 A○ B○ コネクションプール中、レプリケーション中

はい,これで合っています.pgpoolを再起動しなくても自動的に復旧させよう
とすると,時々ダウン中のDBにアクセスに行かなければならなくなるので,あ
えてこうしています.

>  つまり、再起動を忘れるとAとBが時間とともに違うものになっていく危険
> 性があるのかなと。であるならば、運用マニュアルなどに朱書きでもしない
> と危険かなと :-)

なるほど.ドキュメント修正のTODOに入れておきます.

> > なので,ある程度割り切り(たとえば一旦DBをオフライン状態にしてから同期
> > させる)が必要かな,と思っています.
> 
>  個人的にはそれでも充分と思います。プーリングに加え、レプリケーショ
> ン、障害時のフェイルオーバーまでサポートしているんだから、復旧後の同
> 期手段まで入れれば、ツールとして完結するんじゃないかと。

実際には,同期と言っても,rsyncか何かでデータベースクラスタの内容を同
じにすればよいだけなんですけど:-)今考えているのは,こんなシナリオです.

1) フロントエンドからの接続がなければ3)へ

2) そうでなければ,フロントエンドからの接続をすべて強制切断する

3) フロントエンドからの新たな接続を禁止

4) マスタとセカンダリのpostmasterを停止

5) rsyncでマスタからセカンダリへデータベースクラスタをコピー

6) マスタとセカンダリのpostmaster起動,フロントエンドからの接続禁止を
   解除

ご覧のように非常にシンプル.

> > # ちなみに,データの不一致の検出は現時点では極めていい加減で,今後改善
> > # の予定です.
> 
>  大変な部分だと思いますが、是非改善をお願いします。

ここが非常に頭の痛いところです.データの不一致を徹底的にチェックするこ
ともできますが,そうすると実際には業務上問題のないような不一致でもアウ
トになってしまうのです.たとえば,

SELECT xmin FROM hoge WHERE ....

なんて問い合わせを考えると,両系のDBのトランザクションカウンタはささい
なことで一致しなくなることが考えられ(たとえばread onlyをSELECTを,
pgpoolを経由しないで直接DBに発行しただけでカウンタが合わなくなります),
こんなのまでエラーとして検出してしまうようでは,使いにくくてたまりませ
ん...
--
Tatsuo Ishii



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