3.3. Apache HTTP サーバーおよび mod_cluster を使用した負荷分散の設定
JBoss Web Server 2.1 以降では、デフォルトで Apache HTTP Server に対して mod_cluster が正しく設定されます。カスタム設定を設定するには、「基本的なプロキシーサーバーの設定」を参照してください。
mod_cluster を使用した Tomcat ワーカーノードの設定に関する詳細は、「ワーカーノードの設定」を参照してください。
Red Hat のお客様は Red Hat カスタマーポータルにある Load Balancer Configuration Tool を使用して mod_cluster や Tomcat ワーカーに最適な設定テンプレートを迅速に生成することもできます。
JBoss Web Server 3 にこのツールを使用する場合は、Apache バージョンを 2.4.x
として選択し、バックエンド設定を Tomcat
として選択してください。
3.3.1. 基本のプロキシサーバーの設定
プロキシーサーバー設定は、1 つの必須手順と 1 つの任意ステップで構成されます。
- Proxy Server リスナーを、ワーカーノードの接続要求およびワーカーノードのフィードバックを受信するように設定します。
- 任意: サーバーのアドバタイズを無効にします。
サーバーアドバタイズメント
プロキシーサーバーは UDP マルチキャストを使用してアドバタイズします。プロキシーサーバーとワーカーノード間で UDP マルチキャストを利用できる場合、サーバーアドバタイズメントはプロキシーサーバーで追加設定なしでワーカーノードを追加し、ワーカーノードには最低限の設定のみが必要です。
UDP マルチキャストが利用できない、または望ましくない場合は ワーカーノードをプロキシーサーバーの静的リストで設定します。いずれの場合も、プロキシーサーバーはワーカーノードの一覧で設定する必要はありません。
3.3.1.1. mod_cluster を使用したロードバランシングプロキシーの設定
要件
- JBoss Web Server をインストールし、インストール用に mod_cluster モジュールを設定します。詳細は、JBoss Web Server 『インストールガイド』 を参照してください。
管理チャネル用の仮想ホスト mod_cluster を使用してロードバランシングプロキシーを設定するには、以下を設定する必要があります。
このアドレスとポートの組み合わせは mod_cluster 管理メッセージ用のみで、一般的なトラフィック用ではありません。
プロキシーサーバーの Listen ディレクティブを作成します。
mod_cluster 設定ファイル (通常は
JBCS_HOME/httpd/conf.d/mod_cluster.conf
) を編集して以下を追加します。Listen IP_ADDRESS:PORT_NUMBER
IP_ADDRESS
は、ワーカーノードと通信するためのサーバーネットワークインターフェースのアドレスで、PORT_NUMBER
はリッスンするインターフェースのポートです。注記ポートは、受信 TCP 接続に対して開いている必要があります。
仮想ホストを作成します。
以下を mod_cluster 設定ファイルに追加します。
<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
ディレクティブの値に置き換えます。任意: サーバーのアドバタイズを無効にします。
AdvertiseFrequency
ディレクティブにより、サーバーは UDP マルチキャストを介してサーバーアドバタイズメッセージを定期的に送信します。デフォルトでは、これは 10 秒ごとに発生します。これらのサーバーアドバタイズメッセージには、
VirtualHost
定義に指定されたIP_ADDRESS
とPORT_NUMBER
が含まれます。サーバーアドバタイズに応答するように設定されたワーカーノードは、この情報を使用してプロキシーサーバーに登録されます。サーバーのアドバタイズを無効にするには、以下のディレクティブを
VirtualHost
定義に追加します。ServerAdvertise Off
サーバーのアドバタイズが無効になっている場合や、UDP マルチキャストがプロキシーサーバーとワーカーノードの間のネットワークで利用できない場合、ワーカーノードをプロキシーサーバーの静的リストで設定します。
任意: Apache HTTP Server のロギングを設定します。
どのワーカーノードがリクエストを処理するかをログに記録するために負荷分散を実施している Apache HTTP サーバーを設定できます。これは、ロードバランサーのトラブルシューティングに役立ちます。
mod_cluster に対してこれを有効にするには、Apache HTTP Server
LogFormat
ディレクティブに以下を追加します。- %{BALANCER_NAME}e
- リクエストに対応したバランサーの名前。
- %{BALANCER_WORKER_NAME}e
- 要求に対応したワーカーノードの名前。
ログローテーションを含む Apache HTTP Server ロギングの詳細は、http://httpd.apache.org/docs/2.4/logs.html を参照してください。
Apache HTTP Server サービスを停止して起動します。
詳細な手順は、JBoss Core Services 『インストールガイド』を参照してください。
3.3.2. ワーカーノードの設定
3.3.2.1. Tomcat ワーカーノードの設定
以下の手順に従って、JBoss Web Server ノードに mod_cluster をインストールし、クラスター化されていない操作に対して設定します。
JBoss Web Server Tomcat ワーカーノードは、mod_cluster 機能のサブセットのみをサポートします。完全な mod_cluster 機能は JBoss EAP で利用できます。
サポートされるワーカーノードのタイプ
- JBoss Web Server Tomcat サービス。
mod_cluster JBoss Web Server ノードの制限
- 非クラスターモードのみ。
- 負荷分散係数を計算するときに一度に使用できる負荷メトリックは 1 つだけです。
要件
- JBoss Web Server のサポート対象インスタンスをインストールします。
- プロキシー設定パラメーター を理解します。
Tomcat ワーカーノードを設定するには、以下を実行します。
リスナーを Tomcat に追加します。
他の
Listener
の下にある以下のListener
をJWS_HOME/tomcat<VERSION>/conf/server.xml
に追加します。<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
メッセージの頻度を設定します。Tomcat ワーカーノードは、現在の負荷ステータスを含むステータスメッセージを Apache HTTP Server バランサーに定期的に送信します。これらのメッセージのデフォルトの頻度は 10 秒です。数百のワーカーノードがある場合、
STATUS MCMP
メッセージによって Apache HTTP Server ネットワークのトラフィック輻輳が増える可能性があります。org.jboss.modcluster.container.catalina.status-frequency
Java システムプロパティーを変更することで、MCMP
メッセージ頻度を設定できます。デフォルトでは、プロパティーは秒に 10 を掛けた値を受け入れます。たとえば、プロパティーを1
に設定すると 10 秒になります。以下の例は、頻度を 60 秒に設定します。-Dorg.jboss.modcluster.container.catalina.status-frequency=6
任意: プロキシーサーバーのアドバタイズにファイアウォールを設定します。
mod_cluster を使用するプロキシーサーバーは UDP マルチキャストを介してアドバタイズできます。多くのオペレーティングシステムのファイアウォールは、デフォルトでこれをブロックします。サーバーのアドバタイズを有効にしてこのマルチキャストメッセージを受信するには、ワーカーノードのファイアウォールで UDP 接続の
23364
ポートを開きます。Red Hat Enterprise Linux 6 の場合
/sbin/iptables -A INPUT -m state --state NEW -m udp -p udp --dport 23364 -j ACCEPT -m comment -comment receive mod_cluster proxy server advertisements
自動プロキシー検出が使用されていない場合は、ワーカーノードをプロキシーの静的リストで設定します。この場合は、以下の警告メッセージを無視しても問題ありません。
[warning] mod_advertise: ServerAdvertise Address or Port not defined, Advertise disabled!!!
Red Hat Enterprise Linux 7 の場合
firewall-cmd --permanent --zone=public --add-port=23364/udp
PowerShell を使用する Microsoft Windows の場合
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"'
3.3.2.2. 静的プロキシーリストを使用したワーカーノードの設定
サーバーのアドバタイズにより、ワーカーノードをプロキシーサーバーで自動的に検出し、登録することができます。UDP マルチキャストが利用できない場合やサーバーのアドバタイズが無効になっている場合、ワーカーノードはプロキシーサーバーアドレスおよびポートの静的リストで設定する必要があります。
以下の手順を使用して、プロキシーサーバーの静的リストで操作するよう JBoss Web Server ワーカーノードを設定します。
ワーカーノードを静的プロキシーリストで設定するには、以下を実行します。
mod_cluster リスナーを定義し、動的プロキシー検出を無効にします。
JWS_HOME/tomcat<VERSION>/conf/server.xml
を編集し、ModClusterListener
のListener
要素を追加または変更します。advertise
プロパティーをfalse
に設定します。例を以下に示します。<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="false" stickySession="true" stickySessionForce="false" stickySessionRemove="true"/>
静的プロキシーサーバーリストを作成します。
プロキシーのコンマ区切りリストを
IP_ADDRESS:PORT
形式でproxyList
プロパティーとして Listener に追加します。例を以下に示します。<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"/>