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

Yoshiaki Kawazu kawaz-pgcluster=ml.postgresql.jp @ 7cho-me.com
2005年 8月 14日 (日) 07:05:58 JST


河津です。

pglb は pgreplicate からクラスタサーバの生死を伝えられて、
ステータスが error か start use かを知り、
pglb に設定されている全てのクラスタサーバのステータスが
error になると、pgreplicate から新たに start use の通知が
来るまでの間、Sorry, backend connection is full という
エラーになり、データベースに接続が出来なくなるという動作
をすると理解しています。

現在、pgcluster-1.1.1a を使っており、
クラスタサーバを停止するなどの試験を行っています。
試験の際、クラスタサーバを全て停止し pglb に設定されてい
る全てのクラスタサーバを error ステータスにします。
次にクラスタサーバを順に起動していくのですが、pglb に
start use の通知が来ないで、クラスタサーバは正常に
動作しているにもかかわらず、pglb は error と思ったまま
Sorry, backend connection is full というエラーを返し続
けるという状況が偶に発生します。
error ステータスを覚えてしまっているだけなので pglb を
再起動すれば接続は出来るようになります。

何が原因で通知が行われないのかは分かっていないのですが、
そもそも pglb が error ステータスを解除する為には通知を
待つしかないのであれば問題だと思います。
クライアントからの接続要求があったら error ステータスに
なっていたとしても接続を試してみては駄目なのでしょうか?
数パケットの手間で生存確認をすることなど、接続できない
ことに比べれば何でも無いコストだと思います。

また、クラスタサーバの一部が停止したにも関わらず何らかの
理由で pglb に通知が来ず、停止したサーバに接続しようとし
てエラーになり、そのままクライアントに対して接続エラーを
返してしまうのも問題だと思います。
なぜ他のクラスタサーバを全て試してから接続エラーを返すよ
うになっていないのでしょうか?
(さいわい、一度エラーになれば次からは生きているクラスタ
サーバに接続しに行くようですが…、初めの1回はエラーになって
しまいます。)

可用性を考えれば pglb が接続要求の度に各クラスタサーバへの
接続を順番に試し、問題なければ生存ステータスにし、問題があ
ればエラーステータスにし、更にエラーステータスになっている
クラスタサーバに対しても pglb が時々生存チェックをしていつ
でも生存ステータスに戻せるようにする、という仕様で十分かと
思っています。
何故わざわざ通知を必要とする仕様になっているのでしょうか?

読みにくい文章になってしまっており、申し訳ありません。
上記の中で、もし僕が根本的に間違って理解しているような点が
あればご指摘頂ければ幸いです。

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

-----
KaWaZ <kawaz @ kawaz.jp>
http://www.kawaz.jp



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