Cluster オブジェクト

目次

はじめに

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

Tomcat クラスタ実装は非常に拡張性が高く、そのため数多くのオプションが用意されており、設定が複雑に見えるかもしれません。しかし、落胆することなく、何が起こっているかを非常に細かく制御できることを理解してください。

セキュリティ

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

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:
チャネルとそのサブコンポーネントはすべてクラスタグループのIO層の一部であり、我々が「Tribes」とニックネームを付けた独自のモジュールです。
ネットワーク層、メッセージング、およびメンバーシップロジックの構成とチューニングはすべて、チャネルとそのネストされたコンポーネントで行われます。Apache Tribes については、いつでも詳細を確認できます。

Valve:
Tomcat クラスタ実装は、リクエストがサーブレットコンテナに出入りするタイミングを追跡するために Tomcat バルブ を使用します。これらのバルブを使用して、データをレプリケートするタイミング(常にリクエストの終了時)についてインテリジェントな決定を行うことができます。

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

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 です。