クラスタリングの設定方法
クラスタリングの設定方法
ここからは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"をビルドする場合をあげます。
- tarコマンドでファイルの解凍(以下、解凍先を"$CONNECTOR_HOME"とします)
- カレントディレクトリを"$CONNECTOR_HOME/jk/native"に変更
- "./buildconf.sh"を実行
- "./configure --with-apxs=$APACHE_HOME/bin/apxs"を実行
- makeを実行すると、"$CONNECTOR_HOM/jk/native/apache-XX"(XXはApacheのバージョン)に"mod_jk.so"が作成される
- "mod_jk.so"を"modules"(Apache 1.3であればlibexec)ディレクトリにコピー
ファイルの解凍のコマンド
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