TOP設計・移行・活用> アプリケーションの設定
JBossクラスタ入門
JBossクラスタ入門

第4回:クラスタの構築(後編)
著者:日本ヒューレット・パッカード  水野 浩典、佐藤 修一
2005/10/6
前のページ  1  2  3
アプリケーションの設定

   JBossクラスタでアプリケーションを実行するには、アプリケーション側にもクラスタ用の設定が必要となります。
Webアプリケーション(*.war)

   Webアプリケーションをクラスタ対応にするには、web.xmlに<distributable>要素を追加するだけです。この設定によりWebコンテナでHTTPセッションレプリケーションが行われるようになります。

$ vi <webapp_root>/WEB-INF/web.xml
<web-app>
  <distributable/>
(省略)
</web-app>

EJB(ejb-jar)

   EJBをクラスタ対応にするには、EJBのjboss.xml配備記述子に要素を追加します。

$ vi <ejb-jar>/META-INF/jboss.xml
<jboss>
  <enterprise-beans>
    <session>
      <ejb-name>StatelessSession</ejb-name>
      <jndi-name>StatelessSession</jndi-name>
      <clustered>True</clustered>
    </session>
  </enterprise-beans>
</jboss>

   jboss.xml配備既述子では、EJBへのロードバランシングのルールを設定することができます。詳細は本連載の第3回の「EJBへのロードバランシング」の項を参照してください。

   以上の設定を行なうことで、EJBアプリケーションをJBossのクラスタ環境上で動作させることができます。


付録:JBossクラスタを1台のマシン上に構成にする場合の設定方法

   1台のマシン上に複数のノード(JBossサーバインスタンス)を起動させてJBossクラスタを構築することができます。手軽にJBossクラスタを試したいときなどに便利です。しかしJBossのインストール直後の状態で1台のマシンに複数のJBossサーバを起動させてしまうと、JBossサーバ間でポート番号が競合してしまい、サーバが正しく起動しません。そのため同一マシン上の2つ目以降のJBossサーバが使用するポートを変更する必要があります。

   ここでは、同一マシン上にクラスタノードとして2つのJBossサーバを起動させるための設定手順を紹介します。設定手順は以下の通りです。

  1. ノードの作成
  2. JBossサーバが使用するポート番号設定方法
  3. リモーティングサービスのポート番号変更
  4. workers.propertiesの変更

表1:設定手順


ノードの作成

   まず1台のマシン上に2つのJBossのサーバ設定を作成します。クラスタ機能が含まれる"all"サーバ設定をコピーして、node1とnode2というサーバ設定を作成します。

JBossサーバを複数起動させるホスト
$ cd /jboss/jboss-4.0.1RC1/server
$ cp -r all node1
$ cp -r all node2
JBossサーバが使用するポート番号設定方法

   1台のマシン上で複数のJBossサーバを同時に稼動させる場合には、バインディングサービスを利用して各サーバのポート番号を設定します。

   バインディングサービスとは、JBossサーバが使用するポート番号をServerNameという一意な名前でグルーピングすることで一元管理し、各サーバインスタンスに割り当てるサービスです。

   JBoss4.0.1RC1にはバインディングサービスの設定を記述したXML形式の設定ファイルのサンプルが用意されており、デフォルトではそのサンプル設定ファイルを使用しています。サンプルは次の場所にあります。

/jboss/jboss-4.0.1RC1/docs/examples/binding-manager/sample-bindings.xml

   サンプルの設定ファイルにはports-default、ports-01、ports-02という3組のServerNameが定義されていますので、サンプルの設定ファイルを使うと同一マシン上に同時に最大3つのJBossサーバを起動できるようになります。

   1つ目のサーバではports-defaultで定義されたポート番号が使用されることになっていますので、2つ目以降のサーバではports-default以外のServerNameを使用してください。

   バインディングサービスの登録や設定はjboss-service.xmlファイルで行います。バインディングサービスを有効にするには、この設定ファイル中の<mbean code="org.jboss.services.binding.ServiceBindingManager">要素のコメントアウトを外してServerNameを変更します。

JBossサーバを複数起動させるホスト
$ vi /jboss/jboss-4.0.1RC1/server/node2/conf/jboss-service.xml

