[pgcluster: 800] Re: pglb の仕様が疑問があります

Yoshiaki Kawazu kawaz-pgcluster=ml.postgresql.jp @ 7cho-me.com
2005年 8月 16日 (火) 17:16:44 JST


河津です。


>>pglb は pgreplicate からクラスタサーバの生死を伝えられて、
>>ステータスが error か start use かを知り、
> 
> pglbがクラスタDBの異常を検知するのはレプリケーションサーバからの通知ではなく、自分で接続に行って検知します。

異常の検知は pglb が行っているということですね。


>>何が原因で通知が行われないのかは分かっていないのですが、
>>そもそも pglb が error ステータスを解除する為には通知を
>>待つしかないのであれば問題だと思います。
> 
> これは、クラスタDB間のデータ同期が取れたことを確認した後でないと、クライアントからの接続を許可していないからです。
> もしクラスタDBをリカバリーモードなしで後から起動した場合、データが他のクラスタDBと異なっていることが多いと思います。もし、そのままpglbがクライアントからの接続を許可してしまった場合、クラスタDB間でデータの不整合が発生します。
> ですので、データ不整合の状態を防止するために、一度エラーになったクラスタDBはレプリケーションサーバから(データの同期が取れたよ、という)通知を貰うまで、外部からのアクセスを許可しないようになっているのです。
> お分かり頂けましたでしょうか。

データの同期完了の通知は pgreplicate が行っているということですね。
pglb が通知によってのみ error を解除するのはデータの同期待ちの為、
ということはわかりました。


しかし、全てのクラスタDBを停止した後の再起動は、pglbやレプリケーション
サーバを含め、全てを再起動する理由が分かりません。

システムの起動方法は、
1. レプリケーションサーバの起動
2. クラスタDBの起動
3. pglbの起動
の順で起動するとあります。

クラスタDBを全て停止した場合もレプリケーションサーバはすでに起動してお
り、1までは終わっている状態と同じと考え、2.クラスタDBの起動 から行えば
よいと思うのですが、何故レプリケーションサーバも再起動する必要があるの
でしょうか?

また、pglb は全てのクラスタDBが停止していることは検知しており、レプリ
ケーションサーバもその情報は知っているはずです。
ここからクラスタDBを1つ起動した場合、レプリケーションサーバは pglb に
対して1つのクラスタDBの起動通知(同期完了通知ではありませんが)をしてく
れれば、pglb は接続要求を受けられる状態になる為、pglb の再起動も必要
なくなると思います。
それでも pglb の再起動が必要な理由はあるのでしょうか?


以上です。
宜しくお願いいたします。


-----
KaWaZ <



pgcluster メーリングリストの案内