3.3. mod_proxy_cluster を使用する場合の Apache HTTP Server 負荷分散設定
Apache HTTP Server 2.1 以降のバージョンでは、mod_proxy_cluster
はデフォルトで Apache HTTP Server 用に正しく設定されています。カスタム設定の設定について詳しくは、基本プロキシーサーバー の設定を参照してください。
mod_proxy_cluster
のサンプル設定ファイル
mod_proxy_cluster
を Red Hat JBoss Core Services (JBCS) 経由でインストールしたか、Red Hat Enterprise Linux (RHEL) Application Streams を使用してインストールしたかに応じて、次のガイドラインを考慮してください。
-
JBCS の場合、
JBCS_HOME/httpd/conf.d/
ディレクトリーにmod_proxy_cluster
のサンプル設定ファイルがあります。 -
RHEL の場合、
/etc/httpd/conf.d/
ディレクトリーにmod_proxy_cluster
のサンプル設定ファイルがあります。
mod_proxy_cluster
のサンプル設定ファイルの名前は mod_proxy_cluster.conf.sample
です。独自の設定ファイルを作成する代わりにこれらのサンプルを使用する場合は、.sample
拡張子を削除し、必要に応じてファイルの内容を変更します。
また、Red Hat Customer Portal の Load Balancer Configuration ツールを使用して、mod_proxy_cluster
および Tomcat ワーカーノードに最適な設定テンプレートをすばやく生成することもできます。Apache HTTP Server 2.4.57 のロードバランサー設定ツールを使用する場合は、Apache バージョンに 2.4.x
を、バックエンド設定に Tomcat/JWS
を選択してください。
mod_proxy_cluster
の使用に関するガイドライン
mod_proxy_cluster
コネクターを使用する場合は、次のガイドラインを考慮してください。
-
mod_proxy_cluster
コネクターを使用する場合は、mod_proxy
モジュールを有効にして、mod_proxy_balancer
モジュールを無効にする必要があります。 -
mod_proxy_cluster
で Apache JServ Protocol (AJP) を使用する場合は、proxy_ajp_module
を有効にする必要があります。 -
AJPSecret
your_secret
を使用して、AJP バックエンドのシークレットを指定します。your_secret
がバックエンドで設定された値に対応していない場合には、このバックエンドでは、プロキシー経由で送信される全要求に対して503
エラー応答を送信します。
Red Hat JBoss Core Services 2.4.57 では、バックエンドの websockets サーバーに対する接続がアップグレードされていない場合に、その接続のトンネリングはサポートされません。つまり、mod_proxy_wstunnel
モジュールの ProxyPass
ディレクティブを設定するときに、アップグレードパラメーターが NONE
に設定されていないことを確認する必要があります。mod_proxy_wstunnel
の詳細は、Apache のドキュメント を参照してください。
3.3.1. 基本のプロキシーサーバーの設定
Web クライアントとバックエンド Web サーバーの間で要求と応答を転送するプロキシーサーバーとして機能するように Apache HTTP Server を設定できます。バックエンドのワーカーノードから接続要求と応答を受信するには、プロキシーサーバーリスナーを設定する必要があります。mod_proxy_cluster
を使用する負荷分散プロキシーサーバーを設定する場合は、管理チャネル用の仮想ホストも設定する必要があります。
前提条件
- Apache HTTP サーバーがインストール されている。
-
Application Streams を使用して Apache HTTP Server の RHEL ディストリビューションをインストールした場合は、
mod_proxy_cluster
を手動でインストール している。 - プロキシーサーバーリスナーに指定するポートは、受信 TCP 接続用に開いている必要があります。
手順
Apache HTTP Server 設定ディレクトリーに移動します。
-
JBCS Apache HTTP Server を使用している場合は、
JBCS_HOME/httpd/conf.d
ディレクトリーに移動します。 -
RHEL Apache HTTP Server を使用している場合は、
/etc/httpd/conf.d
ディレクトリーに移動します。
-
JBCS Apache HTTP Server を使用している場合は、
-
mod_proxy_cluster.conf
ファイルを開きます。 プロキシーサーバーの
Listen
ディレクティブを作成するには、mod_proxy_cluster.conf
ファイルに次の行を入力します。Listen IP_ADDRESS:PORT_NUMBER
注記上記の例では、プロキシーサーバーがワーカーノードと通信するために使うサーバーネットワークインターフェイスのアドレスに
IP_ADDRESS
をプロキシーサーバーがワーカーノードと通信するのに使うサーバーネットワークインターフェイスのアドレスに、をプロキシーサーバーがリッスンするポートに置き換えてください。PORT_NUMBER
をプロキシーサーバーがリッスンするポートに置き換えます。着信 TCP 接続用にポートが開いていることを確認します。
仮想ホストを作成するには、
mod_proxy_cluster.conf
ファイルに次の詳細を入力します。<VirtualHost IP_ADDRESS:PORT_NUMBER> <Directory /> Require ip IP_ADDRESS </Directory> KeepAliveTimeout 60 MaxKeepAliveRequests 0 ManagerBalancerName mycluster AdvertiseFrequency 5 EnableMCPMReceive On </VirtualHost>
注記前の例で、
IP_ADDRESS
とPORT_NUMBER
を、Listen
ディレクティブに指定したサーバーネットワークインターフェイスのアドレスとポート番号に置き換えます。このアドレスとポートの組み合わせは、
mod_proxy_cluster
管理メッセージにのみ使用されます。このアドレスとポートの組み合わせは、一般的なトラフィックには使用されません。
Apache HTTP Server サービスの開始の詳細は、Red Hat JBoss Core Services Apache HTTP Server インストールガイド を参照してください。
3.3.1.1. サーバー広告の無効化
プロキシーサーバーは、UDP マルチキャストを使用して自身をアドバタイズします。AdvertiseFrequency
ディレクティブは、デフォルトでサーバー通知メッセージを 10 秒ごとに送信するようにサーバーに指示します。サーバー通知メッセージには、VirtualHost
定義で指定した IP_ADDRESS
と PORT_NUMBER
が含まれています。サーバーアドバタイズに応答するように設定されたワーカーノードは、この情報を使用してプロキシーサーバーに登録されます。ワーカーノードがプロキシーサーバーに登録されないようにする場合は、オプションでサーバーアドバタイズメントを無効にすることができます。
プロキシーサーバーとワーカーノードの間で UDP マルチキャストが使用可能な場合、サーバーアドバタイズメントは、プロキシーサーバーでさらに設定する必要なく、ワーカーノードを追加します。サーバーアドバタイズには、ワーカーノードでの最小限の設定のみが必要です。
前提条件
手順
Apache HTTP Server 設定ディレクトリーに移動します。
-
JBCS Apache HTTP Server を使用している場合は、
JBCS_HOME/httpd/conf.d
ディレクトリーに移動します。 -
RHEL Apache HTTP Server を使用している場合は、
/etc/httpd/conf.d
ディレクトリーに移動します。
-
JBCS Apache HTTP Server を使用している場合は、
-
mod_proxy_cluster.conf
ファイルを開きます。 次のディレクティブを
VirtualHost
定義に追加します。ServerAdvertise Off
注記サーバーのアドバタイズが無効になっている場合や、UDP マルチキャストがプロキシーサーバーとワーカーノードの間のネットワークで利用できない場合、ワーカーノードをプロキシーサーバーの静的リストで設定します。いずれの場合も、ワーカーノードのリストを使用してプロキシーサーバーを設定する必要はありません。
3.3.1.2. ワーカーノードの詳細のログ記録
mod_proxy_cluster
を使用する負荷分散プロキシーサーバーを設定する場合、必要に応じて、要求を処理する各ワーカーノードの詳細をログに記録するように Apache HTTP Server を設定できます。ワーカーノードの詳細をログに記録すると、ロードバランサーのトラブルシューティングが必要な場合に役立ちます。
前提条件
手順
Apache HTTP Server 設定ディレクトリーに移動します。
-
JBCS Apache HTTP Server を使用している場合は、
JBCS_HOME/httpd/conf.d
ディレクトリーに移動します。 -
RHEL Apache HTTP Server を使用している場合は、
/etc/httpd/conf.d
ディレクトリーに移動します。
-
JBCS Apache HTTP Server を使用している場合は、
-
mod_proxy_cluster.conf
ファイルを開きます。 次の詳細を Apache HTTP Server の
LogFormat
ディレクティブに追加します。%{BALANCER_NAME}e :: The name of the balancer that served the request. %{BALANCER_WORKER_NAME}e :: The name of the worker node that served the request.
3.3.2. mod_proxy_cluster
での JBoss Web Server ワーカーノードの設定
mod_proxy_cluster
を使用すると、バックエンドワーカーノードを非クラスターモードのみで動作する JBoss Web ServerTomcat サービスとして設定できます。この状況で mod_proxy_cluster
が負荷分散係数の計算で同時に使用できる負荷メトリクスは 1 つだけです。
JBoss Web Server ワーカーノードは、mod_proxy_cluster
機能のサブセットのみをサポートします。完全な mod_proxy_cluster
機能は JBoss EAP で利用できます。
前提条件
手順
JBoss Web Server にリスナーを追加するには、
JWS_HOME/tomcat <VERSION>/conf/server.xml
ファイルで、他のListener
要素の下に次のListener
要素を追加します。<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="true" stickySession="true" stickySessionForce="false" stickySessionRemove="true" />
ワーカーノードに一意のアイデンティティーを与えるには、
JWS_HOME/tomcat <VERSION>/conf/server.xml
ファイルで、jvmRoute
属性と値をEngine
要素に追加します。<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker01">
STATUS MCMP
メッセージの頻度を設定するには、org.jboss.modcluster.container.catalina.status-frequency
Java システムプロパティーを変更します。以下に例を示します。
-Dorg.jboss.modcluster.container.catalina.status-frequency=6
注記JBoss Web Server は、現在の負荷ステータスを含むステータスメッセージを Apache HTTP Server バランサーに定期的に送信します。これらのメッセージのデフォルトの頻度は 10 秒です。数百のワーカーノードがある場合、
STATUS MCMP
メッセージによって Apache HTTP Server ネットワークのトラフィック輻輳が増える可能性があります。MCMP
メッセージ頻度を設定するには、org.jboss.modcluster.container.catalina.status-frequency
Java システムプロパティーを変更します。デフォルトでは、プロパティーは秒単位で指定された値を 10 倍して受け入れます。たとえば、プロパティーを1
に設定すると 10 秒になります。前の例では、プロパティーは6
に設定されており、これは 60 秒を意味します。オプション: プロキシーサーバーのアドバタイズ用にファイアウォールを設定するには、次のいずれかの手順を実行して、ワーカーノードのファイアウォールで UDP 接続用のポート
23364
を開きます。RHEL の場合:
firewall-cmd --permanent --zone=public --add-port=23364/udp
PowerShell を使用する Windows Server の場合:
Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList '-command "NetSh Advfirewall firewall add rule name="UDP Port 23364" dir=in action=allow protocol=UDP localport=23364"' Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList '-command "NetSh Advfirewall firewall add rule name="UDP Port 23364" dir=out action=allow protocol=UDP localport=23364"'
注記プロキシーサーバーが
mod_proxy_cluster
を使用する場合、プロキシーサーバーは UDP マルチキャストを使用して自身をアドバタイズできます。ほとんどのオペレーティングシステムのファイアウォールは、デフォルトでサーバーアドバタイズメント機能をブロックします。サーバーアドバタイズメントを有効にしてこれらのマルチキャストメッセージを受信するには、前述の例に示すように、ワーカーノードのファイアウォールで UDP 接続用にポート23364
を開くことができます。
3.3.3. プロキシーサーバーの静的リストを操作するためのワーカーノードの設定
サーバーアドバタイズメントにより、ワーカーノードがプロキシーサーバーを動的に検出して登録できるようになります。UDP マルチキャストが利用できない場合、またはサーバーアドバタイズメントが無効になっている場合は、プロキシーサーバーのアドレスとポートの静的リストを使用して JBoss Web Server ワーカーノードを設定する必要があります。
前提条件
手順
-
JWS_HOME/tomcat<VERSION>/conf/server.xml
ファイルを開きます。 mod_proxy_cluster
リスナーを定義して動的プロキシー検出を無効にするには、ModClusterListener
のListener
要素を追加または変更します。以下に例を示します。
<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="false" stickySession="true" stickySessionForce="false" stickySessionRemove="true"/>
注記advertise
プロパティーをfalse
に設定していることを確認してください。静的プロキシーサーバーリストを作成するには、プロキシーのコンマ区切りリストを、
IP_ADDRESS:PORT,IP_ADDRESS:PORT
の形式で追加して、proxyList
プロパティーを更新します。以下に例を示します。
<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="false" stickySession="true" stickySessionForce="false" stickySessionRemove="true" proxyList="10.33.144.3:6666,10.33.144.1:6666"/>