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

Membership

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のクラスタアーキテクチャを見た後、実際のクラスタ設定を行っていきます。

この記事をシェアしてください

人気記事トップ10

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