|
|
Javaアプリケーションサーバのクラスタリング機能比較
|
第3回:JBossによるクラスタリングの実現
著者:サンモアテック 小林 俊哉 2005/11/7
|
|
|
前のページ 1 2 3 4 次のページ
|
|
クラスタセッティング
|
まずJBossのクラスタ機能が有効になるようセッティングし、動作確認を行いましょう。
JBossの設定には"minimal"、"default"、"all"の設定が用意されています。自分でカスタマイズすることもできますが、"all"にはJBossでクラスタリングを行うためのサービスがすべて用意されていますので、今回はこれをそのまま使います。
クラスタを構成するそれぞれのJBossを以下のコマンドで起動するだけで、クラスタリングの準備は整うことになります。
|
$ run.sh -c all
|
|
ただし以下の点に注意してください。
- クラスタを構成するJBossは同じバージョンであること
- クラスタリングするEJBなどのモジュールは同じであること
- マルチキャストを有効にすること
表2:クラスタリングの準備における注意点
マルチキャストを有効にする場合、Linuxであれば以下のコマンドを実行します。また、ファイアウォールの設定でマルチキャストパケットが遮断されていないかに注意してください。
|
# route add -net 224.0.0.0 netmask 240.0.0.0 dev eth0
|
|
正常にクラスタリングされていると、ノードの検出時に以下のようなログが出力されます。
正常な場合のログ出力
|
14:23:46,768 INFO [DefaultPartition] New cluster view for partition DefaultPartition (id: 1,delta: 1) : [172.18.2.8:1099, 172.18.2.7:1099]
14:23:46,772 INFO [DefaultPartition] I am (172.18.2.8:1099) received membershipChanged event:
14:23:46,773 INFO [DefaultPartition] Dead members: 0 ([])
14:23:46,773 INFO [DefaultPartition] New Members : 1 ([172.18.2.7:1099])
14:23:46,773 INFO [DefaultPartition] All Members : 2 ([172.18.2.8:1099, 172.18.2.7:1099])
14:23:53,542 INFO [TreeCache] viewAccepted(): new members: [smtla010:32865, 172.18.2.7:32907]
14:23:53,548 INFO [TreeCache] locking the tree to obtain transient state
14:23:53,553 INFO [TreeCache] returning the transient state (140 bytes)
|
|
HTTPセッションレプリケーション
|
それでは、クラスタでよく使われる機能であるWebアプリケーションのHTTPセッションレプリケーションを見ていきましょう。
JBossのWebコンテナにはTomcatが組み込まれていますので、設定手順はTomcatのクラスタリングと似たものになります。
|
Apache側の設定
|
まずTomcatと同様、ApacheからHTTPリクエストをクラスタノードへロードバランスさせるためにmod_jkモジュールを用います。Apache側の設定手順は以下のようになります。
- Apacheにmod_jkモジュールを組み込む
- "httpd.conf(mod-jk.conf)"と"workers.properties"ファイルでロードバランスの設定を行う
表3:Apache側の設定手順
表3の手順の詳細は第2回の「Apache側の設定」の項をご覧ください。
次に"mod-jk.conf"と"workers.properties"の例は以下のようになります。
"mod-jk.conf"の例
|
### mod-jk.confの例 ###
#mod_jkモジュールをロード
LoadModule jk_module modules/mod_jk.so
#workers.propertiesファイルを指定
JkWorkersFile conf/workers.properties
#ログファイル
JkLogFile logs/mod_jk.log
JkLogLevel error
#URLマッピング
JkMount ⁄* loadbalancer
|
|
"workers.properties"の例
|
#ワーカーリストの定義
worker.list=loadbalancer # ← mod-jk.confのURLマッピングと合わせる
# Load-balancingワーカー
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=jboss1,jboss2
worker.loadbalancer.sticky_session=1
#jboss1ワーカー
worker.jboss1.port=8009
worker.jboss1.host=jboss1
worker.jboss1.type=ajp13
worker.jboss1.lbfactor=1
#jboss2ワーカー
worker.jboss2.port=8009
worker.jboss2.host=jboss2
worker.jboss2.type=ajp13
worker.jboss2.lbfactor=1
|
|
JBoss側の設定
|
JBoss側では設定ファイルの場所が異なってきます。
Tomcatの"conf/server.xml"は、JBossの場合だと"JBossインストールディレクトリ/server/all/deploy/jbossweb-tomcat55.sar/server.xml"にあたります。
Tomcatでは"server.xml"の「Cluster」要素を有効にする必要がありましたが、JBossでは"all"に設定して起動した時点で、すでにクラスタが有効になっているため、"server.xml"に「Cluster」要素は必要ありません。つまりJBossはTomcatに実装されたクラスタ機能を使わず「JBoss独自の方法でHTTPセッションレプリケーションを実現できる」ということになります。
一方、mod_jkがスティッキーセッション時にロードバランス先を判別するためのIDであるjvmRouteの設定をする必要があります。"server.xml"の「Engine」要素に、"workers.properties"のワーカー名に対応する名前をつけてください。
1台目の"server.xml"
|
<Engine name="jboss.web" defaultHost="localhost jvmRoute="jboss1">
|
|
2台目の"server.xml"
|
<Engine name="jboss.web" defaultHost="localhost jvmRoute="jboss2">
|
|
また"JBossインストールディレクトリ/server/all/deploy/ jbossweb-tomcat55.sar/META-INF/jboss-service.xml"にはTomcatをJBossの1サービスとして定義する「MBean"jboss.web:service=WebServer"」が記述されていますが、ここの属性"UseJK"を"true"に設定する必要があります。
|
<mbean code="org.jboss.web.tomcat.tc5.Tomcat5"
name="jboss.web:service=WebServer" xmbean-dd="META-INF/webserver-xmbean.xml">
(省略)
<attribute name="UseJK">true</attribute>
(省略)
</mbean>
|
|
次はJBossにデプロイするWebアプリケーションです。HTTPセッションのレプリケーションを有効にするには、"web.xml"で「distributable」要素を宣言すればOKです。
"web.xml"の設定
|
<web-app>
(省略)
<distributable/>
<servlet>
<servlet-name>TestServlet</servlet-name>
<servlet-class>test.TestServlet</servlet-class>
</servlet>
(省略)
</web-app>
|
|
以上で準備が整いました。
作成したWebアプリケーションを各クラスタノードの"deploy"ディレクトリにデプロイしてもよいのですが、JBossにもTomcatと同様ファーミング機能があり、片方のクラスタノードの"farm"ディレクトリにWebアプリケーションをコピーするだけでクラスタの全ノードにホットデプロイが行われます。
このWebアプリケーションに対して、Apacheを介してアクセスすることでロードバランス(スティッキーセッションが有効なため、同一セッション中は同じサーバにアクセスします)が実現されます。
またサーバがダウンした場合、別ノードにフェイルオーバーされますが、HTTPセッションレプリケーションが働いているため、セッション継続中にサーバがダウンしたとしても、セッション情報が新しいサーバでも活用でき、ユーザからはサーバのダウンを意識することなくセッションを継続できることになります。
|
前のページ 1 2 3 4 次のページ
|
|
|
|
著者プロフィール
株式会社サンモアテック 小林 俊哉
株式会社サンモアテック 技術開発事業部
2001年入社。NOMAD(4GL言語)開発にはじまり、Webサービス、グリッドなどの新技術検証、またJBossやTomcatを含むオープンソース製品のサポートに従事。
|
|
|
|