[pgcluster: 434] クラスタDBダウン時のロードバランサの動作について
YOSHIDA Toshikazu
yoshida.toshikazu @ nttcom.co.jp
2004年 8月 3日 (火) 16:44:04 JST
三谷様
お世話になっております。
吉田と申します。
PGClusterで、クラスタDBの切り離しを行っていました。
プライマリDBを「-m immediate」でシャットダウンしてから
2ユーザからpsqlでSQL文を発行したところ、
ロードバランサが障害を検知できず、停止しているプライマリDBへ
トランザクションを渡し、「Sorry, too many clients already」
というエラーが返ってくる事象がおきました。
そのとき、レプリケーションサーバの.stsファイルには
「error」と書かれていたのですが、
ロードバランサの.stsファイルには書かれておりませんでした。
更新履歴を拝見すると既に1.0.6aで修正されている問題だと
思いましたが、ソースを見てみると、
pgcluster-1.0.7/src/pgcluster/pglb/child.c:330で
バックエンドとのコネクションを開始できない場合、
即エラー処理になっているように見えました。
この箇所で、1台目のDBとコネクションできなかった場合、
再度クラスタTBLをスキャンして、新たな接続先のクラスタDBを設定する
分岐条件を加えてみると動作してくれるのかなと思いました。
#コネクションプーリングを使用しない場合
間違えていましたら申し訳ございません。
ちなみに、コネクションプーリングを有効にしても
上記のエラーが発生しました。
サーバの構成は以下の通りです。
・ロードバランサ1台
・クラスタDB2台
・レプリケーションサーバ1台
・テスト用マシン2台
・OS:RedHatEL AS3.0
・PGCluster1.0.7を使用
・全て同一セグメント上のLANに配置
コンフィグファイルは以下の通りです。
=============== LB:pglb.conf ===============
<Cluster_Server_Info>
<Host_Name> dl1401 </Host_Name>
<Port> 5432 </Port>
<Max_Connect> 20 </Max_Connect>
</Cluster_Server_Info>
<Cluster_Server_Info>
<Host_Name> dl1402 </Host_Name>
<Port> 5432 </Port>
<Max_Connect> 20 </Max_Connect>
</Cluster_Server_Info>
<Backend_Socket_Dir> /tmp </Backend_Socket_Dir>
<Receive_Port> 5432 </Receive_Port>
<Recovery_Port> 7780 </Recovery_Port>
<Max_Cluster_Num> 5 </Max_Cluster_Num>
<Use_Connection_Pooling> no </Use_Connection_Pooling>
=============== DB1,DB2:cluster.conf ===============
<Replicate_Server_Info>
<Host_Name> gx240 </Host_Name>
<Port> 8777 </Port>
<Recovery_Port> 7778 </Recovery_Port>
</Replicate_Server_Info>
<Recovery_Port> 7779 </Recovery_Port>
<Rsync_Path> /usr/bin/rsync </Rsync_Path>
<Rsync_Option> ssh -1 </Rsync_Option>
<When_Stand_Alone> read_only </When_Stand_Alone>
=============== DB1,DB2:postgresql.conf ===============
max_connections = 5
port = 5432
=========== Replication:pgreplicate.conf ============
<Cluster_Server_Info>
<Host_Name> dl1401 </Host_Name>
<Port> 5432 </Port>
<Recovery_Port> 7779 </Recovery_Port>
</Cluster_Server_Info>
<Cluster_Server_Info>
<Host_Name> dl1402 </Host_Name>
<Port> 5432 </Port>
<Recovery_Port> 7779 </Recovery_Port>
</Cluster_Server_Info>
<LoadBalance_Server_Info>
<Host_Name> gx150 </Host_Name>
<Recovery_Port> 7780 </Recovery_Port>
</LoadBalance_Server_Info>
<Replication_Port> 8777 </Replication_Port>
<Recovery_Port> 7778 </Recovery_Port>
よろしくお願い致します。
------------------------------------------------------
NTTコムウェア株式会社
吉田敏和 (よしだとしかず)
mailto:yoshida.toshikazu @ nttcom.co.jp
------------------------------------------------------
pgcluster メーリングリストの案内