[pgcluster: 761] PGCluster-1.3.0cのロードバランサーでクラスタサーバの障害を検知出来ない
Akihiro Manabe
pgcluster@ml.postgresql.jp
Wed, 16 Mar 2005 18:58:34 +0900
お世話になります。
真鍋です。
以前、バージョン1.0.8の件で質問させて頂いていましたが、
前回のバージョンアップで解決しました。
ありがとうございました。
今回、OIDのレプリケートが必要になってきたため、
PGCluster-1.3.0cを用いてテストを行っているのですが、
ロードバランサーでクラスタサーバの障害を検知出来ません。
原因または解決策をご存じの方はいらっしゃいませんか。
環境は以下の通りです。
■全体の構成及びマシン名
・ロードバランサー(lb2) 1台
・レプリケーションサーバ(replicate-tmp) 1台
・クラスタサーバ(real1〜3) 3台
(すべてPGCluster-1.3.0c)
■OS及びマシンスペック
・ロードバランサー
OS: Debian3.1-sarge
CPU: Pentium 3 668MHz
Memory: 256M
・レプリケーションサーバ
OS: Debian3.1-sarge
CPU: Pentium 3 1GHz
Memory: 256M
・クラスタサーバ(3台とも)
OS: Debian3.1-sarge(LVS使用のためkernel-2.4.22-1-ipvsに変更)
CPU: Pentium 4 3.2GHz
Memory: 1G
この環境で以下の手順でテストを行いました。
1. レプリケート、クラスタ3台、ロードバランサーの順で起動
2. pgcbenchを使って負荷分散の動作確認
コマンドは
'pgcbench -i -h lb2 -p 5432 testdb'
'pgcbench -c 100 -t 1000 -h lb2 -p 5432 testdb'
をreal3で実行
3. real2のpostgresqlをシャットダウン(pg_ctl stop)
4. 再度pgcbenchをreal3で実行(pgcbench -c 100 -t 1000 -h lb2 -p 5432 testdb')
5. real2をリカバリモードで起動(pg_ctl start -o '-R')
手順3でクラスタサーバを落としているのですが、
レプリケーションサーバのステータスログでは
クラスタサーバの障害が表示されましたが、
ロードバランサーのステータスログでは表示されませんでした。
次に手順4で再度pgcbenchを実行したところ、
ロードバランサーから落としたクラスタサーバにクエリが飛んでおり、
障害後の切り離しが出来ていないようです。
これはtcpdumpを用いて確認しています。
(tcpdump -i eth1 src host lb2 and dst port 5432)
最後に手順5でクラスタサーバを復帰させたところ、
レプリケーションサーバのステータスログ、
ロードバランサーのステータスログともに
クラスタサーバの復帰が表示されました。
以上の作業を行った際のログと設定ファイルは以下の通りです。
■pgreplicate.sts
Wed Mar 16 18:03:22 2005 port(5432) host:real1 start use
Wed Mar 16 18:03:22 2005 port(5432) host:real2 start use
Wed Mar 16 18:03:22 2005 port(5432) host:real3 start use
Wed Mar 16 18:03:22 2005 cascade(replicate-tmp) port(8001) start use
Wed Mar 16 18:05:58 2005 port(5432) host:real2 error
Wed Mar 16 18:07:31 2005 port(5432) host:real2 initialize
Wed Mar 16 18:07:31 2005 port(5432) host:real2 initialize
Wed Mar 16 18:07:32 2005 port(5432) host:real2 error
Wed Mar 16 18:07:44 2005 port(5432) host:real2 start use
Wed Mar 16 18:07:44 2005 port(5432) host:real2 start use
■pglb.sts
Wed Mar 16 18:03:07 2005 port(5432) host:real1 start use
Wed Mar 16 18:03:07 2005 port(5432) host:real2 start use
Wed Mar 16 18:03:07 2005 port(5432) host:real3 start use
Wed Mar 16 18:06:12 2005 port(5432) host:real1 start use
Wed Mar 16 18:06:12 2005 port(5432) host:real2 start use
■pglb.conf
<Cluster_Server_Info>
<Host_Name> real1 </Host_Name>
<Port> 5432 </Port>
<Max_Connect> 32 </Max_Connect>
</Cluster_Server_Info>
<Cluster_Server_Info>
<Host_Name> real2 </Host_Name>
<Port> 5432 </Port>
<Max_Connect> 32 </Max_Connect>
</Cluster_Server_Info>
<Cluster_Server_Info>
<Host_Name> real3 </Host_Name>
<Port> 5432 </Port>
<Max_Connect> 32 </Max_Connect>
</Cluster_Server_Info>
<Backend_Socket_Dir> /tmp </Backend_Socket_Dir>
<Receive_Port> 5432 </Receive_Port>
<Recovery_Port> 6101 </Recovery_Port>
<LifeCheck_Port> 6201 </LifeCheck_Port>
<Max_Cluster_Num> 128 </Max_Cluster_Num>
<Use_Connection_Pooling> no </Use_Connection_Pooling>
■pgreplicate.conf
<Cluster_Server_Info>
<Host_Name> real1 </Host_Name>
<Port> 5432 </Port>
<Recovery_Port> 7101 </Recovery_Port>
<LifeCheck_Port> 7201 </LifeCheck_Port>
</Cluster_Server_Info>
<Cluster_Server_Info>
<Host_Name> real2 </Host_Name>
<Port> 5432 </Port>
<Recovery_Port> 7101 </Recovery_Port>
<LifeCheck_Port> 7201 </LifeCheck_Port>
</Cluster_Server_Info>
<Cluster_Server_Info>
<Host_Name> real3 </Host_Name>
<Port> 5432 </Port>
<Recovery_Port> 7101 </Recovery_Port>
<LifeCheck_Port> 7201 </LifeCheck_Port>
</Cluster_Server_Info>
<LoadBalance_Server_Info>
<Host_Name> lb2 </Host_Name>
<Recovery_Port> 6101 </Recovery_Port>
<LifeCheck_Port> 6201 </LifeCheck_Port>
</LoadBalance_Server_Info>
<Status_Log_File> /tmp/pgreplicate.sts </Status_Log_File>
<Error_Log_File> /tmp/pgreplicate.log </Error_Log_File>
<Replication_Port> 8001 </Replication_Port>
<Recovery_Port> 8101 </Recovery_Port>
<LifeCheck_Port> 8201 </LifeCheck_Port>
<RLOG_Port> 8301 </RLOG_Port>
<Response_Mode> normal </Response_Mode>
<Use_Replication_Log> no </Use_Replication_Log>
<Reserved_Connections> 1 </Reserved_Connections>
■cluster.conf
<Replicate_Server_Info>
<Host_Name> replicate-tmp </Host_Name>
<Port> 8001 </Port>
<Recovery_Port> 8101 </Recovery_Port>
<LifeCheck_Port> 8201 </LifeCheck_Port>
</Replicate_Server_Info>
<Recovery_Port> 7101 </Recovery_Port>
<LifeCheck_Port> 7201 </LifeCheck_Port>
<Rsync_Path> /usr/bin/rsync </Rsync_Path>
<Rsync_Option> ssh -2 </Rsync_Option>
<When_Stand_Alone> read_only </When_Stand_Alone>
<Status_Log_File> /tmp/cluster.sts </Status_Log_File>
<Error_Log_File> /tmp/cluster.log </Error_Log_File>
--
Akihiro Manabe <spooky_mana@ybb.ne.jp>