[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 メーリングリストの案内