workers.properties 設定

はじめに

Tomcatワーカーは、Webサーバーに代わってサーブレットまたはその他のコンテンツを実行するために待機しているTomcatインスタンスです。たとえば、Apache HTTP ServerなどのWebサーバーが、その背後で動作するTomcatプロセス(ワーカー)にサーブレットリクエストを転送するように設定できます。

上記で説明したシナリオは非常に単純なものです。実際には、特定のWebサーバーに代わってサーブレットを提供するために、複数のTomcatワーカーを設定できます。このような設定の理由は次のとおりです。

  • 異なるコンテキストを異なるTomcatワーカーで提供することにより、すべての開発者が同じWebサーバーを共有するが、独自のTomcatワーカーを持つ開発環境を提供したい。
  • 異なる仮想ホストを異なるTomcatプロセスで提供することにより、異なる企業に属するサイト間の明確な分離を提供したい。
  • ロードバランシングを提供したい。つまり、それぞれ独自のマシン上に複数のTomcatワーカーを実行し、それらの間でリクエストを分散させたい。

複数のワーカーを持つ理由は他にもあるかもしれませんが、このリストで十分でしょう…

Tomcatワーカーは、workers.propertiesというプロパティファイルで定義され、このチュートリアルではその使用方法を説明します。

設定ファイルの基本

Tomcat Webサーバープラグインにワーカーを定義するには、プロパティファイルを使用します(workers.propertiesという名前のサンプルファイルはconf/ディレクトリにあります)。

フォーマット、コメント、空白

ファイル内の行はプロパティを定義します。一般的な形式は次のとおりです。

<名前>=<値>

ドットは、設定階層を表すために名前の一部として使用されます。

無効なディレクティブはWebサーバーの起動時にログに記録され、Webサーバーが正常に動作しなくなります。一部のディレクティブは非推奨になっています。まだ機能しますが、後継に置き換える必要があります。

一部のディレクティブは複数回使用できます。これは、以下の表で明示的に示されます。

プロパティ名または値の先頭と末尾の空白は無視されます。コメントは任意の行に配置でき、シャープ記号 '#' で始まります。シャープ記号の後の行の内容は無視されます。

ブール型プロパティは、値として0(false)と1(true)、またはoff(false)とon(true)、あるいはf(false)、n(false)、t(true)、y(true)で始まる文字列を使用して設定できます。値の大文字と小文字は区別されません。このドキュメントでは、falsetrueを使用します。

グローバルプロパティ

これらのディレクティブはグローバルスコープを持ちます。

ディレクティブデフォルト説明
worker.listajp13JKが使用するワーカー名のカンマ区切りのリスト。起動時に、Webサーバープラグインはworker.listプロパティに名前が表示されているワーカーをインスタンス化します。これらは、リクエストをマップできるワーカーでもあります。

このディレクティブは複数回使用できます。

worker.maintain60ワーカー接続プールのメンテナンス間隔(秒単位)。正の値に設定されている場合、JKはworker.listディレクティブに指定されているすべてのワーカーのすべての接続をスキャンし、接続のリサイクルが必要かどうかを確認します。

さらに、ロードバランサーはすべてworker.maintain秒ごとにグローバルメンテナンスを実行します。グローバルメンテナンス中は、ロードカウンタが減衰し、エラー状態のワーカーはrecover_timeについてチェックされます。

この機能はjk 1.2.13に追加されました。

ワーカープロパティ

各ワーカー設定ディレクティブは、ドットで区切られた3つの単語で構成されます。

worker.<ワーカー名>.<ディレクティブ>=<値>

最初の単語は常にworkerです。2番目の単語は、選択できるワーカー名です。ロードバランシングの場合、ワーカー名には追加の意味があります。ロードバランサーのハウツーを参照してください。

ワーカー名は、英数字[a-z][A-Z][0-9][_\-]のみを含めることができ、大文字と小文字が区別されます。

変数、環境変数

workers.propertiesファイルで変数を定義して使用できます。変数を定義するには、次の構文を使用します。

<変数名>=<値>

ドットは変数名で使用できますが、標準ディレクティブと競合する変数名を使用しないように注意する必要があります。したがって、変数名は「worker.」で始まることはできません。

変数を使用するには、プロパティ行の値側の任意の場所に「$(変数名)」を挿入できます。変数が使用される前に定義されていない場合、同じ名前の変数をプロセス環境で検索し、その値を使用します。

プロパティの継承

多くの場合、さまざまなワーカーで同じプロパティ値を使用したい場合があります。設定行の重複を減らし、ファイルの保守を容易にするために、プロパティをワーカー間、またはテンプレートから実際のワーカーに継承できます。

reference」ディレクティブを使用すると、階層的な方法でワーカー間またはワーカーテンプレート間で設定をコピーできます。ワーカーcastorworker.castor.reference=worker.polluxを設定した場合、castorに対して明示的に設定されているものを除き、polluxのすべてのプロパティを継承します。

ディレクティブの値は、参照されるワーカーの名前だけでなく、「worker.」を含む完全なプレフィックスであることに注意してください。

テンプレートワーカーを使用するには、実際のワーカーのように定義しますが、worker.listに追加したり、ロードバランサーのメンバーとして追加したりしません。このようなテンプレートワーカーには、必須ディレクティブを含める必要はありません。この方法は、ロードバランサーに多くのバランスの取れたワーカーがあり、それらのワーカーがプロパティの大部分を共有する場合に特に役立ちます。これらのプロパティをすべてテンプレートワーカー(たとえば、「worker.template1」プレフィックスを使用)に設定し、すべてのバランスの取れたワーカーでそれらの共通プロパティを参照するだけで済みます。

参照を使用して、階層的な方法で複数のホップにわたってプロパティを継承できます。参照のネストの最大深度は20です。参照ループを発生させないように注意してください!

この機能はjk 1.2.19に追加されました。

すべてのワーカーディレクティブのリスト

必須ディレクティブ

