Tomcatのクラスタ機能

Tomcatクラスタの実装では、以下の機能が提供されます。

  • セッションレプリケーション
  • コンテキスト属性のレプリケーション
  • 全体のWARファイルのデプロイメント

クラスタ構成はかなり複雑ですが、既定の構成はほとんどの人にとってすぐに使用できます。

Tomcat Clusterの実装は非常に拡張性が高く、多くのオプションが公開されているため設定は多くのように見えますが、
信用性を失うことはなく、各ノードにおけるTomcatサーバーで何が起きているかを明確にコントロールしています。

(筆者追記)クラスタの構成や意味に関しては、「サーバー基本技術-クラスタとロードバランサー」を一読下さい。

セキュリティ

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

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

  • private LAN
  • a Virtual Private Network (VPN)
  • IPSEC

エンジンとホストの配置

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

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

コンテキスト属性レプリケーションを構成するには、アプリケーションコンテキストで使用されているコンテキスト実装をスワップアウトするだけです。

$CATALINA_BASE/conf/エンジン名/ホスト名/コンテキスト名.xml
<Context className="org.apache.catalina.ha.context.ReplicatedContext"/>
					

このコンテキストはTomcat StandardContextを拡張し、基本実装のすべてのオプションが有効になるようにします。

Clusterタグ子要素

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

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

Valve:
Tomcat Clusterの実装では、Tomcat Valveを使用して、要求がいつサーブレットコンテナに入り、終了するかを追跡します。
これらのバルブを使用して、いつデータの複製をいつ行うのかを常に意思決定することができます。

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

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

Clusterタグ要素

SimpleTcpClusterの属性

属性 未指定時の
デフォルト値
説明
className ※1. メインクラスタークラス、現在は1つしか使用できません。※1.org.apache.catalina.ha.tcp.SimpleTcpCluster
channelSendOptions 8 TomcatのHAクラスタの送受信用モジュールであるApacheTribesパッケージにある
Channelクラスの送信オプション。デフォルトは8( Channel.SEND_OPTIONS_ASYNCHRONOUS )です。
このオプションは、SimpleTcpClusterによって送信されるすべてのメッセージが使用するフラグを設定するために使用されます。
フラグは、メッセージの送信方法を決定し、単純な論理和です。
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メッセージングを使用する場合、セッションの更新メッセージを受信ノードが送信された順序とは異なる順序で処理できることに注意してください。
channelStartOptions Channel.DEFAULT クラスタで使用されるオブジェクトの開始および終了フラグを設定します。
デフォルトは、送信者、受信者、マルチキャスト送信者、マルチキャスト受信者など、すべてのチャネルサービスを開始するChannel.DEFAULTです。
以下のフラグが利用可能です: Channel.DEFAULT = Channel.SND_RX_SEQ (1) |
Channel.SND_TX_SEQ (2) |
Channel.MBR_RX_SEQ (4) |
Channel.MBR_TX_SEQ (8);

マルチキャストなしでチャネルを開始するには、値Channel.SND_RX_SEQ |を使用します。 Channel.SND_TX_SEQは3に等しいです。
heartbeatBackgroundEnabled false コンテナのバックグラウンドスレッドでチャネルのハートビートを呼び出すかどうかを示すフラグ。
このフラグを有効にすると、チャネルハートビートスレッドを無効にすることを忘れないでください。
notifyLifecycleListenerOnFailure false すべてのClusterListenerがチャネルメッセージを受け入れることができなかった場合、LifecycleListenersに通知するかどうかを示すフラグ。