--> # この行に"-->"を追加します
<mbean code="org.jboss.services.binding.ServiceBindingManager"
  name="jboss.system:service=ServiceBindingManager">
  <attribute name="ServerName">ports-01</attribute> # ServerNameを変更します
  <attribute name="StoreURL">../docs/examples/binding-manager/samplebindings.xml
  </attribute>
  <attribute name="StoreFactoryClassName">
    org.jboss.services.binding.XMLServicesStoreFactory
  </attribute>
</mbean>
# この行にあったコメントアウト"-->"を削除します

リモーティングサービスのポート番号変更

   JBoss4.0.1RC1では、バインディングサービスによるポート番号の変更のほかに、リモーティングサービスで使用されるポート番号を変更する必要があります。

   2つ目のJBossサーバ(設定)で次の作業を行います。

$ vi /jboss/jboss-4.0.1RC1/server/node2/deploy/remoting-service.xml

# 次の要素中のポート番号を18084に変更します
<attribute name="InvokerLocator">socket://${jboss.bind.address}:18084
</attribute>

# 次の要素中のポート番号を18085に変更します
<attribute name="InvokerLocator">async://${jboss.bind.address}:18085/
?compression=-1&tcp.nodelay=true
</attribute>

※注: この手順は将来のJBossのバージョンでは必要なくなる可能性があります。

workers.propertiesの変更

   Apache web serverとmod_jkモジュールを使って、Webコンテナへのロードバランシングを行う場合には、先ほど解説いたしました「workers.propertiesの設定」にあるように、workers.propertiesファイルに適切なTomcat側AJPコネクタへのポート番号を指定する必要があります(worker..portキーの値)。

   バインディングサービスのServerNameにサンプル設定ファイル中のports-01を設定すると、AJPコネクタのポート番号は8109になりますので、workers.propertiesファイルでは2番目のJBossサーバのAJPコネクタのポートとして8109を設定します。

   workers.propertiesを次のように変更します。

Apache web serverのホスト
# vi /etc/httpd/conf/workers.properties

<ここからworkers.propertiesの内容>
#Define tc1
worker.tc1.port=8009 # デフォルトの8009 のまま
worker.tc1.host=<ホスト名> # 2つのJBossサーバを起動させるマシンのホスト名
worker.tc1.type=ajp13
worker.tc1.lbfactor=1
worker.tc1.local_worker=1
worker.tc1.cachesize=10

# Define tc2
worker.tc2.port=8109 # 8109 に変更
worker.tc2.host=<ホスト名> # worker.tc1.hostの値と同じにする
worker.tc2.type=ajp13
worker.tc2.lbfactor=1
worker.tc2.local_worker=1
worker.tc2.cachesize=10

# Load-balancing behaviour
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tc1, tc2
worker.loadbalancer.sticky_session=1
worker.loadbalancer.local_worker_only=1
worker.list=loadbalancer
<ここまで>

前のページ  1  2  3


日本ヒューレット・パッカード株式会社 水野 浩典
著者プロフィール
日本ヒューレット・パッカード株式会社
水野 浩典

1991年、同社入社以来、エンタープライズ環境でHP-UXを使用しているお客様のサポートの仕事に従事。その後、IA-64(Itanium)とPA-RISCのダイナミックトランスレータの開発経験を経て、Java、J2EEベースのベンチマークや障害解析、コンサルティングを経験。現在は、オープンソースのコンサルティングやサポートを行っている。8bitのバイト列やアセンブラコードを見て、解析することを何よりの楽しみ(?)にしています。


日本ヒューレット・パッカード株式会社 佐藤 修一
著者プロフィール
日本ヒューレット・パッカード株式会社
佐藤 修一

2000年より自社J2EEサーバの開発/国際化/テストに従事。以来、商用/オープンソース問わずJ2EEベースのシステム構築、ベンチマーク等を担当。現在は主にオープンソースのJ2EEサーバである「JBoss AS」を含めた「JEMS製品」や、同じくオープンソースのRDBMS「MySQL」のコンサルティングやサポートを精力的に行いながら、毎日、ソースコードと戯れています。


INDEX
第4回:クラスタの構築(後編)
  はじめに
  Tomcat/JBossでのHTTPセッションレプリケーション設定
アプリケーションの設定