必須ディレクティブは、各ワーカーが必ず含む必要があるものです。これがないと、ワーカーは使用できなくなったり、誤動作したりします。これらのディレクティブは、次の表で太字でマークされます。

ディレクティブデフォルト説明
typeajp13ワーカーの種類(ajp12ajp13ajp14jnilbstatusのいずれか)。ワーカーの種類によって、ワーカーに適用できるディレクティブが決まります。

ajp13タイプは、WebサーバーとTomcat間の通信にJKが使用する推奨されるワーカータイプです。このタイプのワーカーは、ソケットを通信チャネルとして使用します。ajp13プロトコルスタックの詳細な説明については、AJPv13プロトコル仕様を参照してください。lbタイプはロードバランシングワーカーに使用され、statusタイプはステータスワーカーに使用されます。

ajp14タイプは実験的で推奨されておらず、ajp12タイプは廃止されています。

JNIワーカーはサポートされなくなっており、動作しない可能性があります。使用しないでください。

接続ディレクティブ

接続ディレクティブは、JKとリモートTomcat間の永続接続の接続プールを接続および維持するために必要なパラメータを定義します。

ディレクティブデフォルト説明
hostlocalhostバックエンドTomcatインスタンスのホスト名またはIPアドレス。リモートTomcatはAJP13プロトコルスタックをサポートする必要があります。ホスト名には、コロン(':')で区切られたポート番号を含めることができます。
port8009定義されたプロトコルリクエストをリッスンしているリモートTomcatインスタンスのポート番号。デフォルト値はワーカーの種類によって異なります。ajp13ワーカーの場合、デフォルトポートは8009で、ajp14ワーカーの場合は8011です。
source-接続ソース(送信アドレス)として使用される名前またはIPアドレス。マルチホストホストでのみ使用してください。

この機能は実験的で、jk 1.2.41に追加されました。

socket_timeout0JKとリモートホスト間の通信チャネルに使用されるソケットタイムアウト(秒単位)。リモートホストが指定されたタイムアウト内で応答しない場合、JKはエラーを生成し、再試行します。0(デフォルト)に設定されている場合、JKはすべてのソケット操作で無期限に待ちます。
socket_connect_timeoutsocket_timeout*1000JKとリモートホスト間の通信チャネルに使用されるソケット接続タイムアウト(ミリ秒単位)。リモートホストが指定されたタイムアウト内で応答しない場合、JKはエラーを生成し、再試行します。

socket_timeoutは秒単位、socket_connect_timeoutはミリ秒単位であることに注意してください。そのため、絶対的な意味では、デフォルトのsocket_connect_timeoutsocket_timeoutと同じです。

この機能はjk 1.2.27に追加されました。

socket_keepalivefalseこのディレクティブは、WebサーバーとTomcatエンジン間にファイアウォールがあり、非アクティブな接続を切断しようとする場合に使用してください。このフラグは、オペレーティングシステムに非アクティブな接続でKEEP_ALIVEメッセージを送信するよう指示し(間隔はグローバルなOS設定、一般的には120分によって異なります)、ファイアウォールが非アクティブな接続を切断するのを防ぎます。キープアライブを有効にするには、このプロパティ値をtrueに設定します。

ファイアウォールが非アクティブな接続を切断するという問題点の1つは、WebサーバーとTomcatのいずれにも切断に関する情報がないため、それを処理できないことです。

ping_mode-このフラグは、確立された接続が機能していることを確認するために、どのような条件下でプローブされるかを決定します。プローブは空のAJP13パケット(CPing)で行われ、あるタイムアウト内で適切な応答(CPong)を受け取ることを期待します。

フラグの値は、次のフラグの任意の組み合わせにすることができます(複数の値は区切り文字なしで組み合わせられます)。

C (接続): 設定されている場合、バックエンドへの接続後に一度接続がプローブされます。タイムアウトはconnect_timeoutで設定できます。設定されていない場合、ping_timeoutの値が代わりに使用されます。

P (事前事後): 設定されている場合、バックエンドへの各リクエスト送信前に接続がプローブされます。タイムアウトはprepost_timeoutで設定できます。設定されていない場合、ping_timeoutの値が代わりに使用されます。

I (間隔): 設定されている場合、通常の内部メンテナンスサイクル中に接続がプローブされますが、connection_ping_intervalより長くアイドル状態の場合のみです。タイムアウトはping_timeoutで設定できます。

A 設定されている場合、上記のすべてのプローブが使用されます。

この機能はjk 1.2.27で追加されました。接続と事前事後プローブは、バージョンjk 1.2.6からconnect_timeoutprepost_timeoutを介して既に利用可能でした。

ping_timeout10000CPing接続プローブのCPong応答を待機する際のタイムアウト(ミリ秒単位)。プローブの有効化はping_modeを介して行われます。ping_modeの接続と事前事後プローブのタイムアウトは、connect_timeoutprepost_timeoutを介して個別に上書きできます。

互換性の理由から、connect_timeoutまたはprepost_timeoutが設定されている場合、ping_modeが空であってもCPing/CPongも使用されます。

この機能はjk 1.2.27に追加されました。

connection_ping_interval0 / (ping_timeout/1000)*10間隔接続プローブを使用する場合、この間隔(秒)より長くアイドル状態の接続は、CPingパケットによって動作しているかどうかがプローブされます。

間隔プローブは、ping_modeで有効化するか、connection_ping_intervalを0より大きい値に設定することで有効化できます。ping_modeを介して間隔プローブを有効にする場合、connection_ping_intervalのデフォルト値は(ping_timeout/1000) * 10になります。ping_timeoutはミリ秒単位、connection_ping_intervalは秒単位であることに注意してください。したがって、絶対的な意味では、デフォルトのconnection_ping_intervalping_timeoutの10倍です。

この機能はjk 1.2.27に追加されました。

connection_pool_size本文参照これは、接続プールとして維持されるAJPバックエンドへの接続数を定義します。各Webサーバー子プロセスが作成できるこれらの接続数を制限します。

