TOP比較データ> クラスタリングの設定方法
Javaアプリケーションサーバのクラスタリング機能比較
Javaアプリケーションサーバのクラスタリング機能比較

第2回:Tomcatのクラスタ設定
著者:サンモアテック  津田 新吾   2005/10/31
前のページ  1  2  3   4  次のページ
クラスタリングの設定方法

   ここからはTomcatをクラスタで動作させるための設定を行っていきます。2台のサーバを用意し、それぞれにTomcatがインストールされているとします。さらにApacheとmod_jkでロードバランスの設定が施されているもう1台のサーバもあるとします。なお以降の説明では、Tomcatのインストールされているディレクトリを「$CATALINA_HOME」とします。
Tomcat本体の設定

   それではTomcat本体の設定を行います。

   Tomcatには設定ファイルがいくつかありますが、ここで変更を加えるのは"server.xml"($CATALINA_HOME/conf/server.xml)のみです。まず"server.xml"の「Cluster」要素がコメントアウトされているのを有効にします。

コメントアウトをはずす部分
<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster"
         managerClassName="org.apache.catalina.cluster.session.DeltaManager"
         expireSessionsOnShutdown="false"
         useDirtyFlag="true">

    <Membership
        className="org.apache.catalina.cluster.mcast.McastService"
        mcastAddr="228.0.0.4"
        mcastPort="45564"
        mcastFrequency="500"
        mcastDropTime="3000"/>

    <Receiver
        className="org.apache.catalina.cluster.tcp.ReplicationListener"
        tcpListenAddress="auto"
        tcpListenPort="4001"
        tcpSelectorTimeout="100"
        tcpThreadCount="6"/>

    <Sender
        className="org.apache.catalina.cluster.tcp.ReplicationTransmitter"
        replicationMode="pooled"/>

    <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve"
           filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>

    <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer"
              tempDir="/tmp/war-temp/"
              deployDir="/tmp/war-deploy/"
              watchDir="/tmp/war-listen/"
              watchEnabled="false"/>
</Cluster>
   今回はどちらのTomcatでも"mcastAddr"と"mcastPort"はこのままの同じ値とします。また、同じセッションIDの処理を同じサーバで処理させるようにするスティッキーセッションを有効にするためのTomcat側の設定も行います。

   以下のように1台目のTomcatは「jvmRoute="tomcat1"」とし、2台目は「jvmRoute="tomcat2"」とします。

1台目の"server.xml"
<!-- Define the top level container in our container hierarchy -->
<Engine name="Catalina" defaultHost="localhost" debug="0" jvmRoute="tomcat1">
2台目の"server.xml"
<!-- Define the top level container in our container hierarchy -->
<Engine name="Catalina" defaultHost="localhost" debug="0" jvmRoute="tomcat2">
Apache側の設定

   ApacheではTomcatと連携させるためにmod_jkが必要となります。通常はTomcatサイトなどから入手して用いますが、以下では例としてLinuxで"mod_jk.so"をビルドする場合をあげます。

  1. tarコマンドでファイルの解凍(以下、解凍先を"$CONNECTOR_HOME"とします)
  2. カレントディレクトリを"$CONNECTOR_HOME/jk/native"に変更
  3. "./buildconf.sh"を実行
  4. "./configure --with-apxs=$APACHE_HOME/bin/apxs"を実行
  5. makeを実行すると、"$CONNECTOR_HOM/jk/native/apache-XX"(XXはApacheのバージョン)に"mod_jk.so"が作成される
  6. "mod_jk.so"を"modules"(Apache 1.3であればlibexec)ディレクトリにコピー

表2:Linuxでmod_jk.soをビルドする流れ

ファイルの解凍のコマンド
tar zxfv jakarta-tomcat-connectors-current-src.tar.gz
   mod_jkで連携する際に変更、作成が必要なファイルは表3のようになります。

設定ファイル 説明 場所 分類
httpd.conf Apacheのメインの設定ファイル $APACHE/conf 変更
mod-jk.conf mod_jkを設定するためのファイル $APACHE/conf 作成
workers.properties Tomcatワーカーを設定するためのファイル $APACHE/conf 作成

表3:mod_jkで連携する際に変更、作成が必要なファイル


mod-jk.confの設定

   以下に"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
   "mod-jk.conf"では、Apacheに"mod_jk.so"をロードするように指示します。また"workers.properties"ファイルを設定ファイルとして用いることやログファイルの指定を行います。

   「JKMount」でURLマッピングを行いますが、それは"workers.properties"のワーカーリストの定義である「worker.list」と合わせておいてください。なお、このファイルを作成せずに"httpd.conf"に含めてしまうことも可能ですが、ここでは別ファイルとして作成します。


workers.propertiesの設定

   次に"workers.properties"の設定例を示します。

"workers.properties"の設定例
#ワーカーリストの定義
worker.list=loadbalancer # ← mod-jk.conf のURLマッピングとあわせておくこと

# Load-balancingワーカー
worker.loadbalancer.type=lb
worker.loadbalancer.balanced_workers=tomcat1, tomcat2
worker.loadbalancer.sticky_session=1

#tomcat1ワーカー
worker.tomcat1.port=8009
worker.tomcat1.host=server1
worker.tomcat1.type=ajp13
worker.tomcat1.lbfactor=1

#tomcat2ワーカー
worker.tomcat2.port=8009
worker.tomcat2.host=server2
worker.tomcat2.type=ajp13
worker.tomcat2.lbfactor=1
   "workers.properties"では「どのサーバにロードバランスするか」の設定を記述します。ここではスティッキーセッションを有効にするために「worker.loadbalancer.sticky_session=1」としています。この「1」は「true」でもかまいません。

   また「worker.tomcat1.lbfactor=1」でロードバランスの割合の設定を行っています。"lbfactor"をほかのサーバの5倍の値で設定すると、ほかのサーバより5倍多くのリクエストを受け付けることになります。これはmod_jk2の時とは逆になりますので、mod_jk2を使ってこられた方はご注意ください。

   最後に、Apacheの設定ファイルである"httpd.conf"に下記の1行を書き加えてください。

Include conf/mod-jk.conf
前のページ  1  2  3   4  次のページ


株式会社サンモアテック 津田 新吾
著者プロフィール
株式会社サンモアテック  津田 新吾
技術開発事業部。
某電線メーカーでカーナビの経路案内・経路計算などの組込みソフトウェア開発を10年近く経験。その後現在の(株)サンモアテックに入社。以来、携帯Javaでの業務支援システムやオープンソースのエンタープライズ適用、Webサービスなど主にサントリーグループ向けの新技術開発に従事している。


INDEX
第2回:Tomcatのクラスタ設定
  Tomcatのセッションレプリケーション
  クラスタ動作シーケンス
クラスタリングの設定方法
  クラスタリング基本動作の確認