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