接続プールサイズプロパティは、Apache HTTP ServerやMicrosoft IISなどのマルチスレッドWebサーバーでのみ使用されます。connection_pool_sizeプロパティは、1つのWebサーバープロセスがバックエンドに並行して送信できるリクエスト数を反映する必要があります。通常、これはWebサーバープロセスあたりのスレッド数と同じです。JKはApache HTTP Serverの場合、この数を自動的に検出し、プールサイズをこの値に設定します。IISの場合、デフォルト値は250です(1.2.20以前のバージョンでは10)。

IISの場合、この値を1つのWebサーバープロセスがバックエンドに並行して送信できるリクエスト数に調整することを強くお勧めします。パフォーマンスの問題が発生しないピーク時のアクティビティに必要な接続数を測定し、成長率に応じてパーセンテージを追加する必要があります。最後に、Webサーバープロセスが、プールサイズとして設定したものと同じかそれ以上のスレッドを使用できるかどうかを確認する必要があります。

prefork MPMを使用したApache 2.xまたはApache 1.3.xでは、1より大きい値でconnection_pool_sizeを使用しないでください!
connection_pool_minsize(pool+1)/2維持される接続プールの最小サイズ。

そのデフォルト値は(connection_pool_size+1)/2です。

prefork MPMを使用したApache 2.xまたはApache 1.3.xでは、1より大きい値でconnection_pool_minsizeを使用しないでください!

この機能はjk 1.2.16で追加されました。

connection_pool_timeout0キャッシュタイムアウトプロパティは、connection_pool_minsizeと共に使用して、非アクティブなソケットを閉じる前にJKがキャッシュに保持する秒数を指定します。このプロパティは、Tomcat Webサーバーのスレッド数を削減するために使用します。デフォルト値0は、クローズを無効にします(タイムアウトなし)。

各子プロセスは、Tomcatにリクエストを転送する必要がある場合、ajp13接続を開き、Tomcat側で新しいajp13スレッドを作成できます。

問題は、ajp13接続が作成された後、子プロセスはキルされるまでそれをドロップしないことです。Webサーバーは、子プロセス/スレッドが静的コンテンツのみを処理する場合でも、高負荷を処理するために子プロセス/スレッドを実行し続けるため、Tomcat側に多くの未使用のajp13スレッドが残る可能性があります。

この時間間隔は、Tomcatのserver.xmlのAJPコネクタのkeepAliveTimeout属性(明示的に設定されている場合)またはconnectionTimeout属性と同期させる必要があります。ただし、mod_jkの値は秒単位で、server.xmlの値はミリ秒単位であることに注意してください。

connection_acquire_timeoutretries*retry_intervalワーカーが、あきらめる前にキャッシュ内の空きソケットを待機するタイムアウト。

そのデフォルト値はretries * retry_intervalです。

この機能はjk 1.2.27に追加されました。

lbfactor1ロードバランサーのメンバーワーカーの場合のみ使用されます。

整数値lbfactor(ロードバランシングファクター)は、このワーカーがどれくらい作業すると予想されるか、またはワーカーの作業割り当てです。ロードバランシングファクターは、ロードバランサーを構成する他のワーカーと比較されます。たとえば、あるワーカーのlbfactorが他のワーカーの5倍高い場合、そのワーカーは5倍多くのリクエストを受け取ります。

ロードバランシングディレクティブ

ロードバランサーは、Tomcatワーカーと実際に通信しない仮想ワーカーです。代わりに、複数の「実」ワーカーの管理を担当します。ワーカーのタイプがlbの場合、そのワーカーはロードバランサーであると見なされます。ワーカーのtypeディレクティブを参照してください。

ロードバランサーディレクティブは、リモートバックエンドTomcatサーバーのクラスタに接続するワーカーを作成するために必要なパラメーターを定義します。各クラスタノードには、定義されたワーカーが必要です。

ロードバランサーの管理には以下が含まれます。

  • Webサーバーでワーカーをインスタンス化します。
  • ワーカーのロードバランシングファクターを使用して、重み付けラウンドロビンロードバランシングを実行します。lbfactorが高いほど、より強力なマシン(より多くのリクエストを処理する)になります。
  • 同じセッションに属するリクエストを同じTomcatワーカーで実行します。
  • 失敗したTomcatワーカーを特定し、それらへのリクエストを中断し、代わりにlbワーカーによって管理される他のワーカーにフェイルオーバーします。

全体的な結果は、同じlbワーカーによって管理されるワーカーがロードバランスされ(lbfactorと現在のユーザーセッションに基づいて)、フェイルオーバーもされるため、単一のTomcatプロセスの死によってサイト全体が「停止」することはありません。

セッションスティッキネスを使用する場合は、Tomcatのserver.xmlのEngine要素で異なるjvmRoute属性を設定する必要があります。さらに、バランサーによって管理されるワーカーの名前は、接続先のTomcatインスタンスのjvmRouteと等しくする必要があります。

ワーカーのroute属性を使用する場合、ワーカー名の制限を解除できます。

次の表は、lbワーカーが受け入れることができるプロパティを指定しています。

ディレクティブデフォルト説明
balance_workers-ロードバランサーが管理する必要があるワーカーのカンマ区切りリスト。

このディレクティブは、同じロードバランサーに対して複数回使用できます。

このディレクティブは古いbalanced_workersディレクティブに置き換えられ、mod_jkバージョン1.2.7以降でのみ使用できます。

これらのワーカーをロードバランサーワーカーを介してのみ使用する必要がある限り、それらをworker.listプロパティにも入れる必要はありません。
sticky_sessiontrueSESSION IDを持つリクエストを同じTomcatワーカーにルーティングするかどうかを指定します。sticky_sessionがtrueに設定されている場合、セッションはスティッキーになります。それ以外の場合は、sticky_sessionはfalseに設定されます。Tomcatが複数のTomcatインスタンス間でセッションデータを永続化できるセッションマネージャーを使用している場合は、sticky_sessionをfalseに設定します。

