Cluster オブジェクト

目次

はじめに

Tomcat クラスタ実装は、セッションレプリケーション、コンテキスト属性レプリケーション、およびクラスタ全体の WAR ファイルデプロイメントを提供します。Cluster 設定はかなり複雑ですが、デフォルト設定はほとんどの場合そのまま使用できます。

Tomcat Cluster 実装は非常に拡張性が高いため、無数のオプションが公開されており、設定が複雑に見えるかもしれませんが、心配しないでください。代わりに、何が起こっているかを非常に細かく制御できます。

セキュリティ

クラスタ実装は、すべてのクラスタ関連のネットワークトラフィックに安全で信頼できるネットワークが使用されるという前提で記述されています。安全でない、信頼できないネットワークでクラスタを実行することは安全ではありません。

Tomcat クラスタで使用するための安全で信頼できるネットワークを提供するための多くのオプションがあります。これらには以下が含まれます

  • プライベート LAN
  • 仮想プライベートネットワーク (VPN)
  • IPSEC

EncryptInterceptor は、機密性と整合性の保護を提供しますが、信頼できないネットワークで Tomcat クラスタを実行することに関連するすべてのリスク、特に DoS 攻撃から保護するわけではありません。

Engine と Host への配置

<Cluster> 要素は、<Engine> コンテナまたは <Host> コンテナのいずれかに配置できます。
Engine に配置すると、Tomcat のすべての仮想ホストでクラスタリングがサポートされ、メッセージングコンポーネントが共有されます。 <Cluster><Engine> 要素内に配置すると、クラスタは各セッションマネージャーのホスト名をマネージャー名に追加するため、同じ名前を持つが 2 つの異なるホスト内にある 2 つのコンテキストを区別できます。

コンテキスト属性のレプリケーション

コンテキスト属性レプリケーションを設定するには、アプリケーションコンテキストに使用されるコンテキスト実装を交換するだけです。

<Context className="org.apache.catalina.ha.context.ReplicatedContext"/>

このコンテキストは Tomcat StandardContext を拡張しているため、基本実装のすべてのオプションが有効です。

ネストされたコンポーネント

Manager:
セッションマネージャー要素は、このクラスタ実装で使用されるセッションマネージャーの種類を識別します。このマネージャー設定は、通常の <Context> 設定で使用するものと同じです。
デフォルト値は、SimpleTcpCluster 実装と緊密に結合されている org.apache.catalina.ha.session.DeltaManager です。 org.apache.catalina.ha.session.BackupManager のような他のマネージャーは、疎結合である可能性があり、データレプリケーションに SimpleTcpCluster に依存しません。

Channel:
Channel とそのサブコンポーネントはすべて、クラスタグループの IO レイヤーの一部であり、「Tribes」というニックネームが付けられた独自のモジュールです。
ネットワーク層、メッセージング、およびメンバーシップロジックの設定と調整は、チャネルとそのネストされたコンポーネントで行われます。 Apache Tribes について詳しく知ることができます

Valve:
Tomcat Cluster 実装は、Tomcat Valves を使用して、リクエストがサーブレットコンテナに出入りするタイミングを追跡します。これらのバルブを使用して、いつデータをレプリケートするかをインテリジェントに決定できます。これは常にリクエストの最後です。

Deployer:
Deployer コンポーネントは、Tomcat Farm Deployer です。アプリケーションをクラスタ全体にデプロイおよびアンデプロイできます。

ClusterListener:
ClusterListener は、SimpleTcpCluster を使用して送受信されたメッセージを追跡するために使用されます。メッセージを追跡する場合は、ここにリスナーを追加するか、チャネルオブジェクトにバルブを追加できます。

属性

SimpleTcpCluster 属性

属性説明
className

メインのクラスタクラス。現在、使用可能なのは org.apache.catalina.ha.tcp.SimpleTcpCluster のみです。

channelSendOptions

Tribes チャネル送信オプション。デフォルトは 8 です。
このオプションは、SimpleTcpCluster を介して送信されるすべてのメッセージが使用するフラグを設定するために使用されます。フラグはメッセージの送信方法を決定し、単純な論理 OR です。

