2.2. mod_jk を使用する場合の Apache HTTP Server 負荷分散設定
Apache HTTP Server は、mod_jk
コネクターを使用してリクエストを一連のサーブレットコンテナーに負荷分散するように設定できます。このセットアップには、バックエンドワーカーノードの設定が含まれます。
mod_jk
を Red Hat JBoss Core Services (JBCS) 経由でインストールしたか、Red Hat Enterprise Linux (RHEL) Application Streams を使用してインストールしたかに応じて、次のガイドラインを考慮してください。
-
JBCS の場合、
JBCS_HOME/httpd/conf.d/
ディレクトリーにmod_jk
のサンプル設定ファイルがあります。 -
RHEL の場合、
/etc/httpd/conf.d/
ディレクトリーにmod_jk
のサンプル設定ファイルがあります。
mod_jk
のサンプル設定ファイルの名前は、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.57 のロードバランサー設定ツールを使用する場合は、Apache バージョンに 2.4.x
を、バックエンド設定に Tomcat/JWS
を選択してください。
Red Hat JBoss Core Services 2.4.57 では、バックエンドの WebSockets サーバーに対する接続がアップグレードされていない場合に、その接続のトンネリングはサポートされません。つまり、mod_proxy_wstunnel
モジュールの ProxyPass
ディレクティブを設定するときに、アップグレードパラメーターが NONE
に設定されていないことを確認する必要があります。mod_proxy_wstunnel
の詳細は、Apache のドキュメント を参照してください。
2.2.1. mod_jk
をロードする場合の Apache HTTP Server 設定
mod_jk.conf
ファイルで設定を指定することにより、mod_jk
をロードするように Apache HTTP Server を設定できます。使用している Apache HTTP Server ディストリビューションにより、設定ファイルの場所は異なります。
次のオプションの設定手順を実行することもできます。
-
JkMount
ディレクティブの他に、JkMountFile
ディレクティブを使用してマウントポイントの設定ファイルを指定できます。設定ファイルには、Tomcat 転送の複数の URL マッピングが含まれます。 - ロードバランサーとして機能している Apache HTTP Server を設定して、要求を処理する各ワーカーノードの詳細をログに記録できます。これは、ロードバランサーのトラブルシューティングが必要な場合に役立ちます。
前提条件
- Apache HTTP サーバーがインストール されている。
-
Application Streams を使用して Apache HTTP Server の RHEL ディストリビューションをインストールした場合は、
mod_jk
を手動でインストール している。
手順
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_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
ディレクティブを使用してマウントポイントの設定ファイルを指定するには、次の手順を実行します。Apache HTTP Server 設定ディレクトリーに移動します。
-
JBCS Apache HTTP Server を使用している場合は、
JBCS_HOME/httpd/conf.d
ディレクトリーに移動します。 -
RHEL Apache HTTP Server を使用している場合は、
/etc/httpd/conf.d
ディレクトリーに移動します。
-
JBCS Apache HTTP Server を使用している場合は、
-
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
を設定しています。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.2.2. mod_jk
でのワーカーノードの設定
works.properties
ファイルで設定を指定することで、Apache HTTP Server がサーブレットコンテナーに転送するリクエストを処理するように複数のワーカーノードを設定できます。使用している Apache HTTP Server ディストリビューションにより、設定ファイルの場所は異なります。
この手順の例では、2 つのサーブレットコンテナー間でスティッキーセッションを使用する加重ラウンドロビン設定で 2 つの mod_jk
ワーカーノードを定義する方法を示します。
前提条件
手順
Apache HTTP Server 設定ディレクトリーに移動します。
-
JBCS Apache HTTP Server を使用している場合は、
JBCS_HOME/httpd/conf.d
ディレクトリーに移動します。 -
RHEL Apache HTTP Server を使用している場合は、
/etc/httpd/conf.d
ディレクトリーに移動します。
-
JBCS Apache HTTP Server を使用している場合は、
-
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.2.3. mod_jk
と連携する場合の JBoss Web Server 設定
デフォルトでは、JBoss Web Server は mod_jk
コネクターから Apache JServ Protocol (AJP) トラフィックを受信するように設定されています。JBoss Web Server ホストでは、AJP コネクターはデフォルトで JWS_HOME/tomcat <VERSION>/conf/server.xml
ファイルに設定されます。
ただし、mod_jk
でワーカーノードを使用するには、次の設定手順を追加で実行する必要があります。
-
JBoss Web Server ホスト上の
server.xml
ファイルで、各ワーカーノードのエンジンのjvmRoute
属性に対して一意の値を設定する必要があります。 Apache HTTP Server ホスト上の
works.properties
ファイルで、ワーカーノードまたはロードバランサーのsecret
プロパティーを指定する必要があります。使用している Apache HTTP Server ディストリビューションにより、workers.properties
ファイルの場所は異なります。注記secret
プロパティーは Tomcat AJP コネクターを使用する場合に必要になります。
手順
JBoss Web Server ホスト上で、各ワーカーノードのエンジンの
jvmRoute
属性に対して一意の値を設定するには、以下を実行します。-
JWS_HOME/tomcat_<VERSION>_/conf/server.xml
ファイルを開きます。 以下の詳細を入力します。
<Engine name="Catalina" jvmRoute="node1" >
重要jvmRoute
属性値が、Apache HTTP Server ホスト上のworkers.properties
ファイルで指定したワーカー名と一致していることを確認してください。
-
Apache HTTP Server ホスト上で、ワーカーノードまたはロードバランサーの
secret
プロパティーを指定するには、以下を実行します。Apache HTTP Server 設定ディレクトリーに移動します。
-
JBCS Apache HTTP Server を使用している場合は、
JBCS_HOME/httpd/conf.d
ディレクトリーに移動します。 -
RHEL Apache HTTP Server を使用している場合は、
/etc/httpd/conf.d
ディレクトリーに移動します。
-
JBCS Apache HTTP Server を使用している場合は、
-
works.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