sticky_session設定は、Apache HTTP Server環境変数JK_STICKY_IGNOREsticky_ignoreのワーカーマップ拡張を使用して上書きできます。これはバージョン1.2.33で追加されました。

sticky_session_forcefalseエラー状態のワーカーのSESSION IDを持つリクエストを拒否するかどうかを指定します。sticky_session_forcetrueに設定されていて、そのSESSION IDと一致するワーカーがエラー状態の場合、クライアントは500(サーバーエラー)を受け取ります。falseに設定されている場合、クライアントセッションを失って他のワーカーにフェイルオーバーが行われます。このディレクティブは、sticky_session=trueに設定した場合にのみ使用されます。

この機能はjk 1.2.9で追加されました。

methodRequest最適なワーカーを選択するためにロードバランサーが使用するメソッドを指定します。セッションスティッキネスと完全なロードバランシングは、特にセッション数が少ない場合やセッションの使用量が非常に変化する場合には、相反する目標であることに注意してください。セッション数が非常に多い場合は、通常は問題になりません。

一部のメソッドは、スライド時間ウィンドウに集計されることに注意してください。アクセス数を合計し、グローバルな維持メソッドの実行ごとに、ロードカウンタが2で除算されます。通常、これはworker.maintainの設定に応じて1分ごとに行われます。ロードカウンタの値は、ステータスワーカーを使用して検査できます。

methodがR[equest]に設定されている場合、バランサーはリクエスト数を使用して最適なワーカーを検索します。アクセスは、スライド時間ウィンドウ内のlbfactorに従って分散されます。これはデフォルト値であり、ほとんどのアプリケーションで正常に動作するはずです。

methodがS[ession]に設定されている場合、バランサーはセッション数を使用して最適なワーカーを検索します。アクセスは、スライド時間ウィンドウ内のlbfactorに従って分散されます。このメソッドは、セッションが制限リソースである場合、たとえば、メモリが限られていてセッションに多くのメモリが必要な場合に使用します。バランサーは状態を保持しないため、実際にはセッション数を認識していません。代わりに、セッションクッキーやURLエンコーディングのない各リクエストを新しいセッションとしてカウントします。このメソッドは、セッションが無効になったときも認識せず、セッションタイムアウトやワーカーフェイルオーバーに従ってロード数を修正することもありません。セッションIDなしで呼び出されるが、新しいセッションとしてカウントする必要のないリクエストURLを知っている場合は、それらをstatelessマッピングルール拡張に追加するか、Apache HTTP Server環境変数JK_STATELESSを設定する必要があります。

methodがN[ext]に設定されている場合、バランサーは再びセッション数を使用して最適なワーカーを検索します。Sessionメソッドに関するすべてのコメントも適用されます。Sessionメソッドとの違いは、スライド時間ウィンドウでセッション数がどのように処理されるかです。Nextメソッドは2で除算するのではなく、現在の最小数を減算します。これにより、ラウンドロビンセッションバランシングが効果的に行われるため、Nextという名前が付けられています。高負荷下では、2つのセッションバランシングメソッドは同様の分散になりますが、少ない数のセッションを分散する必要がある場合はNextの方が優れています。

T[raffic]に設定されている場合、バランサーはJKとTomcat間のネットワークトラフィックを使用して最適なワーカーを検索します。アクセスは、スライド時間ウィンドウ内のlbfactorに従って分散されます。このメソッドは、バックエンドとのネットワークが制限リソースである場合に使用します。

B[usyness]に設定されている場合、バランサーは、ワーカーが現在処理しているリクエスト数に基づいて、現在の負荷が最も低いワーカーを選択します。この数はワーカーのlbfactorで除算され、最も低い値(最も負荷が少ない)のワーカーが選択されます。このメソッドは、ダウンロードアプリケーションのようにリクエストの処理に時間がかかる場合に特に役立ちます。このメソッドは、高負荷下では一部のハードウェアアーキテクチャでビジーカウンタが間違った値になる可能性があるため、一般的な用途には推奨されません。

この機能はバージョン1.2.9で追加されました。Sessionメソッドはバージョン1.2.20Nextメソッドはバージョン1.2.33で追加されました。

ロック楽観的ロードバランサが共有メモリランタイムデータの同期に使用するロック方法を指定します。ロックがO[楽観的]に設定されている場合、バランサは最適なワーカーを見つけるために共有メモリロックを使用しません。P[悲観的]に設定されている場合、バランサは共有メモリロックを使用します。悲観的ロックの場合、バランサはより正確に動作しますが、平均応答時間を遅くする可能性があります。

この機能はjk 1.2.13に追加されました。

再試行回数2 このディレクティブは、通常のワーカーにも存在します。それらについては、異なる意味を持ちます。リクエストを行う際、ロードバランサワーカーはリクエストをメンバーワーカーに割り当てます。そのメンバーワーカーがリクエストを処理できないか、リクエストの処理に失敗した場合、リクエストが処理されるまで、またはすべてのメンバーワーカーがリクエストの処理を試行したか、lb_retries個のメンバーワーカーがリクエストの処理を試行するまで、リクエストは別のメンバーワーカーに渡されます。

リクエストが未処理のままの場合、ロードバランサワーカーは上記の処理を最大retries回(最初の試行を含む)繰り返します。各再試行の前に、ロードバランサワーカーはretry_intervalディレクティブで定義された時間だけ一時停止します。

これは、すべてのワーカーが失敗した場合、クライアントに504応答が返される前に、合計でworker.retries * min(lb.lb_retries,メンバーワーカー数) * lb.retries回のリクエストが行われることを意味します。そのため、4つのメンバーを持つlbワーカーとデフォルト設定の場合、すべてのワーカーが失敗した場合、クライアントに504応答が返される前に、合計で8回のリクエストが行われます。

バージョン1.2.16までは、デフォルト値は3でした。

lb_retries2リクエストを行う際、ロードバランサワーカーはリクエストをメンバーワーカーに割り当てます。そのメンバーワーカーがリクエストを処理できないか、リクエストの処理に失敗した場合、リクエストが処理されるまで、またはすべてのメンバーワーカーがリクエストの処理を試行したか、lb_retries個のメンバーワーカーがリクエストの処理を試行するまで、リクエストは別のメンバーワーカーに渡されます。

