Apache HTTP Server コネクターおよび負荷分散ガイド
Red Hat JBoss Core Services 2.4.37 での使用
概要
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のすべての機能と、リアルタイムの負荷分散計算、アプリケーションライフサイクル制御、自動プロキシー検出、複数プロトコルサポートなどの追加機能を提供します。
Apache HTTP Server コネクターおよび負荷分散ガイドでは、mod_proxy および mod_cluster コネクターをインストールして設定する方法について説明しています。このガイドでは、オンライン証明書ステータスプロトコル (OCSP) についての情報も提供し、基本的なロードバランシング と mod_auth_kerb を使った Kerberos 認証 の動作例のセットも含まれています。
本ガイドのほとんどのファイルおよびディレクトリーパスは、Red Hat Enterprise Linux の JBoss Core Services のアーカイブインストール用です。その他のプラットフォームの場合は、JBoss Core Services インストールガイド の説明に従って、対象のインストールの正しいパスを使用します。
Red Hat Enterprise Linux 6 はサポートされなくなり、その後ドキュメントから削除されました。
第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 ワーカーノードに最適な設定テンプレートをすばやく生成することもできます。
Apache HTTP Server 2.4.37 のロードバランサー設定ツールを使用する場合は、Apache バージョンに 2.4.x を、バックエンド設定に Tomcat を選択してください。
Apache HTTP Server (httpd) が Red Hat Enterprise Linux 8 にインストールされている場合には、Base オペレーティングシステムモジュールは /usr/lib64/httpd/modules ディレクトリーにあります。Red Hat JBoss Core Services モジュールは現在、/opt/rh/jbcs/root/usr/lib64/httpd/modules ディレクトリーにあります。
Red Hat JBoss Core Services モジュールには、mod_jk、mod_cluster、mod_rt、および mod_bmx が含まれます。これらのモジュールは、命名、ディレクトリー、および接頭辞に関するすべての Red Hat JBoss Core Services ルールに従います。これらのモジュールを使用する場合は、設定ファイルを作成または修正して、LoadModule コマンドを追加します。以下に例を示します。
LoadModule jk_module /opt/rh/jbcs/root/usr/lib64/httpd/modules/mod_jk.so
または、インストール済みの Red Hat JBoss Core Services モジュールのディレクトリーを JBCS_HOME/httpd/conf.d ディレクトリーに含めることもできます。
JBoss Core Services と Red Hat Enterprise Linux で提供される httpd 実装には以下の相違点があるので考慮してください。
-
JBoss Core Services
httpdは、アーカイブファイルまたは RPM パッケージからインストールできます。 -
JBoss Core Services
httpdは、Windows Server 環境にインストールすることもできます。 -
JBoss Core Services
httpdはmod_phpモジュールを提供しておらず、サポートもしていません。Red Hat Enterprise Linuxhttpdはmod_phpモジュールをサポートしています。 -
JBoss Core Services の
httpdは、mod_jkおよびmod_clusterロードバランサーモジュールを提供します。Red Hat Enterprise Linuxhttpdではmod_jkおよびmod_clusterモジュールは提供されません。
JBoss Core Services httpd のユースケースとして、プロキシーを使用したバックエンドへの接続が挙げられます。mod_jk、mod_proxy_cluster、または mod_proxy をプロキシーとして使用できます。Red Hat JBoss Core Services と Red Hat Enterprise Linux が提供する httpd 実装では、これらのモジュールに違いはありません。
2.4.37 Service Pack 10 リリース以降、Red Hat JBoss Core Services では、バックエンドの Websocket サーバーに対する接続がアップグレードされていない場合に、その接続のトンネリングはサポートされません。つまり、mod_proxy_wstunnel モジュールの ProxyPass ディレクティブを設定するときに、アップグレードパラメーターが NONE に設定されていないことを確認する必要があります。mod_proxy_wstunnel の詳細は、Apache のドキュメント を参照してください。
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 worker.node1.secret=<YourSecret> # 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 worker.node1.secret=<YourSecret> # 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の設定を環境に適した値に置き換えてください。重要secretプロパティーは Tomcat AJP コネクターを使用する場合に必要になります。ワーカーノードまたはロードバランサーのシークレットプロパティーは、workers.propertiesファイルで指定できます。以下に例を示します。worker.<WORKER_NAME>.secret=<YOUR_AJP_SECRET>前の例で、
<WORKER_NAME>と<YOUR_AJP_SECRET>を環境に適した値に置き換えます。
2.5. mod_jk と連携するように Tomcat を設定 リンクのコピーリンクがクリップボードにコピーされました!
Tomcat は、デフォルトで mod_jk から Apache JServ Protocol (AJP) トラフィックを受信するように設定されています。ただし、mod_jk でワーカーノードを使用する前に、以下の追加の設定手順を実行する必要があります。
- AJP コネクターを設定します。AJP コネクターはデフォルトで設定されていません。
-
各ワーカーノードの Engine で
jvmRoute属性に一意の値を設定します。 -
ワーカーノードまたはロードバランサーの
secretプロパティーを指定します。secretプロパティーは Tomcat AJP コネクターを使用する場合に必要になります。
手順
AJP コネクターを設定するには、次の手順を実行します。
-
JBCS_HOME/tomcat<VERSION>/conf/server.xmlファイルを開きます。 server.xmlファイルに、次の行を入力します。<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
-
各ワーカーノードのエンジンで
jvmRoute属性の一意の値を設定するには、次の詳細を入力します。<Engine name="Catalina" jvmRoute="node1" >重要jvmRoute属性値が、workers.propertiesファイルで指定されているワーカー名と一致していることを確認してください。ワーカーノードまたはロードバランサーの
secretプロパティーを指定するには、次の手順を実行します。-
JBCS_HOME/httpd/conf.d/workers.propertiesファイルを開きます。 workers.propertiesファイルで、secretプロパティーが次の形式で指定されていることを確認します。worker.<WORKER_NAME>.secret=<YOUR_AJP_SECRET>`注記<WORKER_NAME>と<YOUR_AJP_SECRET>は、ご使用の環境に適した値に置き換えてください。注記ProxyPassディレクティブを使用してロードバランサーにsecretを設定すると、そのすべてのメンバーがこのsecretを継承します。以下に例を示します。<Proxy balancer://mycluster>` BalancerMember ajp://node1:8009 route=node1 secret=YOUR_AJP_SECRET BalancerMember ajp://node2:8009 route=node2 secret=YOUR_AJP_SECRET </Proxy> ProxyPass /example/ balancer://mycluster/example/ stickysession=JSESSIONID|jsessionid
-
第3章 JBoss HTTP コネクター (mod_cluster) を使用した負荷分散 リンクのコピーリンクがクリップボードにコピーされました!
mod_cluster コネクターは、JBoss EAP および Apache HTTP Server Tomcat 向けの、設定が簡素化されたインテリジェントな負荷分散ソリューションです。mod_cluster モジュールは、JBoss mod_cluster コミュニティープロジェクトによって最初に開発された技術に基づいています。
3.1. JBoss HTTP コネクター (mod_cluster) リンクのコピーリンクがクリップボードにコピーされました!
mod_cluster モジュールは、JBoss EAP および Apache HTTP Server Tomcat ワーカーノードへの HTTP リクエストの負荷分散を行います。mod_cluster モジュールは、プロキシーサーバーとして Apache HTTP Server を使用します。
mod_cluster の主な機能
他の mod_jk コネクターと比べて mod_cluster コネクターには複数の利点があります。
-
mod_clusterモジュールを有効にすると、mod_clusterManagement 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 負荷分散設定 リンクのコピーリンクがクリップボードにコピーされました!
Apache HTTP Server 2.1 以降では、デフォルトで Apache HTTP Server に対して mod_cluster が正しく設定されます。カスタム設定の設定について詳しくは、基本プロキシーサーバー の設定を参照してください。
また、Red Hat Customer Portal の Load Balancer Configuration ツールを使用して、mod_cluster および Tomcat ワーカーノードに最適な設定テンプレートをすばやく生成することもできます。
Apache HTTP Server 2.4.37 のロードバランサー設定ツールを使用する場合は、Apache バージョンに 2.4.x を、バックエンド設定に Tomcat を選択してください。
Apache HTTP Server (httpd) が Red Hat Enterprise Linux 8 にインストールされている場合には、Base オペレーティングシステムモジュールは /usr/lib64/httpd/modules ディレクトリーにあります。Red Hat JBoss Core Services モジュールは現在、/opt/rh/jbcs/root/usr/lib64/httpd/modules ディレクトリーにあります。
Red Hat JBoss Core Services モジュールには、mod_jk、mod_cluster、mod_rt、および mod_bmx が含まれます。これらのモジュールは、命名、ディレクトリー、および接頭辞に関するすべての Red Hat JBoss Core Services ルールに従います。これらのモジュールを使用する場合は、設定ファイルを作成または修正して、LoadModule コマンドを追加します。以下に例を示します。
LoadModule jk_module /opt/rh/jbcs/root/usr/lib64/httpd/modules/mod_jk.so
または、インストール済みの Red Hat JBoss Core Services モジュールのディレクトリーを JBCS_HOME/httpd/conf.d ディレクトリーに含めることもできます。
-
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エラー応答を送信します。
2.4.37 Service Pack 10 リリース以降、Red Hat JBoss Core Services では、バックエンドの WebSocket サーバーに対する接続がアップグレードされていない場合に、その接続のトンネリングはサポートされません。つまり、mod_proxy_wstunnel モジュールの ProxyPass ディレクティブを設定するときに、アップグレードパラメーターが NONE に設定されていないことを確認する必要があります。mod_proxy_wstunnel の詳細は、Apache のドキュメント を参照してください。
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 を使用すると、クラスターリングモード以外でのみ動作する Apache HTTP Server Tomcat サービスとして Tomcat ワーカーノードを設定できます。この状況では、負荷分散係数を計算するときに一度に使用できる負荷メトリックは 1 つだけです。
Apache HTTP 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-frequencyJava システムプロパティーを変更します。以下に例を示します。
-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-frequencyJava システムプロパティーを変更します。デフォルトでは、プロパティーは秒単位で指定された値を 10 倍して受け入れます。たとえば、プロパティーを1に設定すると 10 秒になります。前の例では、プロパティーは6に設定されており、これは 60 秒を意味します。オプション: プロキシーサーバーのアドバタイズ用にファイアウォールを設定するには、次のいずれかの手順を実行して、ワーカーノードのファイアウォールで UDP 接続用のポート
23364を開きます。Red Hat Enterprise Linux 7 の場合
firewall-cmd --permanent --zone=public --add-port=23364/udpPowerShell を使用する 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 マルチキャストが利用できない場合、またはサーバーアドバタイズメントが無効になっている場合は、プロキシーサーバーのアドレスとポートの静的リストを使用して Apache HTTP 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に設定していることを確認してください。静的プロキシーサーバーリストを作成するには、プロキシーのコンマ区切りリストを、
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"/>
第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_sslSSL 設定設定を指定するには:
-
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: 0LDAPユーザーを作成するには、次の詳細を入力します。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: 0HTTPユーザーを作成するには、次の詳細を入力します。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の詳細を表示するには、次のコマンドを入力します。$ klistklistコマンドは、次のタイプの出力を生成します。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.htmlKerberos 認証が正しく機能している場合、
curlコマンドは次の出力を生成します。<html> <body> <h1>mod_auth_kerb successfully authenticated!</h1> </body> </html>
付録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-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.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 モジュールの識別子は advertise_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
-
Apache HTTP Server で
mod_clusterを識別するために使用される文字列を定義します。デフォルトでは、このディレクティブは設定されず、情報は送信されません。 - AdvertiseManagerUrl
- ワーカーノードが情報をプロキシーサーバーに送信するために使用する URL を定義します。デフォルトでは、このディレクティブは設定されず、情報は送信されません。
- AdvertiseBindAddress
-
マルチキャストメッセージを送信するアドレスとポートを定義します。構文は
AdvertiseBindAddress ADDRESS:PORTです。これにより、複数の IP アドレスを持つマシンにアドレスを指定できます。デフォルト値は0.0.0.0:23364です。
A.4. Mod_proxy モジュールとディレクティブ リンクのコピーリンクがクリップボードにコピーされました!
mod_proxy モジュールは、サーバーが AJP (Apache JServ Protocol)、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 は、AJP (Apache JServe Protocol) プロキシーのサポートを提供する標準の Apache HTTP Server モジュールです。mod_proxy_ajp を使用する場合は、mod_proxy モジュールも必要です。また、secret プロパティーは Tomcat AJP コネクターを使用する場合に必要になります。secret プロパティーは、以下のコマンドを使用して ProxyPass 設定に追加できます。
ProxyPass /example/ ajp://localhost:8009/example/ secret=YOUR_AJP_SECRET
ロードバランサーに secret を設定すると、そのすべてのメンバーがこの secret を継承します。
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 マルチプロセッシングモジュール (MPM) リンクのコピーリンクがクリップボードにコピーされました!
Red Hat JBoss Core Services には、さまざまなマルチプロセッシングモジュール (MPM) が含まれています。これらの MPM を使用して、Apache HTTP Server が着信要求に応答する方法をカスタマイズできます。
C.1. MPM の概要 リンクのコピーリンクがクリップボードにコピーされました!
マルチプロセッシングモジュール (MPM) は、Red Hat Enterprise Linux と Microsoft Windows の両方で利用できます。
MPM for Red Hat Enterprise Linux
prefork-
preforkMPM は、スレッド化前の Web サーバーを実装します。単一のコントロールプロセスは、内向きの接続をリッスンし、到達したときにサービスをリッスンする子プロセスを起動します。各リクエストは 1 つのプロセスで処理されます。また、各リクエストが分離され、他のリクエストには影響がありません。 worker-
workerMPM はハイブリッドマルチプロセス、マルチスレッドサーバーを実装します。各子プロセスにより、決まった数のサーバースレッドが作成され、サーバーは少ないシステムリソースで多数の要求を処理できます。 event-
eventMPM は、workerMPM に基づいています。ただし、一部の処理をリスナースレッドに渡して追加のリクエストを同時に処理することができます。そのため、ワーカースレッドを解放して新しいリクエストを提供します。
MPM for Microsoft Windows
winnt-
winntMPM は、Windows システムに利用可能なもののみです。これは、受信リクエストのスレッドを作成するために使用される単一のプロセスを起動する単一の制御プロセスを使用します。
C.2. MPM の切り替え リンクのコピーリンクがクリップボードにコピーされました!
サーバーは、JBCS_HOME/httpd/conf.modules.d/00-mpm.conf ファイルにある LoadModule ディレクティブに基づいて MPM を選択します。00-mpm.conf ファイルにある対象の MPM の LoadModule ディレクティブからコメント文字 (#) を削除することにより、特定の MPM を選択できます。
デフォルトでは、prefork MPM が選択されています。以下に例を示します。
# prefork MPM: Implements a non-threaded, pre-forking web server
# See: http://httpd.apache.org/docs/2.4/mod/prefork.html
LoadModule mpm_prefork_module modules/mod_mpm_prefork.so
手順
JBCS_HOME/httpd/conf.modules.d/00-mpm.confを編集して、preforkMPM のLoadModuleディレクティブにコメント (#) 文字を追加します。以下に例を示します。# prefork MPM: Implements a non-threaded, pre-forking web server # See: http://httpd.apache.org/docs/2.4/mod/prefork.html #LoadModule mpm_prefork_module modules/mod_mpm_prefork.so同じ
00-mpm.confファイルで、切り替え先の MPM のLoadModuleディレクティブからコメント (#) 文字を削除します。これらの行は、preforkMPM のすぐ下にあります。たとえば、
workerMPM をロードするには、workerMPM のLoadModuleディレクティブからコメント (#) 文字を削除します。# worker MPM: Multi-Processing Module implementing a hybrid # multi-threaded multi-process web server # See: http://httpd.apache.org/docs/2.4/mod/worker.html LoadModule mpm_worker_module modules/mod_mpm_worker.soMPM が正しく設定されていることを確認するには、次のコマンドを入力します。
$ sbin/apachectl -Vこのコマンドは、現在の MPM を表示します。以下に例を示します。
Server MPM: worker
付録D ワーカーノード設定 リンクのコピーリンクがクリップボードにコピーされました!
設定値は、以下の条件下でプロキシーに送信されます。
- サーバーの起動時。
- プロキシーがアドバタイズメカニズムで検出される場合。
- エラーが発生すると、プロキシーの設定がリセットされます。
| 値 | デフォルト | 説明 |
|---|---|---|
|
| 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 | ロードバランサーの名前を指定します。 |
|
|
同じ負荷分散グループ内の |
付録E 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 |
|
付録F Tomcat の負荷設定 リンクのコピーリンクがクリップボードにコピーされました!
Apache Tomcat で mod_cluster を使用する場合は、負荷メトリックの次の追加プロパティーを設定できます。
| 属性 | デフォルト値 | 説明 |
|---|---|---|
| loadMetricClass |
|
|
| loadMetricCapacity | 1 |
|
| loadHistory | 9 | 負荷分散係数の計算で考慮する必要のある、過去の負荷値の数 |
| loadDecayFactor | 2 | これまでの負荷値を若干減少させる係数 |