クラスタリングの設定方法

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


Tomcat本体の設定

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

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

コメントアウトをはずす部分


         managerClassName="org.apache.catalina.cluster.session.DeltaManager"
         expireSessionsOnShutdown="false"
         useDirtyFlag="true">

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

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

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

    
           filter=".*\.gif;.*\.js;.*\.jpg;.*\.htm;.*\.html;.*\.txt;"/>

    
              tempDir="/tmp/war-temp/"
              deployDir="/tmp/war-deploy/"
              watchDir="/tmp/war-listen/"
              watchEnabled="false"/>

今回はどちらのTomcatでも"mcastAddr"と"mcastPort"はこのままの同じ値とします。また、同じセッションIDの処理を同じサーバで処理させるようにするスティッキーセッションを有効にするためのTomcat側の設定も行います。

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

1台目の"server.xml"



2台目の"server.xml"



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.confApacheのメインの設定ファイル$APACHE/conf変更
mod-jk.confmod_jkを設定するためのファイル$APACHE/conf作成
workers.propertiesTomcatワーカーを設定するためのファイル$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

人気記事トップ10

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

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30