リクエストが未処理のままの場合、ロードバランサワーカーは上記の処理を最大retries回(最初の試行を含む)繰り返します。各再試行の前に、ロードバランサワーカーはretry_intervalディレクティブで定義された時間だけ一時停止します。

これは、すべてのワーカーが失敗した場合、クライアントに504応答が返される前に、合計でworker.retries * min(lb.lb_retries,メンバーワーカー数) * lb.retries回のリクエストが行われることを意味します。そのため、4つのメンバーを持つlbワーカーとデフォルト設定の場合、すべてのワーカーが失敗した場合、クライアントに504応答が返される前に、合計で8回のリクエストが行われます。

この機能はjk 1.2.44で追加されました。この機能が追加される前は、ロードバランサワーカーはlb_retriesがメンバーワーカーの数に等しいかのように動作していました。

ステータスワーカーディレクティブ

ステータスワーカーはTomcatと通信しません。代わりに、ロードバランサの管理を担当します。

ディレクティブデフォルト説明
CSS-使用するカスケーディングスタイルシートのURLを指定します。
read_onlyfalseread_only=trueのステータスワーカーは、他のワーカーのランタイム状態または構成を変更する操作(編集/更新/リセット/復旧)を許可しません。

この機能はjk 1.2.20で追加されました。

ユーザー-ウェブサーバーによって認証されたユーザー名と比較されるユーザーのリストです。名前がこのリストに含まれていない場合、アクセスは拒否されます。デフォルトではリストは空であり、誰でもアクセスできます。

このディレクティブは複数回使用できます。

この機能はjk 1.2.20で追加されました。

user_case_insensitivefalseデフォルトでは、ユーザー名は大文字と小文字を区別して一致されます。user_case_insensitive=trueを設定して、比較で大文字と小文字を区別しないようにすることができます。これは、Windowsプラットフォームで特に役立ちます。

この機能はjk 1.2.21で追加されました。

正常a.o,a.n,a.b,a.r各ロードバランサワーカーについて、ステータスワーカーはメンバーの状態のサマリーを表示します。「正常」、「異常」、「低下」という3つの状態があります。

これらの状態は、メンバーの活性化(アクティブ、無効、停止)とランタイム状態(正常、n/a、ビジー、復旧中、プローブ中、強制復旧、エラー)に応じて決定されます。デフォルトでは、メンバーの活性化が「アクティブ」でランタイム状態が「エラー」でない場合、メンバーは「正常」とみなされます。

属性「正常」に値のリストを割り当てることで、このマッピングを変更できます。各値はメンバーの可能な一致を与え、1つのマッチで十分です。各値は、単一文字、またはドット「.」で結合された2文字です。「アクティブ」、「無効」、「停止」、「正常」、「n/a」、「ビジー」、「復旧中」、「エラー」という単語の最初の文字が単一文字です。「プローブ中」と「強制復旧」の状態は常に「復旧中」と同等と評価されます。値が単一文字のみで構成されている場合、この活性化またはランタイム状態を持つすべてのメンバーは正常とみなされます。活性化とランタイム状態を「.」で連結した組み合わせは、この活性化と状態を正確に持つメンバーのみに適用されます。

ロードバランサのメンバーは、最初に「異常」の状態と照合され、一致しない場合は「正常」の状態が試行され、それでも一致しない場合は状態が「低下」になります。

このディレクティブは複数回使用できます。

この機能はjk 1.2.20で追加されました。

異常s,e「正常」を参照してください。

デフォルトでは、メンバーの活性化が「停止」であるか、ランタイム状態が「エラー」である場合、メンバーは「異常」とみなされます。

このディレクティブは複数回使用できます。

この機能はjk 1.2.20で追加されました。

プレフィックスワーカープロパティ出力(mime=prop)を作成する際にステータスワーカーが使用するプレフィックス。各プロパティキーはこの値をプレフィックスとして付けられます。

この機能はjk 1.2.20で追加されました。

名前空間jkこのディレクティブは、ステータスワーカーからのXML出力をカスタマイズするために使用できます。-に設定すると、名前空間は使用されません。

この機能はjk 1.2.20で追加されました。

xmlns-このディレクティブは、ステータスワーカーからのXML出力をカスタマイズするために使用できます。-に設定すると、xmlnsは使用されません。

デフォルト値はxmlns:jk="https://tomcat.dokyumento.jp"に設定されています。

この機能はjk 1.2.20で追加されました。

DOCTYPE-このディレクティブは、ステータスワーカーからのXML出力をカスタマイズするために使用できます。この値は、XMLヘッダーの後に出力XMLに挿入されます。

この機能はjk 1.2.20で追加されました。

高度なワーカーディレクティブ

この表は、より高度な構成オプションをリストしています。それらのほとんどは、一部の種類のワーカーのみに適用されます。workers.listを介して直接使用されるajp13/ajp14ワーカーにはAJP、ロードバランサワーカーにはLB、ロードバランサワーカーでサブワーカーまたはメンバーとして間接的に使用されるワーカーにはSUBという略語を使用します。

ディレクティブワーカートタイプデフォルト説明
connect_timeoutAJP、SUB0接続が確立された後、ajp13接続でPINGリクエストを送信するようにウェブサーバーに指示する接続タイムアウトプロパティ。パラメーターは、PONG応答を待つミリ秒単位の遅延です。デフォルト値のゼロはタイムアウトを無効にします(無期限タイムアウト)。

この機能はjk 1.2.6で追加され、ハングしたTomcatの問題を回避し、Tomcat 3.3.2+、4.1.28+、および5.0.13+で実装されたajp13 ping/pongサポートを必要とします。デフォルトでは無効になっています。

