はじめに
今回と次回にわたってオープンソースでJ2EEに対応したアプリケーションサーバであるJBossのクラスタリングについて解説します。JBoss のバージョン4はSunのJ2EE認定も受けており、機能面では商用のJ2EE対応のアプリケーションサーバにも引けを取らないといえます。
JBossについての詳しい説明は割愛しますが、今回解説するクラスタリング(クラスタはJ2EEの仕様では規定されていませんが)についても、本番運用を見据えた高可用性を実現するに足る様々な機能を実装しています。
今回は最新バージョン(2005年11月現在)であるJBoss 4.0.3SP1にフォーカスを当てて解説しますが、基本的には3.2.xでも同様の機能とアーキテクチャを持っています。
第3回となる今回はJBossが持つクラスタ機能の概要とクラスタの基本セッティングおよびその動作確認、そしてHTTPセッションレプリケーショ ンについて解説します。次回の第4回ではEJB/JMS/JNDIといったそのほかの要素のクラスタリング、そして使用にあたっての注意点を解説します。
JBossのインストール
クラスタリングの解説の前にJBossのインストールについて説明します。
インストールの方法は非常にシンプルです。まず以下のURLからJBoss 4.0.3SP1をダウンロードしてください。zipでもtar.gzでもアーカイブの内容は同じです。
http://www.jboss.com/products/jbossas/downloads
※該当ページ現在閉鎖
続いてアーカイブを展開します。
Linuxでの例
$ tar zxf jboss-4.0.3SP1.tar.gz ![]()
最後に環境変数を設定します。JAVA_HOMEにはJBossを実行するJDKのインストールディレクトリを、JBOSS_HOMEにはJBossのインストールディレクトリを指定します。
Linuxでの例
$ export JAVA_HOME=/usr/j2sdk
$ export JBOSS_HOME=/usr/local/jboss-4.0.3SP1
以上です。とても簡単ですね。後はrun.sh(Windows環境ならrun.bat)を実行すればJBossが起動します。
JBossのクラスタリング概要
JBossのクラスタリングは以下のような特徴を持ちます。
- クラスタノードの自動検出
- フェイルオーバーおよびロードバランシング
- JNDI
- RMI
- Entity Bean
- Stateless Session Bean
- Stateful Session Bean(ステートのレプリケーションを含む)
- HTTPセッションのレプリケーション
- 動的なJNDI検索、JNDI treeのレプリケーション
- ファーミング(デプロイの共有)
- RMIロードバランシングポリシーのプラグイン
まず"JBossインストールディレクトリ/server/all/deploy/
cluster-service.xml"を見てください。
name="jboss:service=${jboss.partition.name:DefaultPartition}">
${jboss.partition.name:DefaultPartition}
(省略)
ip_ttl="8" ip_mcast="true"
mcast_send_buf_size="800000" mcast_recv_buf_size="150000"
ucast_send_buf_size="800000" ucast_recv_buf_size="150000"
loopback="false"/>
up_thread="true" down_thread="true"/>
timeout="2500" max_tries="5"/>
up_thread="true" down_thread="true"/>
max_xmit_size="8192"
up_thread="true" down_thread="true"/>
down_thread="true"/>
up_thread="true" down_thread="true"/>
down_thread="true" up_thread="true"/>
shun="true" print_local_addr="true"/>
(省略)
jboss:service=Naming
クラスタに関連したMBeanがいくつか定義されていますが、一番上の 「name="jboss:service=${jboss.partition.name:DefaultPartition}"」と名づけられた MBeanがパーティション、つまり1つのクラスタグループを表しています。
属性(「attribute」要素で表現されます)PartitionNameにより、各JBossは自分がどのパーティションに属するかを判別し ます。PartitionNameはシステム・プロパティ"jboss.partition.name"で指定可能で、デフォルト は"DefaultPartition"です。
JBossはクラスタリングの通信バックボーンには、JGroupsを採用しています。JGroupsはUDP、TCP、そのほかのプロトコルを組み合わせることにより、信頼性の高いマルチキャスト通信を実現します。前述したMBeanの属性"PartitionConfig"の中で、 JGroupsのプロトコルに関する細かい設定が可能です。
同じネットワーク内に複数のパーティションを設ける場合は、"PartitionName"を区別することで実現できます(加えてJGroupsで使用するマルチキャストのアドレス/ポートをパーティションごとに区別する必要があります)。

図1:複数のパーティションを設ける場合