int options = Channel.SEND_OPTIONS_ASYNCHRONOUS |
              Channel.SEND_OPTIONS_SYNCHRONIZED_ACK |
              Channel.SEND_OPTIONS_USE_ACK;

値の一部は次のとおりです
Channel.SEND_OPTIONS_SYNCHRONIZED_ACK = 0x0004
Channel.SEND_OPTIONS_ASYNCHRONOUS = 0x0008
Channel.SEND_OPTIONS_USE_ACK = 0x0002
そのため、ACK と ASYNC メッセージングを使用するには、フラグは 10 (8+2) になります。
ASYNC メッセージングを使用する場合、セッションの更新メッセージが送信された順序とは異なる順序で受信ノードによって処理される可能性があることに注意してください。

さまざまな channelSendOptions 値は、送信ノードのスループットと、送信ノードまたは受信ノードに障害が発生した場合のレプリケーションの信頼性との間のトレードオフを提供します。一般的なオプションをいくつか紹介します。「メッセージ」はノード間で送信される任意のメッセージである可能性がありますが、ここではセッション変更メッセージのみが考慮されます。

channelSendOptions="8" / channelSendOptions="async" 送信者に関する限り、メッセージは他のノードへの送信のために送信者のキューに配置されるとすぐに「送信」されます。メッセージは、一部またはすべての受信ノードに到達しない可能性があり、到達したノードで正常に処理されない可能性があります。このオプションは、送信側で最も高いスループットを提供しますが、信頼性は最も低くなります。これは、トリガーするリクエストがセッションレプリケーションの成功/失敗を認識せずに完了するためです。

channelSendOptions="2" / channelSendOptions="use_ack" 送信者は、すべての受信ノードがメッセージを受信したことを確認するまで、現在のリクエストの完了をブロックしますが、必ずしもそのメッセージを処理したわけではありません。このオプションは、メッセージを送信し、確認応答を受信する必要があるため、送信ノードのスループットが低下しますが、信頼性は非同期モデルよりも高くなります。

channelSendOptions="6" / channelSendOptions="sync,use_ack" 送信者は、すべての受信ノードがメッセージを受信および処理したことを確認応答するまで、現在のリクエストの完了をブロックします。このオプションは、(これら 3 つのうち)スループットは最も低くなりますが、信頼性は最も高くなります。

これらのオプションは、コンマ区切りの文字列(例:「async、multicast」)として設定することもできます。これは、Channel.SEND_OPTIONS_ASYNCHRONOUS | Channel.SEND_OPTIONS_MULTICAST に変換されます。
有効なオプション名は、「asynchronous」(エイリアス「async」)、「byte_message」(エイリアス「byte」)、「multicast」、「secure」、「synchronized_ack」(エイリアス「sync」)、「udp」、「use_ack」です。

channelStartOptions

クラスタで使用される <Channel> オブジェクトの開始および停止フラグを設定します。デフォルトは Channel.DEFAULT で、送信者、受信者、メンバーシップ送信者、メンバーシップ受信者など、すべてのチャネルサービスを開始します。現在、次のフラグを使用できます

Channel.DEFAULT = Channel.SND_RX_SEQ (1) |
                  Channel.SND_TX_SEQ (2) |
                  Channel.MBR_RX_SEQ (4) |
                  Channel.MBR_TX_SEQ (8);

静的メンバーシップサービス org.apache.catalina.tribes.membership.StaticMembershipService を使用する場合、この属性がデフォルト値を使用するように設定されていることを確認する必要があります。

heartbeatBackgroundEnabled

コンテナのバックグラウンドスレッドでチャネルハートビートを呼び出すかどうかを示すフラグ。デフォルト値は false です。このフラグを有効にする場合は、チャネルハートビートスレッドを無効にすることを忘れないでください。

notifyLifecycleListenerOnFailure

すべての ClusterListener がチャネルメッセージを受け入れることができなかった場合に LifecycleListeners に通知するかどうかを示すフラグ。デフォルト値は false です。