prepost_timeoutAJP、SUB0リクエストを転送する前に、ajp13接続でPINGリクエストを送信するようにウェブサーバーに指示するprepostタイムアウトプロパティ。パラメーターは、PONG応答を待つミリ秒単位の遅延です。デフォルト値のゼロはタイムアウトを無効にします(無期限タイムアウト)。

この機能はjk 1.2.6で追加され、ハングしたTomcatの問題を回避し、Tomcat 3.3.2+、4.1.28+、および5.0.13+で実装されたajp13 ping/pongサポートを必要とします。デフォルトでは無効になっています。

reply_timeoutAJP、SUB0読み取りイベント中に成功を待つミリ秒数のパラメーター。これは、リクエストの完全な応答時間に対するタイムアウトではなく、Tomcatから受信した2つのパケット間の最大時間です。通常、最も長いポーズは、リクエストを送信してから応答の最初のパケットを取得する間です。

Tomcatからデータを受信せずにタイムアウトが経過すると、ウェブサーバーは応答の残りを待たずにクライアント(ブラウザ)にエラーを送信します。通常、これはリクエストがTomcatバックエンドでも中止されることを意味するわけではありません。ワーカーがロードバランサのメンバーである場合、ロードバランサはワーカーをエラー状態にして、別のメンバーでリクエストを再試行する可能性があります。max_reply_timeoutsretries、およびrecovery_optionsも参照してください。

デフォルト(値ゼロ)では、ウェブサーバーは無期限に待ち続けます。これは問題になる可能性があります。reply_timeoutを設定する場合は、長時間実行されるサーブレットがある場合は注意深く調整してください。

reply_timeoutは、Apache HTTP Server環境変数JK_REPLY_TIMEOUTreply_timeoutのワーカーマップ拡張を使用して上書きできます。

この機能はjk 1.2.6で追加され、ajp13をサポートするすべてのサーブレットエンジンで動作します。変数JK_REPLY_TIMEOUTとワーカーマップ拡張は、バージョン1.2.27で追加されました。

再試行回数AJP、SUB2 このディレクティブは、ロードバランサワーカーにも存在します。それらについては、異なる意味を持ちます。通信エラーが発生した場合に、ワーカーがTomcatにリクエストを送信する最大回数。各再試行は別の接続で行われます。最初の試行もカウントされるため、retries=2はエラー後の1回の再試行を意味します。再試行の前に、ワーカーは設定可能なスリープ時間待ちます。

再試行のより詳細な制御については属性recovery_options、スリープ時間の設定についてはretry_intervalも参照してください。

バージョン1.2.16までは、デフォルト値は3でした。

retry_intervalAJP、SUB100再試行を行う前にワーカーがスリープするミリ秒単位の時間。

この機能はjk 1.2.27で追加されました。

recovery_optionsAJP、SUB0復旧オプションは、Tomcatで問題を検出した場合の再試行の処理方法に影響を与えます。再試行回数は属性retriesで制御されます。

この属性はビットマスクです。次のビットが許可されます。
1:リクエストの取得後にTomcatが失敗した場合、復旧しません。
2:クライアントにヘッダーを送信した後にTomcatが失敗した場合、復旧しません。
4:クライアント(ブラウザ)への応答を書き戻す際にエラーを検出した場合、Tomcatへの接続を閉じます。
8:HTTPメソッドHEADのリクエストは常に復旧します(ビット1または2が設定されている場合でも)。
16:HTTPメソッドGETのリクエストは常に復旧します(ビット1または2が設定されている場合でも)。

この機能はjk 1.2.6で追加されました。オプション4はバージョン1.2.16、オプション8と16はバージョン1.2.24で追加されました。

fail_on_statusAJP、SUB0サーブレットコンテナから返された場合にワーカーが失敗するHTTPステータスコードにこの値を設定します。このディレクティブを使用して、サーブレットコンテナが短時間(例:再デプロイメント中)に一時的に200以外の応答を返す場合に対処します。

元の応答のエラーページ、ヘッダー、およびステータスコードはクライアントに送り返されません。代わりに、リクエストは503応答になります。ワーカーがロードバランサのメンバーである場合、メンバーはエラー状態になります。リクエストのフェイルオーバーとワーカーの復旧は、通常のロードバランサの手順で処理されます。

この機能はjk 1.2.20で追加されました。

jk 1.2.22以降、スペースまたはコンマ文字で区切られた複数のステータスコードを定義できます。たとえば:worker.xxx.fail_on_status=500,503

jk 1.2.25 以降、ロードバランサに対して、`fail_on_status`に含まれるステータスコードで応答が返された場合でも、メンバをエラー状態にしないよう指示できます。この機能は、ステータスコードの前にマイナス記号を付けることで有効になります。例:worker.xxx.fail_on_status=-404,-500,503

busy_limitAJP、SUB0正の値に設定すると、ワーカーは現在処理中の同時リクエスト数がこの数値未満の場合のみ、リクエストに使用されます。

これは、Busyness ロードバランシング方式とは関係ありません。

この機能は実験的で、jk 1.2.41に追加されました。

max_packet_sizeAJP、SUB8192この属性は、AJP パケットの最大サイズ(バイト単位)を設定します。1024 の倍数である必要があります。1024 の倍数でない設定値は、次の 1024 の倍数に調整されます。最大値は 65536 です。デフォルト値を変更する場合は、Tomcat側のAJPコネクタの`packetSize`属性も変更する必要があります!`packetSize`属性はTomcat 6.0.2以降で使用できます。

通常、最大パケットサイズを変更する必要はありません。デフォルト値に関する問題は、証明書または証明書チェーンを送信する場合に報告されています。

この機能はjk 1.2.19に追加されました。

prefer_ipv6AJP、SUBfalseIPV6サポート付きでコンパイルした場合、このディレクティブは、IPV6アドレスとIPV4アドレスの両方を持つホスト名のIPV6アドレス解決を強制します。指定されたホスト名にIPV6アドレスが定義されていない場合、このディレクティブは無効になります。IPV6アドレスのみが定義されている場合、またはIPV4またはIPV6表記でIPアドレスが"host"に使用されている場合も、このディレクティブは無効になります。

