付録A Apache HTTP Server のリファレンス
A.1. Apache HTTP Server モジュール リンクのコピーリンクがクリップボードにコピーされました!
このセクションでは、「mod_cluster コンポーネント」で説明されている Apache HTTP Server プロキシーモジュールの定義を拡張します。
A.1.1. mod_manager.so リンクのコピーリンクがクリップボードにコピーされました!
クラスターマネージャーモジュール mod_manager は、ワーカーノードの登録、ワーカーノードの負荷データ、およびワーカーノードのアプリケーションのライフサイクルイベントなどのノードからメッセージを受信および確認します。
LoadModule manager_module modules/mod_manager.so
<VirtualHost> 要素の設定可能なディレクティブは以下のとおりです。
- EnableMCPMReceive
-
VirtualHostがノードから(MCPM)を受信できるようにします。mod_clusterが正常に動作できるように、Apache HTTP Server 設定にEnableMCPMReceiveディレクティブを 1 つ追加します。advertiseが設定された場所のVirtualHost設定にEnableMCPMReceiveを追加する必要があります。 - MaxMCMPMaxMessSize
-
mod_cluster Management Protocol
(MCMP)メッセージの最大サイズを定義します。デフォルト値は、他のMaxディレクティブから計算されます。最小値は1024です。 - AllowDisplay
-
mod_cluster-managerメインページで追加表示を切り替えます。デフォルト値はoffで、mod_cluster-managerメインページにはバージョン情報のみが表示されます。 - AllowCmd
-
mod_cluster-managerURL を使用してコマンドのパーミッションを切り替えます。デフォルト値はonで、コマンドを許可します。 - ReduceDisplay
-
mod_cluster-managerページに表示される情報の縮減を切り替えます。情報を減らすと、ページでより多くのノードを表示できます。デフォルト値はoffで、利用可能な情報をすべて表示することができます。 - MemManagerFile
-
mod_manager が設定の詳細を保存するファイルの場所を定義します。mod_manager は、共有メモリーおよびロックファイルに生成された鍵にもこの場所を使用します。絶対パス名である必要があります。NFS 共有ではなく、ローカルドライブ上のこのパスを使用することが推奨されます。デフォルト値は
/logs/です。 - Maxcontext
-
mod_cluster が使用するコンテキストの最大数。デフォルト値は
100です。 - Maxnode
-
mod_cluster が使用するワーカーノードの最大数。デフォルト値は
20です。 - Maxhost
-
mod_cluster が使用するホスト (エイリアス) の最大数。これは、ロードバランサーの最大数にもなります。デフォルト値は
20です。 - Maxsessionid
-
保存されたアクティブなセッション識別子の最大数。セッションから情報が 5 分間受信されない場合、セッションは非アクティブとみなされます。これはデモおよびデバッグの目的のみで使用されます。デフォルト値は
0で、このロジックを無効にします。 - ManagerBalancerName
-
ワーカーノードがロードバランサー名を指定しない場合に使用するロードバランサーの名前。デフォルト値は
myclusterです。 - PersistSlots
-
onに設定された場合、ノード、エイリアス、およびコンテキストはファイルに永続化されます。デフォルト値はoffです。 - CheckNonce
onに設定された場合、セッション識別子をチェックして、一意で、これまでに発生していないことを確認します。デフォルトはonです。警告このディレクティブを
offに設定すると、サーバーがリプレイ攻撃に対して脆弱になります。- SetHandler mod_cluster-manager
ハンドラーを定義して、クラスター内のワーカーノードについての情報を表示します。これは、
Location要素で定義されます。<Location $LOCATION> SetHandler mod_cluster-manager Require ip 127.0.0.1 </Location>ブラウザーの
Location要素で定義された$LOCATIONにアクセスすると、以下のような出力が表示されます。(この場合は、$LOCATIONもmod_cluster-handlerとして定義されました。)
Transferred は、ワーカーノードに送信された POST データに一致します。Connected は、このステータスページが要求されたときに処理されたリクエストの数に対応します。Sessions はアクティブなセッションの数に対応します。Maxsessionid が 0 の場合、このフィールドは存在しません。
A.1.2. mod_proxy_cluster.so リンクのコピーリンクがクリップボードにコピーされました!
プロキシーロードバランサーモジュール mod_proxy_cluster は、クラスターノードへの要求のルーティングを処理します。プロキシーバランサーは、クラスターのアプリケーションの場所、各クラスターノードの現在の状態、およびセッション ID (要求が確立されたセッションの一部である場合) に基づいて要求を転送するために適切なノードを選択します。
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
<VirtualHost> 要素に以下のディレクティブを設定して、負荷分散の動作を変更することもできます。
- CreateBalancers
ロードバランサーが Apache HTTP Server の仮想ホストでどのように作成されるかを定義します。
CreateBalancersでは、以下の値が使用できます。-
0: Apache HTTP Server で定義されたすべての仮想ホストにロードバランサーを作成します。ProxyPassディレクティブでロードバランサーを設定するのを忘れないようにしてください。 -
1: バランサーを作成しません。この値を使用する場合は、ProxyPassまたはProxyPassMatchにロードバランサー名を定義する必要もあります。 -
2: メインサーバーのみ作成します。これはCreateBalancersのデフォルト値です。
-
- UseAlias
定義された
AliasがServerNameに対応するかどうかを定義します。UseAliasについては、以下の値有効です。-
0: ワーカーノードのエイリアス情報を無視します。これはUseAliasのデフォルト値です。 -
1: 定義されたエイリアスがワーカーノードのサーバー名に対応していることを確認します。
-
- LBstatusRecalTime
-
ワーカーノードのステータスを計算するプロキシーの間隔 (秒単位) を定義します。デフォルトの間隔は
5秒です。 - ProxyPassMatch; ProxyPass
ProxyPassは、リモートサーバーをローカルサーバーの名前空間にマッピングします。ローカルサーバーにhttp://local.com/のアドレスがある場合、ProxyPassディレクティブはhttp://local.com/requested/file1のローカルリクエストをhttp://worker.local.com/file1のプロキシーリクエストに変換します。ProxyPass /requested/ http://worker.local.com/ProxyPassMatchは正規表現を使用して、プロキシーされた URL が適用されるローカルパスを照合します。いずれかのディレクティブで、
!は指定したパスがローカルであることを示します。そのパスのリクエストはリモートサーバーにルーティングしないでください。たとえば、以下のディレクティブはgifファイルをローカルで提供するように指定します。ProxyPassMatch ^(/.*\.gif)$ !
A.1.3. mod_advertise.so リンクのコピーリンクがクリップボードにコピーされました!
mod_advertise.so は、UDP マルチキャストメッセージを介してプロキシーサーバーの存在をブロードキャストします。サーバーのアドバタイズメッセージには、プロキシーが負荷分散クラスターに参加するノードからの応答をリッスンする IP アドレスとポート番号が含まれます。
このモジュールは、VirtualHost 要素の mod_manager とともに定義する必要があります。以下の例の識別子は advertise_module です。
LoadModule advertise_module modules/mod_advertise.so
mod_advertise は、以下のディレクティブを使用して設定できます。
- ServerAdvertise
アドバタイズメカニズムの使用方法を定義します。
デフォルト値は
Offです。Offに設定すると、プロキシーはその場所を公開しません。Onに設定された場合、アドバタイズメカニズムを使用して、ワーカーノードがこのプロキシーにステータス情報を送信するように指示します。以下の構文でホスト名およびポートを指定することもできます:ServerAdvertise On http://HOSTNAME:PORT/これは、名前ベースの仮想ホストを使用する場合や、仮想ホストが定義されていない場合にのみ必要です。- AdvertiseGroup
アドバタイズするマルチキャストアドレスを定義します。構文は
AdvertiseGroup ADDRESS:PORTです。ここでは、ADDRESSがAdvertiseGroupAddressに一致し、PORTがワーカーノードのAdvertisePortに一致している必要があります。ワーカーノードが JBoss EAP ベースで、起動時に
-uスイッチが使用される場合、デフォルト値AdvertiseGroupAddressは-uスイッチ経由で渡されます。デフォルト値は
224.0.1.105:23364です。ポートが指定されていない場合、ポートはデフォルトで23364に設定されます。- AdvertiseFrequency
-
IP アドレスとポートをアドバタイズするマルチキャストメッセージの間隔 (秒単位)。デフォルト値は
10です。 - AdvertiseSecurityKey
- JBoss Web Server で mod_cluster を特定するために使用される文字列を定義します。デフォルトでは、このディレクティブは設定されず、情報は送信されません。
- AdvertiseManagerUrl
- ワーカーノードが情報をプロキシーサーバーに送信するために使用する URL を定義します。デフォルトでは、このディレクティブは設定されず、情報は送信されません。
- AdvertiseBindAddress
-
マルチキャストメッセージを送信するアドレスとポートを定義します。構文は
AdvertiseBindAddress ADDRESS:PORTです。これにより、複数の IP アドレスを持つマシンにアドレスを指定できます。デフォルト値は0.0.0.0:23364です。
A.1.4. mod_proxy.so リンクのコピーリンクがクリップボードにコピーされました!
mod_proxy.so は標準の Apache HTTP Server モジュールです。このモジュールにより、サーバーは AJP (Apache JServe Protocol)、FTP、CONNECT (SSL)、および HTTP で転送されるデータのプロキシーとして動作します。このモジュールに追加の設定は必要ありません。その識別子は proxy_module です。
ProxyIOBufferSize などの Mod_proxy ディレクティブは mod_cluster の設定に使用されます。
A.1.5. mod_proxy_ajp.so リンクのコピーリンクがクリップボードにコピーされました!
mod_proxy_ajp.so は、AJP (Apache JServe Protocol) プロキシーのサポートを提供する標準の Apache HTTP Server モジュールです。このモジュールを使用するには、mod_proxy.so が必要です。
A.1.6. mod_cluster_slotmem リンクのコピーリンクがクリップボードにコピーされました!
mod_cluster_slotmem には設定ディレクティブは必要ありません。
A.2. workers.properties リンクのコピーリンクがクリップボードにコピーされました!
Apache HTTP Server ワーカーノードは、mod_jk ロードバランサーにマップされるサーブレットコンテナーです。ワーカーノードは JBCS_HOME/httpd/conf/workers.properties で定義されます。このファイルは、異なるサーブレットコンテナーの場所と、全体で呼び出しが負荷分散される方法を指定します。
workers.properties ファイルには、2 つのセクションが含まれます。
- グローバルプロパティー
- このセクションには、すべてのワーカーに適用されるディレクティブが含まれます。
- ワーカープロパティー
- このセクションには、各ワーカーに適用されるディレクティブが含まれます。
各ノードはワーカープロパティーの命名規則を使用して定義されます。ワーカー名には、小文字、大文字、数字、および特定の特殊文字 (_、/) のみを含めることができます。
worker プロパティーの構造は worker.WORKER_NAME.DIRECTIVE です。
worker- すべてのワーカープロパティーの定数接頭辞。
WORKER_NAME-
ワーカーに指定された任意の名前。たとえば、
node1、node_01、Node_1など。 DIRECTIVE- 必要な特定のディレクティブ。
ワーカーノードの設定に必要な主なディレクティブは以下のとおりです。
worker.properties 設定ディレクティブの完全リストは『Apache Tomcat Connector - Reference Guide』を参照してください。
worker.properties グローバルディレクティブ
- worker.list
mod_jk によって使用されるワーカー名の一覧を指定します。この一覧のワーカーは、要求をマップするために利用できます。
注記ロードバランサーによって管理されない単一ノード設定は
worker.list=WORKER_NAMEに設定する必要があります。
workers.properties 必須ディレクティブ
- type
ワーカーに適用されるディレクティブを決定するワーカーのタイプを指定します。デフォルト値は
ajp13です。これは、Web サーバーと Apache HTTP Server 間の通信に選択するワーカータイプです。その他の値には、
lbおよびstatusが含まれます。AJPv13 の詳細は、『Apache Tomcat Connector - AJP Protocol Reference』 を参照してください。
workers.properties 接続ディレクティブ
- host
ワーカーのホスト名または IP アドレス。ワーカーノードは ajp13 プロトコルスタックをサポートする必要があります。デフォルト値は
localhostです。ホスト名または IP アドレスの後にポート番号を追加すると、
portディレクティブを host ディレクティブの一部として指定できます。たとえば、worker.node1.host=192.168.2.1:8009またはworker.node1.host=node1.example.com:8009のようになります。- port
-
定義されたプロトコルリクエストをリッスンしているバックエンドサーバーインスタンスのポート番号。デフォルト値は
8009で、AJPv13 ワーカーのデフォルトのリッスンポートです。 - ping_mode
現在のネットワークの正常性に対して接続がプローブされる条件を指定します。
プローブは、
CPingに空の AJPv13 パケットを使用し、指定のタイムアウト内でCPongを返すことを想定します。ディレクティブフラグの組み合わせを使用して条件を指定します。フラグはカンマ区切りではありません。たとえば、正しいディレクティブフラグセットは
worker.node1.ping_mode=CIです。- C - Connect (接続)。
-
サーバーへの接続後に接続がプローブされるよう指定します。
connect_timeoutディレクティブを使用してタイムアウトを指定します。指定しない場合は、ping_timeoutの値が使用されます。 - P (プレポスト)
-
各リクエストをサーバーに送信する前に接続がプローブされることを指定します。
prepost_timeoutディレクティブを使用してタイムアウトを指定します。指定しない場合は、ping_timeoutの値が使用されます。 - I - Interval (間隔)。
-
定期的な内部メンテナンスサイクル中に接続がプローブされることを指定します。
connection_ping_intervalディレクティブを使用してインターバルでアイドルのタイムアウトを指定します。指定しない場合は、ping_timeoutの値が使用されます。 - A - All (すべて)。
-
すべてのディレクティブフラグが適用されることを指定する最も一般的な設定。高度なディレクティブ
\*_timeoutの詳細は、『Apache Tomcat Connector - Reference Guide』を参照してください。
- ping_timeout
-
CPing接続プローブへのCPong応答を待つ時間を指定します (ping_modeを参照)。デフォルトの値は10000ミリ秒です。
worker.properties 負荷分散ディレクティブ
- lbfactor
個別のワーカーの負荷分散係数を指定します。ロードバランサーのメンバーワーカーにのみ指定されます。
このディレクティブは、クラスター内の他のワーカーと比較して、ワーカーに分散される HTTP 要求負荷の相対量を定義します。
このディレクティブが適用される一般的な例は、クラスターで処理能力の高いサーバーを他のサーバーと区別する場合です。たとえば、あるワーカーに他のワーカーの 3 倍の負荷を割り当てる場合は
worker.WORKER_NAME.lbfactor=3を指定します。- balance_workers
-
ロードバランサーが管理する必要があるワーカーノードを指定します。ディレクティブは同じロードバランサーに複数回使用でき、
workers.propertiesファイルに指定されるワーカー名のコンマ区切りリストで構成されます。 - sticky_session
SESSION ID を持つワーカーのリクエストが同じワーカーにルーティングされるかどうかを指定します。デフォルトは
0(false) です。1(true) に設定すると、ロードバランサーの永続性が有効になります。たとえば、
worker.loadbalancer.sticky_session=0を指定する場合、各要求はクラスター内の各ノード間で負荷分散されます。つまり、同じセッションの異なるリクエストは、サーバーの負荷に基づいて異なるサーバーに送信できます。worker.loadbalancer.sticky_session=1を指定した場合は、セッションが終了するまで各セッションが 1 台のサーバーに永続化されます (そのサーバーが使用可能な場合)。