ClusterManager オブジェクト

目次

はじめに

クラスタマネージャは、Tomcatのセッションマネージャインターフェースであるorg.apache.catalina.Managerの拡張です。クラスタマネージャは、org.apache.catalina.ha.ClusterManagerを実装する必要があり、セッションの複製方法を単独で担います。
現在、2種類のマネージャがあります。org.apache.catalina.ha.session.DeltaManagerは、セッションデータの差分をクラスタ内のすべてのメンバーに複製します。この実装は実績があり、非常にうまく機能しますが、クラスタメンバーが同種である必要があるという制限があります。つまり、すべてのノードが同じアプリケーションをデプロイし、完全に複製されている必要があります。org.apache.catalina.ha.session.BackupManagerも差分を複製しますが、1つのバックアップノードのみに複製します。バックアップノードの場所は、クラスタ内のすべてのノードに認識されています。また、異種デプロイメントもサポートしているため、マネージャはWebアプリケーションがどの場所にデプロイされているかを知っています。

<Manager>

<Cluster>要素内で定義された<Manager>要素は、web.xmlファイルで<distributable/>とマークされているすべてのWebアプリケーションに対して定義されたテンプレートです。ただし、context.xmlファイルまたはserver.xmlファイルのいずれかで、<Context>要素内に<Manager>を配置することにより、Webアプリケーションごとにマネージャ実装をオーバーライドできます。

属性

共通属性

属性説明
className
name このクラスタマネージャの名前。この名前は、ノード上のセッションマネージャを識別するために使用されます。コンテナ内で一意になるように、Cluster要素によって名前が変更される場合があります。
notifyListenersOnReplicationクラスタ内のTomcatノード間でセッション属性が複製または削除されたときにセッションリスナーに通知する場合は、trueに設定します。
processExpiresFrequency

セッションの有効期限と関連するマネージャ操作の頻度。マネージャ操作は、指定された回数のbackgroundProcess呼び出しに対して1回実行されます(つまり、数値が小さいほど、チェックが頻繁に実行されます)。最小値は1、デフォルト値は6です。

secureRandomClass

セッションIDの生成に使用するjava.security.SecureRandomを拡張するJavaクラスの名前。指定しない場合、デフォルト値はjava.security.SecureRandomです。

secureRandomProvider

セッションIDを生成するjava.security.SecureRandomインスタンスの作成に使用するプロバイダーの名前。無効なアルゴリズムまたはプロバイダーが指定された場合、マネージャはプラットフォームのデフォルトプロバイダーとデフォルトアルゴリズムを使用します。指定しない場合、プラットフォームのデフォルトプロバイダーが使用されます。

secureRandomAlgorithm

セッションIDを生成する`java.security.SecureRandom`インスタンスの作成に使用するアルゴリズムの名前。無効なアルゴリズムまたはプロバイダーが指定された場合、マネージャはプラットフォームのデフォルトプロバイダーとデフォルトアルゴリズムを使用します。指定しない場合、デフォルトアルゴリズムのSHA1PRNGが使用されます。デフォルトアルゴリズムがサポートされていない場合は、プラットフォームのデフォルトが使用されます。プラットフォームのデフォルトを使用するように指定するには、secureRandomProvider属性を設定せずに、この属性を空の文字列に設定します。

recordAllActions

セッションのすべてのアクションをTomcatクラスタノード間で送信するかどうかを示すフラグ。falseに設定されている場合、同じ属性に対して既に何かが行われている場合は、Tomcatクラスタノード間で複数のアクションを送信しないようにします。その場合は、最後に追加されたアクションのみを送信します。デフォルトは`false`です。

org.apache.catalina.ha.session.DeltaManager 属性

属性説明
expireSessionsOnShutdownWebアプリケーションがシャットダウンされると、Tomcatは各セッションに有効期限切れの呼び出しを発行して、すべてのリスナーに通知します。1つのノードでシャットダウンが発生したときに、すべてのノードですべてのセッションが期限切れになるようにするには、この値を`true`に設定します。デフォルト値は`false`です。
maxActiveSessionsこのマネージャによって作成されるアクティブセッションの最大数。制限なしの場合は-1(デフォルト)。このマネージャの場合、現在のノードがセッションのプライマリノードであるかどうかに関係なく、すべてのセッションがアクティブセッションとしてカウントされます。
notifySessionListenersOnReplicationクラスタ内のTomcatノード間でセッションが作成および期限切れになったときにセッションリスナーに通知する場合は、`true`に設定します。
notifyContainerListenersOnReplicationクラスタ内のTomcatノード間でコンテナリスナーに通知する場合は、`true`に設定します。
stateTransferTimeoutノードの起動時に、別のノードからのセッション状態の転送が完了するのを待つ時間(秒単位)。デフォルト値は`60`秒です。
sendAllSessionsセッションを分割ブロックとして送信するかどうかを示すフラグ。`true`に設定すると、すべてのセッションが1つの大きなブロックとして送信されます。`false`に設定すると、セッションは分割ブロックとして送信されます。デフォルト値は`true`です。
sendAllSessionsSizeセッションブロックメッセージ内のセッションの数。この値は、`sendAllSessions`が`false`の場合にのみ有効です。デフォルトは`1000`です。
sendAllSessionsWaitTimeセッションブロックメッセージの送信間の待ち時間。この値は、`sendAllSessions`が`false`の場合にのみ有効です。デフォルトは`2000`ミリ秒です。
sessionAttributeNameFilter

