|
|
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サービスなど主にサントリーグループ向けの新技術開発に従事している。
|
|
|
|