- PR -

JBOSSのクラスタリング設定について

1
投稿者投稿内容
matsumoto
会議室デビュー日: 2006/08/22
投稿数: 2
投稿日時: 2006-08-22 20:23
お世話になります。

JBossのクラスタリング設定について質問させて下さい。

2台のJBossアプリケーションサーバにてHTTPセッションのレプリケーション
を行おうとしております。

環境は以下になります。
JBoss:JBoss 4.0.3SP1
OS:Red Hat Linux replease9 Kernel 2.4.20-8smp
httpd:apatch2
コネクタ:jk2

今回、私が構築を行おうとしている環境は、負荷分散にDNSラウンドロビンを用いて
おります。2台のサーバにそれぞれApatch,JBossがインストールされています。


●質問内容
JBossのクラスタリングサービスにおいて、サーバ間に主従関係のようなもの
はあるのでしょうか?また、主従関係がある場合は、それぞれの役割の設定は
どの様におこなうのでしょうか?
文献から判断する限りにおいてですが、JBossのクラスタリング構成においては、
メイン、サブのような主従関係は存在しないように認識しておりますが、下記に
記しすような現象が発生しております。



●現象
2台のサーバをそれぞれA号機、B号機とした場合、A号機から起動した場合は、
B号機の起動時に、A号機のコンソールにB号機がクラスタリングメンバーとして
認識された旨が表示されます。また、B号機のコンソールには、A号機が認識され
た事が表示されます。

A号機ログ
-------------------------------------------------------------
[DefaultPartition] I am (192.168.0.10:1099) received membershipChanged event:
[DefaultPartition] Dead members: 0 ([])
[DefaultPartition] New Members : 1 ([192.168.0.11:1099])
[DefaultPartition] All Members : 2 ([192.168.0.10:1099, 192.168.0.11:1099])
[TreeCache] viewAccepted(): new members: [srv1:32849, srv2:33021]
-------------------------------------------------------------

B号機ログ
-------------------------------------------------------------
[TreeCache] viewAccepted(): new members: [srv1:32849, srv2:33021]
-------------------------------------------------------------



逆に起動する順番をB号機 -> A号機とした場合、ログより判断する限りA号機、
B号機双方がそれぞれ相手となるサーバを認識できておりません。

B号機ログ
-------------------------------------------------------------
[DefaultPartition] Number of cluster members: 1
[DefaultPartition] Other members: 0
[DefaultPartition] Fetching state (will wait for 30000 milliseconds):
[TreeCache] viewAccepted(): new members: [srv2:32843]
[TreeCache] new cache is null (maybe first member in cluster)
[TreeCache] state could not be retrieved (must be first member in group)
-------------------------------------------------------------

A号機ログ
-------------------------------------------------------------
[DefaultPartition] Number of cluster members: 1
[DefaultPartition] Other members: 0
[DefaultPartition] Fetching state (will wait for 30000 milliseconds):
[DefaultPartition] New cluster view for partition DefaultPartition (id: 0, delta: 0) : [192.168.0.10:1099]
[TreeCache] viewAccepted(): new members: [srv1:33014]
[TreeCache] state could not be retrieved (must be first member in group)
[TreeCache] new cache is null (maybe first member in cluster)
-------------------------------------------------------------


設定はデフォルトのまま一切変更せず、「run.sh -c all」にて順番に起動しております。

DNSラウンドロビンで負荷分散を行うため、DNS設定上、A号機、B号機に同じホスト名が登録されています。

A号機、B号機のhostsファイルには双方のマシン名をそれぞれ登録してあります。
A号機 -> srv1
B号機 -> srv2

このような問題が発生する原因としてどのような事が考えられるでしょうか?
ネットワークの設定の不備等も疑っておりますが、解決に至っておりません。

何かご存知の方がいらっしゃいましたら、調査するポイント等、ご指摘頂きたく、
宜しくお願い申し上げます。