この機能はjk 1.2.38で追加されました。

secretAJP,SUB,LB-Tomcat AJPコネクタに秘密キーワードを設定できます。設定すると、同じ秘密キーワードを持つワーカーからのリクエストのみが受け付けられます。

Tomcat AJPコネクタの設定でsecret="secret key word"属性を使用してください。(歴史的注記:属性名は、2020年2月より前にリリースされたTomcat 9.0、8.x、7.0バージョンではrequiredSecret、Tomcat 6.0以前ではrequest.secretでした。)

ロードバランサに秘密キーワードを設定すると、そのすべてのメンバがこの秘密キーワードを継承します。

この機能はjk 1.2.12で追加されました。

mountAJP,LB-ワーカーが処理するURIマップのスペース区切りリストです。ワーカーが`worker.list`に含まれている場合にのみ使用されます。

このディレクティブは、同じワーカーに対して複数回使用できます。

max_reply_timeoutsLB0ロードバランサワーカーのメンバにreply_timeoutを使用していて、`reply_timeout`より時間がかかるリクエストをいくつか許容したい場合は、この属性を正の値に設定できます。

長時間実行されるリクエストは、データの待ち時間`reply_timeout`ミリ秒後にタイムアウトしますが、対応するメンバワーカーは、`max_reply_timeouts`を超えるリクエストがタイムアウトした場合にのみ、エラー状態になります。より正確には、これらの不良リクエストのカウントは、ロードバランサが内部メンテナンスを実行するたびに2で割られます(デフォルトでは60秒ごと)。

この機能は、jk 1.2.24で追加され、散発的な長時間実行リクエストに対するreply_timeoutの感度を低くしました。

recover_timeLB60リカバリ時間は、ロードバランサがエラー状態になった後、ワーカーを使用しようとしない時間(秒単位)です。この時間が経過した後のみ、エラー状態のワーカーはリカバリ中としてマークされ、新しいリクエストで試行されます。

この間隔は、リクエストが処理されるたびにチェックされるわけではありません。代わりに、グローバルメンテナンス中にチェックされます。グローバルメンテナンスの実行間隔は、`worker.maintain`で制御されます。

影響を理解していない限り、`recover_time`を非常に短い時間に設定しないでください。エラー状態のワーカーに対するすべてのリカバリ試行は、実際のリクエストによって行われます!

error_escalation_timeLBrecover_time / 2ロードバランサのメンバをエラー状態にすることは非常に深刻です。例えば、スティッキーセッションが必要な場合、該当ノードのセッションへのアクセスがすべてブロックされます。

ノードが完全に壊れているかどうかを正確に示す情報が提供されないエラー検出の種類があります。そのような場合、LBはノードをすぐにエラー状態にしません。そのようなエラーが発生した後、error_escalation_time秒間成功した応答がない場合にのみ、ノードはエラー状態になります。

この機能はjk 1.2.28で追加されました。

session_cookieLBJSESSIONIDセッションスティッキネスに必要なルーティング識別子を含むCookieの名前です。ルーティング識別子は、Cookieの値にある「.」文字の後のすべてです。

この機能はjk 1.2.27に追加されました。

session_pathLB;jsessionidセッションスティッキネスに必要なルーティング識別子を含むパスパラメータの名前です。ルーティング識別子は、パスパラメータの値にある「.」文字の後のすべてです。

この機能はjk 1.2.27に追加されました。

set_session_cookieLBfalseセッションスティッキネスCookieの生成を有効にします。通常は必要ありません。

一部のWebフレームワークはTomcatセッション管理を置き換え、セッションIDの生成方法が異なります。その結果、TomcatによってセッションIDの最後に追加されたルーティングIDが失われ、スティッキーロードバランシングを実行できなくなります。回避策として、次の手順を使用できます。

  • 「session_cookie」属性を使用して、非標準のCookie名を選択します。
  • 「set_session_cookie」属性をtrueに設定して、Cookieの送信を有効にします。
  • 「session_cookie_path」属性を正しいアプリケーションURI(例:「/myapp/」)に設定します。

Cookieは、リクエストに既に同じ名前のCookieが含まれていない場合、またはそのCookieにロードバランサが対応できるルーティングIDが含まれていない場合にのみ送信されます。特にノードのフェイルオーバー後、新しいノードにスティッキネスを切り替えるために新しいCookieを送信します。

この機能はjk 1.2.38で追加されました。

session_cookie_pathLB-この属性は、「set_session_cookie」がtrueに設定されている場合にのみ使用されます。「set_session_cookie」の説明を参照してください。「session_cookie_path」の値が空の場合(デフォルト)、送信されるCookieにはPATH情報は含まれません。

この機能はjk 1.2.38で追加されました。

activationSUBActiveこのディレクティブを使用して、ロードバランサのバランスされたワーカーを無効または停止として設定できます。無効なワーカーは、そのワーカーのセッションに属するリクエストのみを受け取ります。停止したワーカーは、リクエストを受け取りません。停止したワーカーのユーザーは、クラスタリングによるセッションレプリケーションを使用していない限り、セッションを失います。

無効にするにはdまたはD、停止するにはsまたはSを使用します。このディレクティブが存在しない場合、非推奨のディレクティブ「disabled」または「stopped」が使用されます。

このフラグは、`status worker`を使用して実行時に変更できます。

この機能はjk 1.2.19に追加されました。

routeSUBworker name通常、ロードバランサ内のバランスされたワーカーの名前は、対応するTomcatインスタンスの`jvmRoute`と同じです。異なるバランシング設定(例:無効、停止)を持つ複数のロードバランサに対応するTomcatインスタンスのワーカーを含めたい場合は、この属性を使用できます。

任意のワーカー名を持つLBごと、Tomcatインスタンスごとに個別のワーカーを定義し、ワーカーの`route`属性をターゲットTomcatインスタンスの`jvmRoute`に設定します。

この属性を空のままにすると、ワーカーの名前が使用されます。

この属性は、`status worker`を使用して実行時に変更できます。

