HTTP コネクターおよび負荷分散ガイド 5.6
Red Hat JBoss Web Server 5.6 向け
概要
mod_cluster
および mod_jk
コネクターモジュールを使用する負荷分散ソリューションをインストールおよび設定します。
Red Hat ドキュメントへのフィードバック (英語のみ)
弊社の技術的な内容についてのフィードバックに感謝します。ご意見をお聞かせください。コメントの追加、Insights の提供、誤字の修正、および質問を行う必要がある場合は、ドキュメントで直接行うこともできます。
Red Hat アカウントがあり、カスタマーポータルにログインしている必要があります。
カスタマーポータルからドキュメントのフィードバックを送信するには、以下の手順を実施します。
- Multi-page HTML 形式を選択します。
- ドキュメントの右上にある Feedback ボタンをクリックします。
- フィードバックを提供するテキストのセクションを強調表示します。
- ハイライトされたテキストの横にある Add Feedback ダイアログをクリックします。
- ページの右側のテキストボックスにフィードバックを入力し、送信 をクリックします。
フィードバックを送信すると、自動的に問題の追跡が作成されます。Submit をクリックすると表示されるリンクを開き、問題の監視を開始するか、さらにコメントを追加します。
貴重なフィードバックにご協力いただきありがとうございます。
多様性を受け入れるオープンソースの強化
Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。まずは、マスター (master)、スレーブ (slave)、ブラックリスト (blacklist)、ホワイトリスト (whitelist) の 4 つの用語の置き換えから始めます。この取り組みは膨大な作業を要するため、今後の複数のリリースで段階的に用語の置き換えを実施して参ります。詳細は、Red Hat CTO である Chris Wright のメッセージ をご覧ください。
第1章 HTTP コネクターモジュール
Red Hat JBoss Core Services には、一連のバックエンドサーブレットコンテナーへの HTTP リクエストの負荷分散に使用できる 2 つの異なる HTTP コネクターモジュールが含まれています。
-
Apache Tomcat コネクター (
mod_jk
) は、スティッキーセッションを維持し、Apache JServ Protocol (AJP) を介して通信しながら、一連のサーブレットコンテナーに対する HTTP 要求の負荷分散をサポートします。 -
JBoss HTTP コネクター (
mod_cluster
) は、mod_jk
よりも高度なロードバランサーです。mod_cluster
モジュールは、mod_jk
のすべての機能と、リアルタイムの負荷分散計算、アプリケーションライフサイクル制御、自動プロキシー検出、複数プロトコルサポートなどの追加機能を提供します。
HTTP コネクターおよび負荷分散ガイドでは、mod_proxy
および mod_cluster
コネクターをインストールして設定する方法について説明しています。このガイドでは、オンライン証明書ステータスプロトコル (OCSP) についての情報も提供し、基本的なロードバランシング と mod_auth_kerb を使用した Kerberos 認証 の動作例のセットも含まれています。
本ガイドのほとんどのファイルおよびディレクトリーパスは、Red Hat Enterprise Linux の JBoss Core Services のアーカイブインストール用です。その他のプラットフォームの場合は、JBoss Core Services インストールガイド の説明に従って、対象のインストールの正しいパスを使用します。
第2章 Apache Tomcat コネクター (mod_jk
) を使用した負荷分散
Apache Tomcat コネクター mod_jk
は、Apache HTTP Server が Web リクエストをバックエンドサーブレットコンテナーに転送できるようにするプラグインです。mod_jk
モジュールを使用すると、Apache HTTP Server は、スティッキーセッションを維持しながら、サーブレットコンテナーのセットへの要求を負荷分散することもできます。
2.1. Mod_jk
のインストール
mod_jk
モジュールは、JBoss Core Services インストールの Apache HTTP Server に含まれています。
Red Hat JBoss Core Services Apache HTTP Server インストールガイド の手順に従って、オペレーティングシステム用の Apache HTTP Server をダウンロードしてインストールできます。
2.2. mod_jk
を使用する場合の Apache HTTP Server 負荷分散設定
mod_jk
を使用して一連のサーブレットコンテナーへの要求を負荷分散するように Apache HTTP Server を設定できます。このセットアップには、バックエンドワーカーノードの設定が含まれます。
Red Hat JBoss Core Services は、mod_jk
のサンプル設定ファイルを JBCS_HOME/httpd/conf.d/
ディレクトリーに提供します。これらのサンプル設定ファイルの名前は、mod_jk.conf.sample
、workers.properties.sample
、および uriworkermap.properties.sample
です。独自の設定ファイルを作成する代わりにこれらの例を使用するには、.sample
拡張子を削除し、必要に応じてファイルの内容を変更します。
また、Red Hat Customer Portal の Load Balancer Configuration ツールを使用して、mod_jk
および Tomcat ワーカーノードに最適な設定テンプレートをすばやく生成することもできます。
JBoss Web Server 5.6 のロードバランサー設定ツールを使用する場合は、Apache バージョンとして 2.4.x
を選択し、バックエンド設定として Tomcat
を選択してください。
2.3. mod_jk
をロードするように Apache HTTP Server を設定する
mod_jk.conf
ファイルで設定設定を指定することにより、mod_jk
をロードするように Apache HTTP Server を設定できます。
次のオプションの設定手順を実行することもできます。
-
JkMount
ディレクティブの他に、JkMountFile
ディレクティブを使用してマウントポイントの設定ファイルを指定できます。設定ファイルには、Tomcat 転送の複数の URL マッピングが含まれます。 - ロードバランサーとして機能している Apache HTTP Server を設定して、要求を処理する各ワーカーノードの詳細をログに記録できます。これは、ロードバランサーのトラブルシューティングが必要な場合に役立ちます。
手順
-
JBCS_HOME/httpd/conf.d
ディレクトリーに移動します。 mod_jk.conf
という名前の新しいファイルを作成し、次の設定の詳細を入力します。# Load mod_jk module # Specify the filename of the mod_jk lib LoadModule jk_module modules/mod_jk.so # Where to find workers.properties JkWorkersFile conf.d/workers.properties # Where to put jk logs JkLogFile logs/mod_jk.log # Set the jk log level [debug/error/info] JkLogLevel info # Select the log format JkLogStampFormat "[%a %b %d %H:%M:%S %Y]" # JkOptions indicates to send SSL KEY SIZE JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories # JkRequestLogFormat JkRequestLogFormat "%w %V %T" # Mount your applications JkMount /application/* loadbalancer # Add shared memory. # This directive is present with 1.2.10 and # later versions of mod_jk, and is needed for # for load balancing to work properly JkShmFile logs/jk.shm # Add jkstatus for managing runtime data <Location /jkstatus/> JkMount status Require ip 127.0.0.1 </Location>
重要LoadModule
ディレクティブが、インストールしたmod_jk
ネイティブバイナリーを参照していることを確認します。注記JkMount
ディレクティブは、Apache HTTP Server がmod_jk
モジュールに転送できる URL を指定します。JkMount
ディレクティブの設定に基づいて、mod_jk
は受信した URL を正しいサーブレットコンテナーに転送します。Apache HTTP Server が静的コンテンツ (または PHP コンテンツ) を直接提供し、Java アプリケーションにのみロードバランサーを使用できるようにするには、前述の設定例では、Apache HTTP Server が URL
/application/*
のリクエストのみをmod_jk
ロードバランサーに送信するよう指定します。または、
JkMount
ディレクティブで/*
を指定して、すべての URL をmod_jk
に転送するように Apache HTTP Server を設定することもできます。オプション:
JkMountFile
ディレクティブを使用してマウントポイントの設定ファイルを指定するには、次の手順を実行します。-
JBCS_HOME/httpd/conf.d/
ディレクトリーに移動します。 -
uriworkermap.properties
という名前のファイルを作成します。 転送する URL とワーカー名を指定します。
以下に例を示します。
# Simple worker configuration file # Mount the Servlet context to the ajp13 worker /application=loadbalancer /application/*=loadbalancer
注記必要な構文は次の形式です:
/URL = WORKER_NAME
上記の例では、
/application
のリクエストを JBoss Web Server Tomcat バックエンドに転送するようにmod_jk
を設定しています。JBCS_HOME/httpd/conf.d/mod_jk.conf
ファイルで、次のディレクティブを入力します。# Use external file for mount points. # It will be checked for updates each 60 seconds. # The format of the file is: /url=worker # /examples/*=loadbalancer JkMountFile conf.d/uriworkermap.properties
-
オプション:Apache HTTP Server のログを有効にするには、次のいずれかの手順を実行します。
-
mod_jk.conf
設定に関する前の手順で示したように、JkRequestLogFormat
ディレクティブに%w
を含めます。 -
%{JK_WORKER_NAME}n
を Apache HTTP ServerLogFormat
(s) に含めて、使用するmod_jk
ワーカーの名前をログに記録します。
-
関連情報
2.4. mod_jk
でのワーカーノードの設定
複数のワーカーノードを設定して、Apache HTTP Server がサーブレットコンテナーに転送する要求を処理できます。
この手順の例では、2 つのサーブレットコンテナー間でスティッキーセッションを使用する加重ラウンドロビン設定で 2 つの mod_jk
ワーカーノードを定義する方法を示します。
前提条件
手順
-
JBCS_HOME/httpd/conf.d/
ディレクトリーに移動します。 -
workers.properties
という名前のファイルを作成します。 次の設定の詳細を入力します。
# Define list of workers that will be used # for mapping requests worker.list=loadbalancer,status # Define Node1 # modify the host as your host IP or DNS name. worker.node1.port=8009 worker.node1.host=node1.mydomain.com worker.node1.type=ajp13 worker.node1.ping_mode=A worker.node1.lbfactor=1 # Define Node2 # modify the host as your host IP or DNS name. worker.node2.port=8009 worker.node2.host=node2.mydomain.com worker.node2.type=ajp13 worker.node2.ping_mode=A worker.node2.lbfactor=1 # Load-balancing behavior worker.loadbalancer.type=lb worker.loadbalancer.balance_workers=node1,node2 worker.loadbalancer.sticky_session=1 # Status worker for managing load balancer worker.status.type=status
注記前の例で、
host
、port
、およびsecret
の設定を環境に適した値に置き換えてください。
2.5. mod_jk
と連携するように Tomcat を設定
Tomcat は、デフォルトで mod_jk
から Apache JServ Protocol (AJP) トラフィックを受信するように設定されています。ただし、mod_jk
でワーカーノードを使用する前に、追加の設定手順を 1 つ実行する必要があります。
AJP コネクターは JBCS_HOME/tomcat<VERSION>/conf/server.xml
ファイルにデフォルトで設定されます。
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
AJP 対応のコネクターに加えて、各ワーカーノードの Engine で jvmRoute
属性に一意の値を設定する必要もあります。
手順
各ワーカーノードのエンジンで
jvmRoute
属性の一意の値を設定するには、次の詳細を入力します。<Engine name="Catalina" jvmRoute="node1" >
重要jvmRoute
属性値が、workers.properties
ファイルで指定されているワーカー名と一致していることを確認してください。
第3章 JBoss HTTP コネクター (mod_cluster
) を使用した負荷分散
mod_cluster
コネクターは、JBoss EAP および JBoss Web Server Tomcat 向けの、設定が簡素化されたインテリジェントな負荷分散ソリューションです。mod_cluster
モジュールは、JBoss mod_cluster
コミュニティープロジェクトによって最初に開発された技術に基づいています。
3.1. JBoss HTTP コネクター (mod_cluster
)
mod_cluster
モジュールは、JBoss EAP および JBoss Web Server Tomcat ワーカーノードへの HTTP リクエストの負荷分散を行います。mod_cluster
モジュールは、プロキシーサーバーとして Apache HTTP Server を使用します。
mod_cluster
の主な機能
他の mod_jk
コネクターと比べて mod_cluster
コネクターには複数の利点があります。
-
mod_cluster
モジュールを有効にすると、mod_cluster
Management Protocol (MCMP) が Tomcat サーバーと Apache HTTP Server の間の追加接続となります。Tomcat サーバーは、MCMP を使用して、HTTP メソッドのカスタムセットを使用して、サーバー側の負荷数値とライフサイクルイベントを Apache HTTP Server に送信します。 -
Apache HTTP Server with
mod_cluster
の動的な設定により、mod_cluster
リスナーを持つ Tomcat サーバーは、手動で設定しなくても負荷分散配置に加わることができます。 - Tomcat サーバーは、Apache HTTP Server に依存せず、負荷計算を実行します。これにより、負荷分散メトリックが他のコネクターよりも正確になります。
-
mod_cluster
コネクターにより、アプリケーションライフサイクルを細かく制御できるようになります。各 Tomcat サーバーは、Web アプリケーションコンテキストのライフサイクルイベントを Apache HTTP Server に転送します。これらのライフサイクルイベントには、特定のコンテキストのルーティングリクエストを開始または停止するように Apache HTTP Server に通知することが含まれます。これにより、リソースが利用できないためにエンドユーザーに HTTP エラーが表示されるのを防ぎます。 -
mod_cluster
では、Apache JServ Protocol (AJP)、Hypertext Transfer Protocol (HTTP)、または Hypertext Transfer Protocol Secure (HTTPS) トランスポートを使用できます。
Mod_cluster
コンポーネント
プロキシーサーバーでは、mod_cluster
は 4 つの Apache モジュールで設定されます。
コンポーネント | 説明 |
---|---|
| Shared Memory Manager モジュールは、リアルタイムのワーカーノード情報を複数の Apache HTTP Server プロセスと共有します。 |
| Cluster Manager モジュールは、ノードの登録、ノードの負荷データ、ノードアプリケーションのライフサイクルイベントなど、ワーカーノードからメッセージを受信および確認します。 |
| Proxy Balancer モジュールは、クラスターノードへの要求ルーティングを処理します。Proxy Balancer は、クラスターのアプリケーションの場所、各クラスターノードの現在の状態、およびセッション ID (リクエストが確立されたセッションの一部である場合) に基づいて適切な宛先ノードを選択します。 |
| Proxy Advertisement Module は、UDP マルチキャストメッセージを介してプロキシーサーバーの存在をブロードキャストします。サーバーのアドバタイズメッセージには、負荷分散クラスターに参加するワーカーノードからの応答をプロキシーサーバーがリッスンしている IP アドレスとポート番号が含まれます。 |
3.2. mod_cluster
の文字制限
mod_cluster
モジュールは共有メモリーを使用してノードの説明を保持します。共有メモリーは Apache HTTP Server の起動時に作成され、各項目の構造は固定されます。
プロキシーサーバーとワーカーノードのプロパティーを定義するときは、次の文字制限を必ず守ってください。
プロパティー | 最大文字数制限 | 説明 |
---|---|---|
エイリアスの長さ | 100 文字 |
エイリアスは、それぞれの仮想ホストのネットワーク名に対応します。名前は |
コンテキストの長さ | 40 文字 |
たとえば、 |
バランサー名の長さ | 40 文字 |
これは |
| 80 文字 |
|
ドメイン名の長さ | 20 文字 |
これは |
ノードのホスト名の長さ | 64 文字 |
これは、 |
ノードのポート長 | 7 文字 |
これは、 |
ノードのスキームの長さ | 6 文字 |
これはコネクターのプロトコルです。可能な値は |
Cookie 名の長さ | 30 文字 |
これは、セッション ID のヘッダー Cookie 名です。デフォルト値は、 |
パス名の長さ | 30 文字 |
これは、セッション ID のパラメーター名です。デフォルト値は、 |
Session ID length | 120 文字 |
セッション ID の形式は次のとおりです。 |
3.3. Mod_cluster
インストール
mod_cluster
モジュールは、JBoss Core Services インストールの Apache HTTP Server に含まれています。
Red Hat JBoss Core Services Apache HTTP Server インストールガイド の手順に従って、オペレーティングシステム用の Apache HTTP Server をダウンロードしてインストールできます。
3.4. mod_cluster
を使用する場合の Apache HTTP Server 負荷分散設定
JBoss Web Server 2.1 以降では、デフォルトで Apache HTTP Server に対して mod_cluster
が正しく設定されます。カスタム設定の設定について詳しくは、基本プロキシーサーバー の設定を参照してください。
また、Red Hat Customer Portal の Load Balancer Configuration ツールを使用して、mod_cluster
および Tomcat ワーカーノードに最適な設定テンプレートをすばやく生成することもできます。
JBoss Web Server 5.6 のロードバランサー設定ツールを使用する場合は、Apache バージョンとして 2.4.x
を選択し、バックエンド設定として Tomcat
を選択してください。
3.5. 基本のプロキシーサーバーの設定
Web クライアントとバックエンド Web サーバーの間で要求と応答を転送するプロキシーサーバーとして機能するように Apache HTTP Server を設定できます。バックエンドのワーカーノードから接続要求と応答を受信するには、プロキシーサーバーリスナーを設定する必要があります。mod_cluster
を使用する負荷分散プロキシーサーバーを設定する場合は、管理チャネル用の仮想ホストも設定する必要があります。
前提条件
-
Apache HTTP Server をインストールし、インストール用に
mod_cluster
モジュールを設定しました。詳細は、Red Hat JBoss Core Services Apache HTTP Server インストールガイド を参照してください。 - プロキシーサーバーリスナーに指定するポートは、受信 TCP 接続用に開いている必要があります。
手順
mod_cluster
設定ファイルを開きます。注記通常、
mod_cluster
設定ファイルはJBCS_HOME/httpd/conf.d/mod_cluster.conf
ディレクトリーにあります。プロキシーサーバーの
Listen
ディレクティブを作成するには、mod_cluster.conf
ファイルに次の行を入力します。Listen IP_ADDRESS:PORT_NUMBER
注記上記の例では、プロキシーサーバーがワーカーノードと通信するために使うサーバーネットワークインターフェイスのアドレスに
IP_ADDRESS
をプロキシーサーバーがワーカーノードと通信するのに使うサーバーネットワークインターフェイスのアドレスに、をプロキシーサーバーがリッスンするポートに置き換えてください。PORT_NUMBER
をプロキシーサーバーがリッスンするポートに置き換えます。着信 TCP 接続用にポートが開いていることを確認します。
仮想ホストを作成するには、
mod_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_cluster
管理メッセージにのみ使用されます。このアドレスとポートの組み合わせは、一般的なトラフィックには使用されません。
mod_jk
の設定と Apache HTTP Server サービスの開始に関する詳細は、Red Hat JBoss Core Services Apache HTTP Server インストールガイド を参照してください。
3.5.1. サーバー広告の無効化
プロキシーサーバーは、UDP マルチキャストを使用して自身をアドバタイズします。AdvertiseFrequency
ディレクティブは、デフォルトでサーバー通知メッセージを 10 秒ごとに送信するようにサーバーに指示します。サーバー通知メッセージには、VirtualHost
定義で指定した IP_ADDRESS
と PORT_NUMBER
が含まれています。サーバーアドバタイズに応答するように設定されたワーカーノードは、この情報を使用してプロキシーサーバーに登録されます。ワーカーノードがプロキシーサーバーに登録されないようにする場合は、オプションでサーバーアドバタイズメントを無効にすることができます。
プロキシーサーバーとワーカーノードの間で UDP マルチキャストが使用可能な場合、サーバーアドバタイズメントは、プロキシーサーバーでさらに設定する必要なく、ワーカーノードを追加します。サーバーアドバタイズには、ワーカーノードでの最小限の設定のみが必要です。
前提条件
手順
mod_cluster
設定ファイルを開きます。注記通常、
mod_cluster
設定ファイルはJBCS_HOME/httpd/conf.d/mod_cluster.conf
ディレクトリーにあります。次のディレクティブを
VirtualHost
定義に追加します。ServerAdvertise Off
注記サーバーのアドバタイズが無効になっている場合や、UDP マルチキャストがプロキシーサーバーとワーカーノードの間のネットワークで利用できない場合、ワーカーノードをプロキシーサーバーの静的リストで設定します。いずれの場合も、ワーカーノードのリストを使用してプロキシーサーバーを設定する必要はありません。
3.5.2. ワーカーノードの詳細のログ記録
mod_cluster
を使用する負荷分散プロキシーサーバーを設定する場合、必要に応じて、要求を処理する各ワーカーノードの詳細をログに記録するように Apache HTTP Server を設定できます。ワーカーノードの詳細をログに記録すると、ロードバランサーのトラブルシューティングが必要な場合に役立ちます。
前提条件
手順
mod_cluster
設定ファイルを開きます。注記通常、
mod_cluster
設定ファイルはJBCS_HOME/httpd/conf.d/mod_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.6. mod_cluster
での Tomcat ワーカーノードの設定
mod_cluster
を使用すると、非クラスター化モードでのみ動作する JBoss Web Server Tomcat サービスとして Tomcat ワーカーノードを設定できます。この状況では、負荷分散係数を計算するときに一度に使用できる負荷メトリックは 1 つだけです。
JBoss Web Server Tomcat ワーカーノードは、mod_cluster
機能のサブセットのみをサポートします。完全な mod_cluster
機能は JBoss EAP で利用できます。
前提条件
手順
Tomcat にリスナーを追加するには、
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" />
ワーカーノードに一意の ID を与えるには、
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
注記Tomcat ワーカーノードは、現在の負荷ステータスを含むステータスメッセージを 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
を開きます。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"'
注記プロキシーサーバーが
mod_cluster
を使用する場合、プロキシーサーバーは UDP マルチキャストを使用して自身をアドバタイズできます。ほとんどのオペレーティングシステムのファイアウォールは、デフォルトでサーバーアドバタイズメント機能をブロックします。サーバーアドバタイズメントを有効にしてこれらのマルチキャストメッセージを受信するには、前述の例に示すように、ワーカーノードのファイアウォールで UDP 接続用にポート23364
を開くことができます。
Red Hat Enterprise Linux 6 はサポートされなくなり、その後ドキュメントから削除されました。
3.7. プロキシーサーバーの静的リストを操作するためのワーカーノードの設定
サーバーのアドバタイズにより、ワーカーノードをプロキシーサーバーで動的に検出し、登録することができます。UDP マルチキャストが利用できない場合、またはサーバーアドバタイズメントが無効になっている場合は、プロキシーサーバーのアドレスとポートの静的リストを使用して JBoss Web Server ワーカーノードを設定する必要があります。
前提条件
手順
-
JWS_HOME/tomcat<VERSION>/conf/server.xml
ファイルを開きます。 mod_cluster
リスナーを定義して動的プロキシー検出を無効にするには、ModClusterListener
のListener
要素を追加または変更します。以下に例を示します。
<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="false" stickySession="true" stickySessionForce="false" stickySessionRemove="true"/>
注記advertise
プロパティーをfalse
に設定していることを確認してください。静的プロキシーサーバーリストを作成するには、プロキシーのコンマ区切りリストを次の形式で追加して、
proxyList
プロパティーを更新します。IP_ADDRESS: ポート、IP_ADDRESS: ポート
以下に例を示します。
<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"/>
第4章 OCSP を使用した接続の保護
OCSP (Online Certificate Status Protocol) は、Web ブラウザーおよび Web サーバーがセキュアな接続上で通信できるようにする技術です。暗号化したデータは送信側から送信され、処理前に受信側で復号化されます。Web ブラウザーと Web サーバーは、データの暗号化および復号化を行います。
4.1. オンライン証明書ステータスプロトコル
Web ブラウザーと Web サーバーが保護された接続を介して通信する場合、サーバーは資格情報のセットを証明書の形式で提示します。次にブラウザーは証明書を検証し、証明書のステータス情報を求めるリクエストを送信します。サーバーは、現在、期限切れ、または不明の証明書ステータスで応答します。
証明書には、次の種類の情報が含まれています。
- 通信の構文
- Online Certificate Status Protocol (OCSP) レスポンダーにアクセスするための開始時刻、終了時刻、アドレス情報などの制御情報。
Web サーバーは、OCSP レスポンダーを使用して証明書のステータスを確認します。証明書にリストされている OCSP レスポンダーまたは別の OCSP レスポンダーを使用するように Web サーバーを設定できます。OCSP では、期限切れの証明書の猶予期間が許可されます。これにより、証明書更新前の限られた時間内でサーバーにアクセスできます。
OCSP は、証明書失効リスト (CRL) の古いメソッドの制限を解消します。
関連情報
4.2. SSL 接続用の Apache HTTP Server の設定
mod_ssl
パッケージをインストールし、ssl.conf
ファイルで設定設定を指定することにより、SSL 接続をサポートするように Apache HTTP Server を設定できます。
前提条件
- SSL 証明書と秘密鍵を生成しました。
- SSL 証明書と秘密鍵ファイルの場所を知っている。
- SSL 証明書に関連付けられている共通名 (CN) を取得しました。
手順
mod_ssl
をインストールするには、次のコマンドを入力します。# yum install jbcs-httpd24-mod_ssl
SSL 設定設定を指定するには:
-
JBCS_HOME/httpd/conf.d/ssl.conf
ファイルを開きます。 ServerName
、SSLCertificateFile
、およびSSLCertificateKeyFile
の詳細を入力します。以下に例を示します。
<VirtualHost _default_:443> ServerName www.example.com:443 SSLCertificateFile /opt/rh/jbcs-httpd24/root/etc/pki/tls/certs/localhost.crt SSLCertificateKeyFile /opt/rh/jbcs-httpd24/root/etc/pki/tls/private/localhost.key
注記-
ServerName
は、SSL 証明書に関連付けられている共通名 (CN) と一致する必要があります。ServerName
が CN に一致しない場合、クライアントブラウザーはドメイン名不一致エラーを表示します。 -
SSLCertificateFile
は、SSL 証明書ファイルへのパスを指定します。 -
SSLCertificateKeyFile
は、SSL 証明書に関連付けられている秘密鍵ファイルへのパスを指定します。
-
-
-
Listen
ディレクティブが、デプロイメントのhttpd
サービスのホスト名または IP アドレスと一致することを確認します。 Apache HTTP Server を再起動するには、次のコマンドを入力します。
# service jbcs-httpd24-httpd restart
4.3. Apache HTTP Server での OCSP の使用
Online Certificate Status Protocol (OCSP) を使用して、Apache HTTP Server との安全な接続を実現できます。
手順
認証局を設定します。
注記CA が OCSP 証明書を発行できることを確認します。CA は、次の属性を証明書に追加できる必要があります。
[ usr_cert ] ... authorityInfoAccess=OCSP;URI:http://<HOST>:<PORT> ... [ v3_OCSP ] basicConstraints = CA:FALSE keyUsage = nonRepudiation, digitalSignature, keyEncipherment extendedKeyUsage = OCSP Signing
前の例で、
HOST
とPORT
を、設定する OCSP レスポンダーの詳細に置き換えます。- OCSP レスポンダーを設定します。
関連情報
4.4. OCSP 証明書を検証する Apache HTTP Server の設定
ssl_conf
ファイルで OCSP 設定を定義することにより、OCSP 証明書を検証するように Apache HTTP Server を設定できます。
手順
-
JBCS_HOME/httpd/conf.d/ssl.conf
ファイルを開きます。 展開に適した OCSP 設定の詳細を指定します。
以下に例を示します。
# Require valid client certificates (mutual auth) SSLVerifyClient require SSLVerifyDepth 3 # Enable OCSP SSLOCSPEnable on SSLOCSPDefaultResponder http://<HOST>:<PORT> SSLOCSPOverrideResponder on
注記前の例は、クライアント証明書の OCSP 検証を有効にする方法を示しています。前の例で、
<HOST>
と<PORT>
をデフォルトの OCSP レスポンダーの IP アドレスとポートに置き換えます。
4.5. Apache HTTP Server の OCSP 設定の確認
OpenSSL コマンドラインツールを使用して、Apache HTTP Server の OCSP 設定を確認できます。
手順
コマンドラインで、
openssl
コマンドを次の形式で入力します。# openssl ocsp -issuer cacert.crt -cert client.cert -url http://HOST:PORT -CA ocsp_ca.cert -VAfile ocsp.cert
前述のコマンドで、次の詳細を指定していることを確認してください。
-
-issuer
オプションを使用して CA 証明書を指定します。 -
-cert
オプションを使用して、検証するクライアント証明書を指定します。 -
-url
オプションを使用して、HTTP サーバー検証証明書 (OCSP) を指定します。 -
-CA
オプションを使用して、Apache HTTP Server サーバー証明書を検証するための CA 証明書を指定します。 -
-VAfile
オプションを使用して、OCSP レスポンダー証明書を指定します。
-
第5章 mod_cluster
による負荷分散の設定例
Red Hat Enterprise Linux システムでの負荷分散に mod_cluster
コネクターを使用するように JBoss Core Services を設定できます。
mod_cluster
を使用する負荷分散ソリューションを設定する場合は、次のタスクを実行する必要があります。
5.1. JBoss Core Services をプロキシーサーバーとして設定する
mod_cluster
を使用するように JBoss Core Services を設定する場合、mod_cluster.conf
ファイルで設定の詳細を指定して、JBoss Core Services をプロキシーサーバーとして設定する必要があります。
手順
-
JBCS_HOME/httpd/conf.d/
ディレクトリーに移動します。 -
mod_cluster.conf
という名前のファイルを作成します。 次の設定の詳細を入力します。
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so LoadModule cluster_slotmem_module modules/mod_cluster_slotmem.so LoadModule manager_module modules/mod_manager.so LoadModule advertise_module modules/mod_advertise.so MemManagerFile cache/mod_cluster <IfModule manager_module> Listen 6666 <VirtualHost *:6666> <Directory /> Require ip 127.0.0.1 </Directory> ServerAdvertise on EnableMCPMReceive <Location /mod_cluster_manager> SetHandler mod_cluster-manager Require ip 127.0.0.1 </Location> </VirtualHost> </IfModule>
注記上記の例は、JBoss Core Services を
localhost
でリッスンするプロキシーサーバーとして設定する方法を示しています。
5.2. Tomcat ワーカーノードの設定
mod_cluster
を使用するように JBoss Core Services を設定する場合、server.xml
ファイルに Listener
要素を追加して、Tomcat ワーカーノードを設定する必要があります。
手順
-
JWS_HOME/tomcat<VERSION>/conf/server.xml
ファイルを開きます。 次の
Listener
要素を追加します。<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="true"/>
5.3. iptables ファイアウォールルールの定義の例
mod_cluster
を使用するように JBoss Core Services を設定する場合、iptables
を使用してファイアウォールルールを定義する必要があります。
前提条件
手順
iptables
を使用して、一連のファイアウォールルールを定義します。以下に例を示します。
/sbin/iptables -I INPUT 5 -p udp -d 224.0.1.0/24 -j ACCEPT -m comment --comment "mod_cluster traffic" /sbin/iptables -I INPUT 6 -p udp -d 224.0.0.0/4 -j ACCEPT -m comment --comment "JBoss Cluster traffic" /sbin/iptables -I INPUT 9 -p udp -s 192.168.1.0/24 -j ACCEPT -m comment --comment "cluster subnet for inter-node communication" /sbin/iptables -I INPUT 10 -p tcp -s 192.168.1.0/24 -j ACCEPT -m comment --comment "cluster subnet for inter-node communication" /etc/init.d/iptables save
注記前の例は、
192.168.1.0/24
サブネット上のクラスターノードのファイアウォール規則を定義することを示しています。
第6章 mod_auth_kerb
を使用した Kerberos 認証の設定例
JBoss Core Services Apache HTTP Server と Red Hat Enterprise Linux の mod_auth_kerb
モジュールで Kerberos 認証を設定できます。
Kerberos 認証を設定する場合は、次のタスクを実行する必要があります。
6.1. 前提条件
-
Generic Security Services (GSS) ネゴシエーションサポートを使用して
curl
コマンドラインユーティリティーをインストールしました。 - JBoss Core Services と同じホスト上で ApacheDS などの Kerberos または LDAP サーバーを設定して実行しました。
LDAP サーバーを使用している場合は、
krbtgt
、ldap
、HTTP
という名前の LDAP ユーザーと、hnelson
という名前のテスト LDAP ユーザーを作成済みです。krbtgt
ユーザーを作成するには、次の詳細を入力します。dn: uid=krbtgt,ou=Users,dc=example,dc=com objectClass: top objectClass: person objectClass: inetOrgPerson objectClass: krb5principal objectClass: krb5kdcentry cn: KDC Service sn: Service uid: krbtgt userPassword: secret krb5PrincipalName: krbtgt/EXAMPLE.COM@EXAMPLE.COM krb5KeyVersionNumber: 0
LDAP
ユーザーを作成するには、次の詳細を入力します。dn: uid=ldap,ou=Users,dc=example,dc=com objectClass: top objectClass: person objectClass: inetOrgPerson objectClass: krb5principal objectClass: krb5kdcentry cn: LDAP sn: Service uid: ldap userPassword: randall krb5PrincipalName: ldap/localhost@EXAMPLE.COM krb5KeyVersionNumber: 0
HTTP
ユーザーを作成するには、次の詳細を入力します。dn: uid=HTTP,ou=Users,dc=example,dc=com objectClass: top objectClass: person objectClass: inetOrgPerson objectClass: krb5principal objectClass: krb5kdcentry cn: HTTP sn: Service uid: HTTP userPassword: secretpwd krb5PrincipalName: HTTP/localhost@EXAMPLE.COM krb5KeyVersionNumber: 0
テストユーザー
hnelson
を作成するには、次の詳細を入力します。dn: uid=hnelson,ou=Users,dc=example,dc=com objectClass: top objectClass: person objectClass: inetOrgPerson objectClass: krb5principal objectClass: krb5kdcentry cn: Horatio Nelson sn: Nelson uid: hnelson userPassword: secret krb5PrincipalName: hnelson@EXAMPLE.COM krb5KeyVersionNumber: 0
6.2. Kerberos クライアントの設定
Kerberos 認証を設定するときは、次の手順を実行して Kerberos クライアントを設定する必要があります。
-
krb5.conf
ファイルで設定設定を指定します。 -
JBCS_HOME/httpd/conf
ファイルにキータブを作成します。 - キータブにアクセス許可を割り当てます。
-
/etc/hosts
ファイルにlocalhost
が含まれていることを確認します。
前提条件
- Kerberos 認証を設定するためのすべての前提条件 に準拠しています。
手順
krb5.conf
ファイルで設定設定を指定するには、次のようにします。-
/etc
ディレクトリーに移動します。 -
krb5.conf
という名前のファイルを作成します。 次の設定の詳細を入力します。
[logging] default = FILE:/var/log/krb5libs.log kdc = FILE:/var/log/krb5kdc.log admin_server = FILE:/var/log/kadmind.log [libdefaults] default_realm = EXAMPLE.COM default_tgs_enctypes = des-cbc-md5,des3-cbc-sha1-kd default_tkt_enctypes = des-cbc-md5,des3-cbc-sha1-kd dns_lookup_realm = false dns_lookup_kdc = false allow_weak_crypto = yes ticket_lifetime = 24h renew_lifetime = 7d forwardable = yes [realms] EXAMPLE.COM = { kdc = localhost:60088 admin_server = localhost:60088 } [domain_realm] .example.com = EXAMPLE.COM example.com = EXAMPLE.COM
-
キータブを作成するには:
-
JBCS_HOME/httpd/conf
ファイルを開きます。 以下の詳細を入力します。
# ktutil ktutil: addent -password -p HTTP/localhost@EXAMPLE.COM -k 0 -e des-cbc-md5 Password for HTTP/localhost@EXAMPLE.COM: secretpwd ktutil: list slot KVNO Principal ---- ---- --------------------------------------------------------------------- 1 0 HTTP/localhost@EXAMPLE.COM ktutil: wkt JBCS_HOME/httpd/conf/krb5.keytab ktutil: quit
重要環境変数は
ktutil
プロンプト内では拡張されません。JBCS_HOME
変数を絶対パスに置き換える必要があります。
-
正しいグループと権限をキータブに適用するには、root ユーザーとして次のコマンドを入力します。
# chgrp apache JBCS_HOME/httpd/conf/krb5.keytab # chmod 640 JBCS_HOME/httpd/conf/krb5.keytab
以下のホスト設定が
/etc/hosts
ファイルに含まれていることを確認します。127.0.0.1 localhost
6.3. mod_auth_kerb の設定
Kerberos 認証を設定する場合、auth_kerb.conf
ファイルで設定を指定して mod_auth_kerb
を設定する必要があります。
前提条件
手順
-
JBCS_HOME/httpd/conf.d/
ディレクトリーに移動します。 -
auth_kerb.conf
という名前のファイルを作成します。 次の設定の詳細を入力します。
# # The mod_auth_kerb module implements Kerberos authentication over HTTP, following the "Negotiate" protocol. # # The LoadModule statement is done in conf.d/10-auth_kerb.conf # LoadModule auth_kerb_module modules/mod_auth_kerb.so <Location /kerberostest> AuthType Kerberos AuthName "Kerberos Login" KrbMethodNegotiate On KrbMethodK5Passwd Off KrbAuthRealms EXAMPLE.COM KrbServiceName HTTP Krb5KeyTab $JBCS_HOME/httpd/krb5.keytab require valid-user </Location>
環境変数は、設定ファイル内で拡張されません。前の例では、JBCS_HOME
変数を絶対パスに置き換えてください。
6.4. Kerberos 認証のテスト
Kerberos 認証を設定する場合、テストページを使用して Kerberos 認証をテストできます。
前提条件
-
mod_auth_kerb
を設定しました。
手順
テストページを作成するには、次の手順を実行します。
-
JBCS_HOME/httpd/www/html/kerberostest
ディレクトリーに移動します。 -
auth_kerb_page.html
という名前のテストページを作成します。 以下の詳細を入力します。
<html> <body> <h1>mod_auth_kerb successfully authenticated!</h1> </body> </html>
-
-
オプション:
JBCS_HOME/httpd/conf/httpd.conf
ファイルで、ログレベルをデバッグに設定します。 - Apache HTTP Server を起動します。詳細は、Red Hat JBoss Core Services Apache HTTP Server インストールガイド を参照してください。
テストユーザー
hnelson
の Kerberos 認証を開始するには、次のコマンドを入力します。$ kinit hnelson
テストユーザー
hnelson
の詳細を表示するには、次のコマンドを入力します。$ klist
klist
コマンドは、次のタイプの出力を生成します。Ticket cache: FILE:/tmp/krb5cc_18602 Default principal: hnelson@EXAMPLE.COM Valid starting Expires Service principal 06/03/13 14:21:13 06/04/13 14:21:13 krbtgt/EXAMPLE.COM@EXAMPLE.COM renew until 06/10/13 14:21:13
検証
Kerberos 認証をテストするには、次のコマンドを入力します。
$ curl --negotiate -u : http://localhost/kerberostest/auth_kerb_page.html
Kerberos 認証が正しく機能している場合、
curl
コマンドは次の出力を生成します。<html> <body> <h1>mod_auth_kerb successfully authenticated!</h1> </body> </html>
6.5. 関連情報 (または次の手順)
付録A Apache HTTP Server プロキシーモジュール
このセクションには、mod_cluster
に含まれる Apache HTTP Server プロキシーモジュールの拡張定義が含まれています。
A.1. Mod_manager
モジュールとディレクティブ
クラスターマネージャーモジュール mod_manager
は、ワーカーノードの登録、ワーカーノードの負荷データ、およびワーカーノードのアプリケーションのライフサイクルイベントなどのノードからメッセージを受信および確認します。
LoadModule manager_module modules/mod_manager.so
mod_manager
の設定可能なディレクティブ
<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.2. Mod_proxy_cluster
モジュールとディレクティブ
プロキシーロードバランサーモジュール mod_proxy_cluster
は、クラスターノードへの要求のルーティングを処理します。プロキシーバランサーは、クラスターのアプリケーションの場所、各クラスターノードの現在の状態、およびセッション ID (要求が確立されたセッションの一部である場合) に基づいて要求を転送するために適切なノードを選択します。
LoadModule proxy_cluster_module modules/mod_proxy_cluster.so
mod_proxy_cluster
の設定可能なディレクティブ
<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.3. Mod_advertise
モジュールとディレクティブ
mod_advertise
は、UDP マルチキャストメッセージを介してプロキシーサーバーの存在をブロードキャストします。サーバーのアドバタイズメッセージには、プロキシーが負荷分散クラスターに参加するノードからの応答をリッスンする IP アドレスとポート番号が含まれます。
mod_advertise
モジュールは、VirtualHost
要素で mod_manager
モジュールと共に定義する必要があります。次の例では、mod_advertise
モジュールの識別子は ads_module
です。
LoadModule advertise_module modules/mod_advertise.so
mod_advertise
の設定可能なディレクティブ
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.4. Mod_proxy
モジュールとディレクティブ
mod_proxy
モジュールは、サーバーが Apache JServ Protocol (AJP)、FTP、CONNECT (SSL 用)、および HTTP プロトコルを介して転送されるデータのプロキシーとして機能できるようにする、標準の Apache HTTP Server モジュールです。mod_proxy
モジュールには、追加の設定は必要ありません。mod_proxy
モジュールの識別子は proxy_module
です。
ProxyIOBufferSize
などの mod_proxy
の設定可能なディレクティブは、mod_cluster
モジュールの設定に使用されます。
A.5. Mod_proxy_ajp
モジュールとディレクティブ
mod_proxy_ajp
モジュールは、Apache JServ Protocol (AJP) プロキシーのサポートを提供する標準の Apache HTTP Server モジュールです。mod_proxy_ajp
を使用する場合は、mod_proxy
モジュールも必要です。
A.6. Mod_cluster_slotmem
モジュールとディレクティブ
mod_cluster_slotmem
モジュールは、データセットがスロットに編成されている共有メモリーセグメントを作成してアクセスするための共有メモリープロバイダーです。
mod_cluster_slotmem
モジュールには、設定ディレクティブは必要ありません。
付録B Workers.properties
ファイル
Apache HTTP Server ワーカーノードは、mod_jk
ロードバランサーにマップされるサーブレットコンテナーです。ワーカーノードは JBCS_HOME/httpd/conf/workers.properties
で定義されます。このファイルは、異なるサーブレットコンテナーの場所と、全体で呼び出しが負荷分散される方法を指定します。
B.1. Workers.properties
の概要
workers.properties
ファイルには、グローバルプロパティーセクションとワーカープロパティーセクションが含まれています。
- グローバルプロパティー
- このセクションには、すべてのワーカーに適用されるディレクティブが含まれます。
- ワーカープロパティー
- このセクションには、各ワーカーに適用されるディレクティブが含まれます。
各ノードはワーカープロパティーの命名規則を使用して定義されます。ワーカー名には、小文字、大文字、数字、および特定の特殊文字 (_
、/
) のみを含めることができます。
worker プロパティーの構造は worker.WORKER_NAME.DIRECTIVE
です。
worker
- すべてのワーカープロパティーの定数接頭辞。
WORKER_NAME
-
ワーカーに指定された任意の名前。たとえば、
node1
、node_01
、Node_1
など。 DIRECTIVE
- 必要な特定のディレクティブ。
B.2. Workers.properties
ディレクティブ
workers.properties
ファイルのディレクティブは、グローバル、必須、接続、および負荷分散の分類に分けられます。
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 台のサーバーに永続化されます (そのサーバーが使用可能な場合)。
付録C ワーカーノード設定
設定値は、以下の条件下でプロキシーに送信されます。
- サーバーの起動時。
- プロキシーがアドバタイズメカニズムで検出される場合。
- エラーが発生すると、プロキシーの設定がリセットされます。
値 | デフォルト | 説明 |
---|---|---|
| true | あるセッションの後続リクエストを可能な限り同じノードへルーティングするべきかどうかを指定します。 |
| false |
バランサーがリクエストをスタックしたノードへルーティングできない場合、Apache HTTP Server プロキシーがセッションのスティッキネスを削除するかどうかを指定します。 |
| true |
バランサーがリクエストをスタックしたノードへルーティングできない場合、Apache HTTP Server プロキシーがエラーを返すかどうかを指定します。 |
| -1 |
リクエストを処理するためにワーカーが利用可能になるまで待機する秒数を指定します。バランサーのすべてのワーカーが使用できなくなると、しばらく ( |
| 1 |
Apache HTTP Server プロキシーがワーカーに指定のリクエストの送信を試みる回数を指定します。この回数試行した後に送信を断念します。最小値は |
| false | パケットのフラッシュが有効または無効化されるかどうかを指定します。 |
| -1 |
パケットをフラッシュするまでの待機時間を指定します。 |
| 10 | ping に対する pong 応答を待つ時間 (秒単位)。 |
|
soft maximum アイドル接続数 を指定します。最大値は Apache HTTP Server スレッド設定 ( | |
| 60 |
|
| -1 |
エラーを返す前に、バックエンドサーバーの応答を待つ時間 (秒単位) の mod_cluster を指定します。mod_cluster は、リクエストを転送する前に常に |
| mycluster | ロードバランサーの名前を指定します。 |
|
同じ負荷分散グループ内の |
付録D Mod_cluster
Proxy および Proxy Discovery 設定属性
以下の表には、mod_cluster
プロキシーおよびプロキシー検出設定属性の属性および情報が含まれます。
属性 | プロパティー | デフォルト値 |
---|---|---|
proxy-list |
| |
proxy-url |
| |
advertise |
| true |
advertise-security-key |
| |
excluded-contexts |
| |
auto-enable-contexts |
| true |
stop-context-timeout |
| 10 秒 (秒単位) |
socket-timeout |
| 20 秒 (ミリ秒単位) |
nodeTimeout
が定義されていない場合は、ProxyTimeout
ディレクティブ Proxy
が使用されます。ProxyTimeout
が定義されていない場合は、サーバーのタイムアウト (Timeout
) が使用されます (JBCS httpd.conf ではデフォルトで 120 秒)。nodeTimeout
、ProxyTimeout
、Timeout
はソケットレベルで設定されます。
属性 | プロパティー | デフォルト値 |
---|---|---|
sticky-session |
| true |
sticky-session-remove |
| false |
sticky-session-force |
| true |
node-timeout |
| -1 |
max-attempts |
| 1 |
flush-packets |
| false |
flush-wait |
| -1 |
ping |
| 10 (秒) |
smax |
| -1 (デフォルト値を使用) |
ttl |
| -1 (デフォルト値を使用) |
domain |
| |
load-balancing-group |
|
付録E Tomcat の負荷設定
Apache Tomcat で mod_cluster
を使用する場合は、負荷メトリックの次の追加プロパティーを設定できます。
属性 | デフォルト値 | 説明 |
---|---|---|
loadMetricClass |
|
|
loadMetricCapacity | 1 |
|
loadHistory | 9 | 負荷分散係数の計算で考慮する必要のある、過去の負荷値の数。 |
loadDecayFactor | 2 | この値で過去の負荷値が減少されます。 |