Tomcatクラスタの実装では、以下の機能が提供されます。
クラスタ構成はかなり複雑ですが、既定の構成はほとんどの人にとってすぐに使用できます。
Tomcat Clusterの実装は非常に拡張性が高く、多くのオプションが公開されているため設定は多くのように見えますが、
信用性を失うことはなく、各ノードにおけるTomcatサーバーで何が起きているかを明確にコントロールしています。
(筆者追記)クラスタの構成や意味に関しては、「サーバー基本技術-クラスタとロードバランサー」を一読下さい。
クラスタ実装は、クラスタに関連するすべてのネットワークトラフィックに安全で信頼できるネットワークが使用されることを前提として作成されています。
安全で信頼できないネットワーク上でクラスタを実行することは安全ではありません。
Tomcatクラスタで使用するための安全で信頼できるネットワークを提供するための多くのオプションがあります。
Cluster要素は、Engine要素またはHost要素のいずれかに配置できます。
エンジンに配置することは、Tomcatのすべての仮想ホストでクラスタリングをサポートし、メッセージングコンポーネントを共有することを意味します。
Engine要素内にCluster要素を配置すると、クラスタは各セッションマネージャのホスト名をマネージャ名に追加し、同じ名前の2つのコンテキストが2つの異なるホストに入るように区別します。
コンテキスト属性レプリケーションを構成するには、アプリケーションコンテキストで使用されているコンテキスト実装をスワップアウトするだけです。
$CATALINA_BASE/conf/エンジン名/ホスト名/コンテキスト名.xml
<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 Clusterの実装では、Tomcat Valveを使用して、要求がいつサーブレットコンテナに入り、終了するかを追跡します。
これらのバルブを使用して、いつデータの複製をいつ行うのかを常に意思決定することができます。
Deployer:
DeployerコンポーネントはTomcat Farm Deployerです。これにより、クラスタ全体でアプリケーションをデプロイし、アンデプロイできます。
ClusterListener:
ClusterListenerは、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 = 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_RX_SEQ |を使用します。 Channel.SND_TX_SEQは3に等しいです。 |
heartbeatBackgroundEnabled | false | コンテナのバックグラウンドスレッドでチャネルのハートビートを呼び出すかどうかを示すフラグ。 このフラグを有効にすると、チャネルハートビートスレッドを無効にすることを忘れないでください。 |
notifyLifecycleListenerOnFailure | false | すべてのClusterListenerがチャネルメッセージを受け入れることができなかった場合、LifecycleListenersに通知するかどうかを示すフラグ。 |