ルート名にピリオドが含まれている場合、明示的に`domain`が設定されていない限り、最初のピリオドの手前の部分がドメイン名として使用されます。

この機能はjk 1.2.16で追加されました。
自動ドメインルールはjk 1.2.20で追加されました。
この属性の名前は、jk 1.2.20で`jvm_route`から`route`に変更されました。

distanceSUB0lbワーカーのバランスされたワーカー間の優先順位を表す整数です。ロードバランサは、距離が短い別の使用可能なワーカーが存在する場合、一部のバランスされたワーカーを選択しません。

指定された距離以下のすべてのワーカーがエラー、無効、または停止状態の場合にのみ、距離の大きいワーカーがバランシングの対象となります。

この機能はjk 1.2.16で追加されました。

domainSUB-ドメインディレクティブは、ワーカーがロードバランサのメンバである場合にのみ使用できます。同じドメイン名を持つワーカーは、単一のワーカーとして扱われます。`sticky_session`を使用する場合は、ドメイン名がセッションルートとして使用されます。

このディレクティブは、6つ以上のTomcatを持つ大規模システムで使用され、Tomcatを2つのグループにクラスタ化し、それらの間のセッションレプリケーション転送を削減します。

この機能はjk 1.2.8で追加されました。

redirectSUB-優先されるフェイルオーバーワーカーの名前に設定します。セッションIDに一致するワーカーがエラー状態の場合、代わりにリダイレクトワーカーが使用されます。無効になっている場合でも使用されるため、ホットスタンバイを提供します。

"route"属性でルートを明示的に設定する場合は、"redirect"を優先されるフェイルオーバーワーカーのこのルートに設定し、その名前に設定しないでください。

この機能はjk 1.2.9で追加されました。

非推奨のワーカーディレクティブ

以下のディレクティブは過去に非推奨となりました。古いバージョンのmod_jkを使用する必要がある場合に備え、そのドキュメントを含めています。更新し、これらを使用しないよう強くお勧めします。既存の設定を移行してください。

ディレクティブ後継デフォルト説明
cachesizeconnection_pool_size本文参照 このディレクティブは1.2.16以降非推奨です。Cachesizeは、AJPバックエンドへの接続数を定義し、接続プールとして維持されます。これは、各Webサーバーの子プロセスが行うことができるこれらの接続の数を制限します。

Cachesizeプロパティは、Apache HTTP Server 2.x(prefork以外のすべてのMPM)やIISなどのマルチスレッドWebサーバーでのみ使用されます。cachesizeプロパティは、子プロセスあたりのスレッド数を反映する必要があります。JKは、スレッド化されたMPMを使用してApache HTTP Server上の子プロセスあたりのスレッド数を検出し、現在のThreadsPerChild Apache設定に一致するデフォルト値を設定します。IISのデフォルト値は10です。

Apache 2.x with prefork MPMまたはApache 1.3.xでは、値が1より大きい`cachesize`を使用しないでください!
cache_timeoutconnection_pool_timeout0 このディレクティブは1.2.16以降非推奨です。Cache timeoutプロパティは、cachesizeと共に使用して、JKがオープンソケットをキャッシュに保持する時間を指定します。このプロパティは、Tomcat Webサーバーのスレッド数を削減するために使用してください。

各子は、Tomcatにリクエストを転送する必要がある場合、ajp13接続を開き、Tomcat側に新しいajp13スレッドを作成します。

問題は、ajp13接続が作成された後、子プロセスはキルされるまでそれをドロップしないことです。Webサーバーは、子プロセス/スレッドが静的コンテンツのみを処理する場合でも、高負荷を処理するために子プロセス/スレッドを実行し続けるため、Tomcat側に多くの未使用のajp13スレッドが残る可能性があります。

recycle_timeoutconnection_pool_timeout0 このディレクティブは1.2.16以降非推奨です。一定時間アイドル状態の後、ajp13接続を切断するようにWebサーバーに指示する秒数です。リクエストのエンドポイントを選択し、割り当てられたソケットが開いている場合、構成された時間使用されていない場合は閉じられます。これは、Tomcat側で非常に古いスレッドが存在しないようにする良い方法ですが、次にリクエストが転送されるときにソケットを再度開く必要があるという追加コストがかかります。このプロパティはcache_timeoutと非常によく似ていますが、非キャッシュモードでも機能します。値をゼロ(デフォルト)に設定すると、リサイクルは行われません。
balanced_workersbalance_workers- このディレクティブは1.2.7以降非推奨です。ロードバランサーが管理する必要があるワーカーのカンマ区切りリスト。
disabledactivationfalse このディレクティブは1.2.19以降非推奨です。trueに設定すると、ロードバランサのメンバである場合、ワーカーは無効になります。このフラグは、`status worker`を使用して実行時に変更できます。

この機能はjk 1.2.9で追加されました。

stoppedactivationfalse このディレクティブは1.2.19以降非推奨です。trueに設定すると、ロードバランサのメンバーであるワーカーは停止されます。このフラグは、スティッキセッションワーカーのトラフィックを完全に停止するために必要です。セッションをレプリケートするクラスタがある場合にのみ有効です。このフラグは、status workerを使用して実行時に変更できます。

この機能は、jk 1.2.11で追加されました。

jvm_routerouteworker name このディレクティブは、1.2.20以降非推奨となっています。通常、ロードバランサ内のバランスされたワーカーの名前は、対応するTomcatインスタンスの`jvmRoute`と同じです。異なるバランシング設定(例:無効、停止)を持つ複数のロードバランサに対応するTomcatインスタンスのワーカーを含めたい場合は、この属性を使用できます。

ロードバランサとTomcatインスタンスごとに、任意のワーカー名を持つ個別のワーカーを定義し、ワーカーのjvm_route属性をターゲットTomcatインスタンスのjvmRouteに設定します。

この属性を空のままにすると、ワーカーの名前が使用されます。

この属性は、`status worker`を使用して実行時に変更できます。

この機能はjk 1.2.16で追加されました。