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.sampleworkers.properties.sampleuriworkermap.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 を設定して、要求を処理する各ワーカーノードの詳細をログに記録できます。これは、ロードバランサーのトラブルシューティングが必要な場合に役立ちます。

前提条件

手順

  1. Apache HTTP Server 設定ディレクトリーに移動します。

    • JBCS Apache HTTP Server を使用している場合は、JBCS_HOME/httpd/conf.d ディレクトリーに移動します。
    • RHEL Apache HTTP Server を使用している場合は、/etc/httpd/conf.d ディレクトリーに移動します。
  2. 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 を設定することもできます。

  3. オプション: JkMountFile ディレクティブを使用してマウントポイントの設定ファイルを指定するには、次の手順を実行します。

    1. Apache HTTP Server 設定ディレクトリーに移動します。

      • JBCS Apache HTTP Server を使用している場合は、JBCS_HOME/httpd/conf.d ディレクトリーに移動します。
      • RHEL Apache HTTP Server を使用している場合は、/etc/httpd/conf.d ディレクトリーに移動します。
    2. uriworkermap.properties という名前のファイルを作成します。
    3. 転送する 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 を設定しています。

    4. 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
  4. オプション: Apache HTTP Server のログを有効にするには、次のいずれかの手順を実行します。

    • mod_jk.conf 設定に関する前の手順で示したように、JkRequestLogFormat ディレクティブに %w を含めます。
    • %{JK_WORKER_NAME}n を Apache HTTP Server LogFormat(s) に含めて、使用する mod_jk ワーカーの名前をログに記録します。

2.2.2. mod_jk でのワーカーノードの設定

works.properties ファイルで設定を指定することで、Apache HTTP Server がサーブレットコンテナーに転送するリクエストを処理するように複数のワーカーノードを設定できます。使用している Apache HTTP Server ディストリビューションにより、設定ファイルの場所は異なります。

この手順の例では、2 つのサーブレットコンテナー間でスティッキーセッションを使用する加重ラウンドロビン設定で 2 つの mod_jk ワーカーノードを定義する方法を示します。

手順

  1. Apache HTTP Server 設定ディレクトリーに移動します。

    • JBCS Apache HTTP Server を使用している場合は、JBCS_HOME/httpd/conf.d ディレクトリーに移動します。
    • RHEL Apache HTTP Server を使用している場合は、/etc/httpd/conf.d ディレクトリーに移動します。
  2. workers.properties という名前のファイルを作成します。
  3. 次の設定の詳細を入力します。

    # 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
    注記

    前の例で、hostport、および 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 コネクターを使用する場合に必要になります。

手順

  1. JBoss Web Server ホスト上で、各ワーカーノードのエンジンの jvmRoute 属性に対して一意の値を設定するには、以下を実行します。

    1. JWS_HOME/tomcat_<VERSION>_/conf/server.xml ファイルを開きます。
    2. 以下の詳細を入力します。

      <Engine name="Catalina" jvmRoute="node1" >
      重要

      jvmRoute 属性値が、Apache HTTP Server ホスト上の workers.properties ファイルで指定したワーカー名と一致していることを確認してください。

  2. Apache HTTP Server ホスト上で、ワーカーノードまたはロードバランサーの secret プロパティーを指定するには、以下を実行します。

    1. Apache HTTP Server 設定ディレクトリーに移動します。

      • JBCS Apache HTTP Server を使用している場合は、JBCS_HOME/httpd/conf.d ディレクトリーに移動します。
      • RHEL Apache HTTP Server を使用している場合は、/etc/httpd/conf.d ディレクトリーに移動します。
    2. works.properties ファイルを開きます。
    3. 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