[ メッセージ編集済み 編集者: matsumoto 編集日時 2006-08-22 20:26 ]
あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-08-23 00:28
今のところそういった現象は経験ないです。

引用:

matsumotoさんの書き込み (2006-08-22 20:23) より:
JBossのクラスタリングサービスにおいて、サーバ間に主従関係のようなもの
はあるのでしょうか?また、主従関係がある場合は、それぞれの役割の設定は
どの様におこなうのでしょうか?



基本的にはありません。JMSなどはHA Singletonになっているので
クラスタ中の1ノードでのみ稼働するようにはなっていますが。
ノードの選択基準もクラスタの先頭かどうか程度だったかと。

引用:

DNSラウンドロビンで負荷分散を行うため、DNS設定上、A号機、B号機に同じホスト名が登録されています。

A号機、B号機のhostsファイルには双方のマシン名をそれぞれ登録してあります。
A号機 -> srv1
B号機 -> srv2



各ノードのホスト名はどう設定されていますか?
Linuxの場合はhostnameコマンドが返すホスト名です。

JBossはデフォルトで自身のホスト名を名前解決してIPアドレスとして
使っているような動きをする(厳密に調査したわけではないです)ので、
ホスト名が両ノードとも同じな場合は怪しい動きになりそうな気がします。

引用:

A号機、B号機のhostsファイルには双方のマシン名をそれぞれ登録してあります。
A号機 -> srv1
B号機 -> srv2



こういった設定をしているということは、クラスタのノード間通信にも
DNSラウンドロビンされるアドレスを使っているということでしょうか?
この辺りもトラブルの原因になりそうな気がします。

NICがもうひとつあるなら、

1. クラスタのノード間通信専用のプライベートネットワークを作る
2. 各ノードのホスト名にはプライベート側の一意な名前を設定する

というようなネットワーク構成で試してみるとわかりやすいかと。
WAN側とノード間通信は別ネットワークにするのが一般的だと思いますし。

DNS上の名前は外部からの名前解決専用と考えていいんじゃないでしょうか。
matsumoto
会議室デビュー日: 2006/08/22
投稿数: 2
投稿日時: 2006-08-23 11:13
あしゅさん、アドバイスありがとうございます。

引用:

各ノードのホスト名はどう設定されていますか?
Linuxの場合はhostnameコマンドが返すホスト名です。



Linuxのhostnameコマンドの結果ですが、
A号機 -> srv1
B号機 -> srv2
となります。

DNS設定上のA号機、B号機の名前は「srv3」としています。

A号機よりpingを実行した結果
ping srv1 -> 192.168.0.10(A号機のIPアドレス)
ping srv2 -> 192.168.0.11(B号機のIPアドレス)
ping srv3 -> 192.168.0.10と192.168.0.11が交互に帰ってくる

B号機よりpingを実行した結果
ping srv1 -> 192.168.0.10(A号機のIPアドレス)
ping srv2 -> 192.168.0.11(B号機のIPアドレス)
ping srv3 -> 192.168.0.10と192.168.0.11が交互に帰ってくる


引用:

こういった設定をしているということは、クラスタのノード間通信にも
DNSラウンドロビンされるアドレスを使っているということでしょうか?
この辺りもトラブルの原因になりそうな気がします。

NICがもうひとつあるなら、

1. クラスタのノード間通信専用のプライベートネットワークを作る
2. 各ノードのホスト名にはプライベート側の一意な名前を設定する

というようなネットワーク構成で試してみるとわかりやすいかと。
WAN側とノード間通信は別ネットワークにするのが一般的だと思いますし。


ご指摘いただいた内容をふまえ、ネットワーク構成を中心に再設定、再調査をします。
片方向のみ通信が可能となっている点が非常に気になっております。

ありがとうございました。
進展がありましたら、再度メッセージをポストさせて頂きます。
1

スキルアップ/キャリアアップ(JOB@IT)