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

第1回:Tomcatによるクラスタリングの実現
著者:サンモアテック  津田 新吾   2005/10/25
前のページ  1  2  3  4
Membership

   メンバーシップとはクラスタを構成するTomcatインスタンスの集合のことです。メンバーシップサービスを行う実装クラスとして"org.apache.catalina.cluster.mcast.McastService"があります。

   "McastService"はIPマルチキャストを利用することによって、各インスタンス間の生死確認(ハートビート)および"Receiver"が利用するIPアドレス/ポート情報の公開を実現します。同じマルチキャストIP/ポートを利用するTomcatインスタンス群が1つの「クラスタグループ=メンバーシップ」と認識されます。一定期間マルチキャストのメッセージがなかったTomcatインスタンスはダウンしたとみなされます。


Sender

   レプリケーションサービスにおいて、セッションをレプリケーションする方法を定義します。実装クラスとして"org.apache.catalina.cluster.tcp.ReplicationTransmitter"があります。方法は"pooled"、"synchronous"、"asynchronous"の3種類があります。

asynchronous
レプリケーションは非同期に実行されるため、レプリケーションを行う前にレスポンスをクライアントに返します。このためレスポンスは速くなりますが、次のアクセスの際にレプリケーションが終了しているという保証がありません。スティッキーセッションを用いる場合やリクエストの間隔が長い場合などに有効です。

synchronous
レプリケーションが終了するまでレスポンスはクライアントには返されません。単純確実である分レスポンスは遅くなります。

pooled
"synchronous"をベースにして、改良した設定です。"synchronous"ではHTTPリクエストを扱っていたのと同じひとつのスレッドがレプリケーションを行っていたのに対して、pooledでは複数のスレッドがレプリケーションを行うことでパフォーマンスを向上させます。レプリケーションが終了するまでレスポンスはクライアントには返されません。


Receiver

   レプリケーションサービスにおいて、セッション情報を受け取る設定を定義します。実装クラスは"org.apache.catalina.cluster.tcp.ReplicationListener"があります。

   "ReplicationTransmitter"とReplicationListener"はTCPソケットを用いてセッション情報のやり取りを行います。受け取り側ではTCPをリスンするアドレス/ポートをクラスタ内のサーバに公開する必要があります。

   レプリケーションリクエストを取り扱うスレッド数を示す属性の"tcpThreadCount"は、"SenderのreplicationMode"が"pooled"以外の場合は、クラスタ内のサーバ数に合わせればよいですが、"pooled"の場合にはさらに大きな数を設定するとパフォーマンスが向上する可能性があります。


Valve

   バルブはリクエストをインターセプトするTomcat特有のコンポーネントです。ここで使われる"org.apache.catalina.cluster.tcp.ReplicationValve"はリクエストをインターセプトし、セッションレプリケーションを行うべきかどうか判断します。filterで指定されたリクエストのセッションレプリケーションは不要と判断されます。通常HTMLやjpgといった静的コンテンツはレプリケーションの必要がありませんので、このバルブを用いてフィルタリングします。


Deployer

   デプロイヤはファーミングを実現するために用いられます。実装クラスとして"org.apache.catalina.cluster.deploy.FarmWarDeployer"があります。


ファーミング

   クラスタシステムを運用していく際の各サーバへのデプロイ作業を軽減するために、1つのサーバにアプリケーションをデプロイ/アンデプロイするだけでクラスタ内の全サーバにデプロイ/アンデプロイが反映される、という仕組みをファーミングと呼んでいます。

   先ほどのフェイルオーバーの項の図3で出てきた「Deployer」要素の属性である"watchEnabled"をtrueに設定すると、Tomcatは同じく「Deployer」要素の属性の"watchDir"に指定したディレクトリを監視し、新しくwarファイルが追加されたときにクラスタ内へのファーミングを実行します。

   ファーミングはその時に起動しているクラスタサーバに対してのみデプロイ/アンデプロイが実行されます。ダウンしていたサーバの再起動時などにデプロイの反映は行われないということには注意が必要です。


次回は

   さて次回はもう少しTomcatのクラスタアーキテクチャを見た後、実際のクラスタ設定を行っていきます。

前のページ  1  2  3  4


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


INDEX
第1回:Tomcatによるクラスタリングの実現
  はじめに
  Tomcatクラスタリングのアーキテクチャ
  フェイルオーバー
Membership