複製されるセッション属性をフィルタリングするために使用される正規表現。属性は、その名前がこのパターンに一致する場合にのみ複製されます。パターンが長さゼロまたは`null`の場合、すべての属性が複製対象となります。パターンは固定されているため、セッション属性名はパターンと完全に一致する必要があります。たとえば、値`(userName|sessionHistory)`は、`userName`と`sessionHistory`という名前の2つのセッション属性のみを複製します。指定しない場合、デフォルト値の`null`が使用されます。

sessionAttributeValueClassNameFilter

複製されるセッション属性をフィルタリングするために使用される正規表現。属性は、値の実装クラス名がこのパターンに一致する場合にのみ複製されます。パターンが長さゼロまたは`null`の場合、すべての属性が複製対象となります。パターンは固定されているため、完全修飾クラス名はパターンと完全に一致する必要があります。指定しない場合、`SecurityManager`が有効になっていない限り、デフォルト値の`null`が使用されます。`SecurityManager`が有効になっている場合は、デフォルトは`java\\.lang\\.(?:Boolean|Integer|Long|Number|String)`になります。

stateTimestampDropこのノードが別のノードに`GET_ALL_SESSIONS`メッセージを送信すると、応答として受信されたすべてのセッションメッセージがキューに入れられます。この属性が`true`に設定されている場合、受信したセッションメッセージ(他のノードによって送信された`GET_ALL_SESSIONS`を除く)は、タイムスタンプによってフィルタリングされます。メッセージが`GET_ALL_SESSIONS`メッセージではなく、そのタイムスタンプが`GET_ALL_SESSIONS`メッセージのタイムスタンプよりも前の場合、メッセージは破棄されます。`false`に設定すると、キューに入れられたすべてのセッションメッセージが処理されます。デフォルトは`true`です。
warnOnSessionAttributeFilterFailure

**sessionAttributeNameFilter**または**sessionAttributeValueClassNameFilter**が属性をブロックする場合、これを`WARN`レベルでログに記録する必要がありますか? `WARN`レベルのロギングが無効になっている場合は、`DEBUG`に記録されます。この属性のデフォルト値は、`SecurityManager`が有効になっていない限り`false`です。`SecurityManager`が有効になっている場合は、デフォルトは`true`になります。

org.apache.catalina.ha.session.BackupManager 属性

属性説明
mapSendOptionsバックアップマネージャは複製されたマップを使用し、このマップはメッセージを送受信します。このマップがメッセージを送信する方法のフラグを設定できます。デフォルト値は`6`(同期)です。非同期メッセージングを使用する場合、セッションの更新メッセージが、送信された順序とは異なる順序で受信ノードによって処理される可能性があることに注意してください。
非同期メッセージングを使用する場合、セッションの更新メッセージが、送信された順序とは異なる順序で受信ノードによって処理される可能性があることに注意してください。
maxActiveSessionsこのマネージャによって作成されるアクティブセッションの最大数。制限なしの場合は-1(デフォルト)。このマネージャの場合、現在のノードがセッションのプライマリノードであるセッションのみがアクティブセッションと見なされます。
rpcTimeoutブロードキャストおよび別のマップからの状態転送に使用されるRPCメッセージのタイムアウト。デフォルト値は`15000`ミリ秒です。
sessionAttributeNameFilter

複製されるセッション属性をフィルタリングするために使用される正規表現。属性は、その名前がこのパターンに一致する場合にのみ複製されます。パターンが長さゼロまたは`null`の場合、すべての属性が複製対象となります。パターンは固定されているため、セッション属性名はパターンと完全に一致する必要があります。たとえば、値`(userName|sessionHistory)`は、`userName`と`sessionHistory`という名前の2つのセッション属性のみを複製します。指定しない場合、デフォルト値の`null`が使用されます。

sessionAttributeValueClassNameFilter

複製されるセッション属性をフィルタリングするために使用される正規表現。属性は、値の実装クラス名がこのパターンに一致する場合にのみ複製されます。パターンが長さゼロまたは`null`の場合、すべての属性が複製対象となります。パターンは固定されているため、完全修飾クラス名はパターンと完全に一致する必要があります。指定しない場合、`SecurityManager`が有効になっていない限り、デフォルト値の`null`が使用されます。`SecurityManager`が有効になっている場合は、デフォルトは`java\\.lang\\.(?:Boolean|Integer|Long|Number|String)`になります。

terminateOnStartFailure複製マップの起動に失敗したときに複製マップを終了する場合は、trueに設定します。複製マップが終了すると、関連付けられたコンテキストは起動に失敗します。この属性をfalseに設定すると、複製マップは終了しません。ハートビートでマップメンバーシップへの参加を試みます。デフォルト値は`false`です。
warnOnSessionAttributeFilterFailure

**sessionAttributeNameFilter**または**sessionAttributeValueClassNameFilter**が属性をブロックする場合、これを`WARN`レベルでログに記録する必要がありますか? `WARN`レベルのロギングが無効になっている場合は、`DEBUG`に記録されます。この属性のデフォルト値は、`SecurityManager`が有効になっていない限り`false`です。`SecurityManager`が有効になっている場合は、デフォルトは`true`になります。

accessTimeoutpingメッセージのタイムアウト。リモートマップがこのタイムアウト期間内に応答しない場合、そのマップは消失したと見なされます。デフォルト値は`5000`ミリ秒です。

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

すべてのマネージャ実装

すべてのマネージャ実装では、**<SessionIdGenerator>**要素のネストが可能です。セッションID生成の動作を定義します。SessionIdGeneratorのすべての実装では、次の属性を使用できます。

属性説明
sessionIdLength

セッションIDの長さは、**sessionIdLength**属性で変更できます。