[pgcluster: 13] クラスタサーバの復旧がうまくいきません
Takegami, Takashi
pgcluster@ml.postgresql.jp
Wed, 07 Jan 2004 17:44:03 +0900
竹上と申します。
PGCluster1.0.6を使って、冗長性のあるWEB+DBシステムを構築しています。
お世話になっております。
■クラスタサーバの復旧がうまくいきません。どう対処すればよいか、ご教授
願えないでしょうか?
- 復旧のうまくいかない状況が2点あります。
- それに関係すると思われる状況に対する質問が1点あります。
よろしくお願いいたします。
<<環境・構成>>
OS:RedHat8
----web機--- --db01機----------
| WEBサーバ |----------->| クラスタサーバ1 |
| | | レプリケータ |
------------ ------------------
↓
--db02機---------
|クラスタサーバ2 |
| |
-----------------
- ロードバランサは使用していません。
- クラスタサーバ1とレプリケーションサーバは同マシンです。
- web機よりdb01機に接続します。
- DB接続はJDBCを用いています。
- DBのコネクションプーリングの仕組みはTorque(Jakarta Turbineフ
レームワークの一部)を用いています。
■復旧のうまくいかない状況(1)
- db02を-Rオプションにて正常に復旧後、webよりdb01に対して更新系の処
理を行うとすぐにdb02がerrorとなります。
【手順】
1. db02の停止。(% pg_ctl stop -m fast の後 % killall postmaster)
2. db02を復旧。(% pg_ctl start -o "-R")
3. webより更新処理を行う。
4. レプリケータのログにdb02の「error」が表示される。
【確認項目】
- db02の復旧前に、webからdb01(5432)へのTCP接続を切断すれば、問題
なく動作しました。
- webからdb01(5432)へのTCP接続を切断前後の違いは、以下です。db01
機において、netstatコマンドで調べました。
[前]レプリケータよりdb02(5432)へのTCP接続のCLOSE_WAITが複数。
[後]レプリケータよりdb02(5432)へのTCP接続のCLOSE_WAITが一つ。
【質問】
- webからdb01への接続を切ることなしに、db02を正常に復旧させたい
のですが、どう対処したらよいでしょうか?
■復旧のうまくいかない状況(2)
- db02の復旧中に、db01に対して更新もしくは参照がなされると、復旧作
業が途中で止まってしまう。
【手順】
1. db02の停止。(% pg_ctl stop -m fast の後 % killall postmaster)
2. db02を復旧。(% pg_ctl start -o "-R")
3. 2.の復旧中に、webより「select 1」を発行する。
4. db02の復旧作業が途中で止まってしまう。
【質問】
- 上記の状況は仕様でしょうか?
■上記の2点に関係すると思われる状況
- 更新系の処理(insert, update)が一度行われた後は、参照系の処理(sele
ct)もレプリケートされている現象を確認しました。
【確認項目】
- レプリケータをデバックモードで起動して出力されるログにて確認。
- 更新系の処理が行われる前は、参照系の処理はレプリケータのログに
出力されません。
- 更新系の処理が行われると、その後は、同じ参照系の処理もレプリケ
ータのログに出力されました。
- 更新系の処理は、トランザクションを発行しており、必ずcommitもし
くはrollbackしています。
- 参照系の処理は、トランザクションを発行していません。autocommit
モードはONにしています。
- DBへのコネクションはプーリングしています。毎回の接続/切断はして
いません。
【質問】
- 上記の状況は仕様でしょうか?
以上です。よろしくお願い致します。
---
From; Takegami, Takashi
E_mail; takegami@isp.co.jp