Javaアプリケーションサーバのクラスタリング機能比較 9

クラスタセッティング

クラスタセッティング

まず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"

2台目の"server.xml"

   また"JBossインストールディレクトリ/server/all/deploy/
jbossweb- tomcat55.sar/META-INF/jboss-service.xml"にはTomcatをJBossの1サービスとして定義する 「MBean"jboss.web:service=WebServer"」が記述されていますが、ここの属性"UseJK"を"true"に設定する必 要があります。
 

     name="jboss.web:service=WebServer" xmbean-dd="META-INF/webserver-xmbean.xml">

(省略)

     true

(省略)

次はJBossにデプロイするWebアプリケーションです。HTTPセッションのレプリケーションを有効にするには、"web.xml"で「distributable」要素を宣言すればOKです。

"web.xml"の設定



(省略)

     

     
          TestServlet
          test.TestServlet
     


(省略)

   

以上で準備が整いました。

作成したWebアプリケーションを各クラスタノードの"deploy"ディレクトリにデプロイしてもよいのですが、JBossにもTomcatと同 様ファーミング機能があり、片方のクラスタノードの"farm"ディレクトリにWebアプリケーションをコピーするだけでクラスタの全ノードにホットデプロイが行われます。

このWebアプリケーションに対して、Apacheを介してアクセスすることでロードバランス(スティッキーセッションが有効なため、同一セッション中は同じサーバにアクセスします)が実現されます。

またサーバがダウンした場合、別ノードにフェイルオーバーされますが、HTTPセッションレプリケーションが働いているため、セッション継続中にサーバがダウンしたとしても、セッション情報が新しいサーバでも活用でき、ユーザからはサーバのダウンを意識することなくセッションを継続できることにな ります。

この記事をシェアしてください

人気記事トップ10

人気記事ランキングをもっと見る