付録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-manager
URL を使用してコマンドのパーミッションを切り替えます。デフォルト値は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 台のサーバーに永続化されます (そのサーバーが使用可能な場合)。