HTTP コネクターおよび負荷分散ガイド 5.6


Red Hat JBoss Web Server 5.6

Red Hat JBoss Web Server 5.6 向け

概要

Red Hat JBoss Core Services Apache HTTP Server が提供する他のモジュールとともに mod_cluster および mod_jk コネクターモジュールを使用する負荷分散ソリューションをインストールおよび設定します。

Red Hat ドキュメントへのフィードバック (英語のみ)

弊社の技術的な内容についてのフィードバックに感謝します。ご意見をお聞かせください。コメントの追加、Insights の提供、誤字の修正、および質問を行う必要がある場合は、ドキュメントで直接行うこともできます。

注記

Red Hat アカウントがあり、カスタマーポータルにログインしている必要があります。

カスタマーポータルからドキュメントのフィードバックを送信するには、以下の手順を実施します。

  1. Multi-page HTML 形式を選択します。
  2. ドキュメントの右上にある Feedback ボタンをクリックします。
  3. フィードバックを提供するテキストのセクションを強調表示します。
  4. ハイライトされたテキストの横にある Add Feedback ダイアログをクリックします。
  5. ページの右側のテキストボックスにフィードバックを入力し、送信 をクリックします。

フィードバックを送信すると、自動的に問題の追跡が作成されます。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.sampleworkers.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 を設定して、要求を処理する各ワーカーノードの詳細をログに記録できます。これは、ロードバランサーのトラブルシューティングが必要な場合に役立ちます。

手順

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

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

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

複数のワーカーノードを設定して、Apache HTTP Server がサーブレットコンテナーに転送する要求を処理できます。

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

手順

  1. JBCS_HOME/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
    
    # 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
    注記

    前の例で、hostport、および 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 モジュールで設定されます。

コンポーネント説明

mod_cluster_slotmem.so

Shared Memory Manager モジュールは、リアルタイムのワーカーノード情報を複数の Apache HTTP Server プロセスと共有します。

mod_manager.so

Cluster Manager モジュールは、ノードの登録、ノードの負荷データ、ノードアプリケーションのライフサイクルイベントなど、ワーカーノードからメッセージを受信および確認します。

mod_proxy_cluster.so

Proxy Balancer モジュールは、クラスターノードへの要求ルーティングを処理します。Proxy Balancer は、クラスターのアプリケーションの場所、各クラスターノードの現在の状態、およびセッション ID (リクエストが確立されたセッションの一部である場合) に基づいて適切な宛先ノードを選択します。

mod_advertise.so

Proxy Advertisement Module は、UDP マルチキャストメッセージを介してプロキシーサーバーの存在をブロードキャストします。サーバーのアドバタイズメッセージには、負荷分散クラスターに参加するワーカーノードからの応答をプロキシーサーバーがリッスンしている IP アドレスとポート番号が含まれます。

3.2. mod_cluster の文字制限

mod_cluster モジュールは共有メモリーを使用してノードの説明を保持します。共有メモリーは Apache HTTP Server の起動時に作成され、各項目の構造は固定されます。

プロキシーサーバーとワーカーノードのプロパティーを定義するときは、次の文字制限を必ず守ってください。

プロパティー最大文字数制限説明

エイリアスの長さ

100 文字

エイリアスは、それぞれの仮想ホストのネットワーク名に対応します。名前は Host 要素で定義されます。

コンテキストの長さ

40 文字

たとえば、myapp.war/myapp にデプロイされている場合、/myapp がコンテキストに含まれます。

バランサー名の長さ

40 文字

これは mbean のバランサープロパティーです。

JVMRoute 文字列の長さ

80 文字

<Engine> 要素の JVMRoute

ドメイン名の長さ

20 文字

これは mbean のドメインプロパティーです。

ノードのホスト名の長さ

64 文字

これは、<Connector> 要素のホスト名アドレスです。

ノードのポート長

7 文字

これは、<Connector> 要素のポートプロパティーです。たとえば、8009 は 4 文字です。

ノードのスキームの長さ

6 文字

これはコネクターのプロトコルです。可能な値は httphttps、および ajp です。

Cookie 名の長さ

30 文字

これは、セッション ID のヘッダー Cookie 名です。デフォルト値は、org.apache.catalina.Globals.SESSION_COOKIE_NAME プロパティーに基づく JSESSIONID です。

パス名の長さ

30 文字

これは、セッション ID のパラメーター名です。デフォルト値は、org.apache.catalina.Globals.SESSION_PARAMETER_NAME プロパティーに基づく JSESSIONID です。

Session ID length

120 文字

セッション ID の形式は次のとおりです。BE81FAA969BF64C8EC2B6600457EAAAA.node01

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 接続用に開いている必要があります。

手順

  1. mod_cluster 設定ファイルを開きます。

    注記

    通常、mod_cluster 設定ファイルは JBCS_HOME/httpd/conf.d/mod_cluster.conf ディレクトリーにあります。

  2. プロキシーサーバーの Listen ディレクティブを作成するには、mod_cluster.conf ファイルに次の行を入力します。

    Listen IP_ADDRESS:PORT_NUMBER
    注記

    上記の例では、プロキシーサーバーがワーカーノードと通信するために使うサーバーネットワークインターフェイスのアドレスに IP_ADDRESS をプロキシーサーバーがワーカーノードと通信するのに使うサーバーネットワークインターフェイスのアドレスに、をプロキシーサーバーがリッスンするポートに置き換えてください。PORT_NUMBER をプロキシーサーバーがリッスンするポートに置き換えます。

    着信 TCP 接続用にポートが開いていることを確認します。

  3. 仮想ホストを作成するには、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_ADDRESSPORT_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_ADDRESSPORT_NUMBER が含まれています。サーバーアドバタイズに応答するように設定されたワーカーノードは、この情報を使用してプロキシーサーバーに登録されます。ワーカーノードがプロキシーサーバーに登録されないようにする場合は、オプションでサーバーアドバタイズメントを無効にすることができます。

注記

プロキシーサーバーとワーカーノードの間で UDP マルチキャストが使用可能な場合、サーバーアドバタイズメントは、プロキシーサーバーでさらに設定する必要なく、ワーカーノードを追加します。サーバーアドバタイズには、ワーカーノードでの最小限の設定のみが必要です。

手順

  1. mod_cluster 設定ファイルを開きます。

    注記

    通常、mod_cluster 設定ファイルは JBCS_HOME/httpd/conf.d/mod_cluster.conf ディレクトリーにあります。

  2. 次のディレクティブを VirtualHost 定義に追加します。

    ServerAdvertise Off
    注記

    サーバーのアドバタイズが無効になっている場合や、UDP マルチキャストがプロキシーサーバーとワーカーノードの間のネットワークで利用できない場合、ワーカーノードをプロキシーサーバーの静的リストで設定します。いずれの場合も、ワーカーノードのリストを使用してプロキシーサーバーを設定する必要はありません。

3.5.2. ワーカーノードの詳細のログ記録

mod_cluster を使用する負荷分散プロキシーサーバーを設定する場合、必要に応じて、要求を処理する各ワーカーノードの詳細をログに記録するように Apache HTTP Server を設定できます。ワーカーノードの詳細をログに記録すると、ロードバランサーのトラブルシューティングが必要な場合に役立ちます。

手順

  1. mod_cluster 設定ファイルを開きます。

    注記

    通常、mod_cluster 設定ファイルは JBCS_HOME/httpd/conf.d/mod_cluster.conf ディレクトリーにあります。

  2. 次の詳細を 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 で利用できます。

手順

  1. 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" />
  2. ワーカーノードに一意の ID を与えるには、JWS_HOME/tomcat<VERSION>/conf/server.xml ファイルを編集して、jvmRoute 属性と値を Engine 要素に追加します。

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker01">
  3. 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 秒を意味します。

  4. オプション:プロキシーサーバー通知用にファイアウォールを設定するには、次のいずれかの手順を実行して、ワーカーノードのファイアウォールで 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 ワーカーノードを設定する必要があります。

手順

  1. JWS_HOME/tomcat<VERSION>/conf/server.xml ファイルを開きます。
  2. mod_cluster リスナーを定義して動的プロキシー検出を無効にするには、ModClusterListenerListener 要素を追加または変更します。

    以下に例を示します。

    <Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="false" stickySession="true" stickySessionForce="false" stickySessionRemove="true"/>
    注記

    advertise プロパティーを false に設定していることを確認してください。

  3. 静的プロキシーサーバーリストを作成するには、プロキシーのコンマ区切りリストを次の形式で追加して、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) を取得しました。

手順

  1. mod_ssl をインストールするには、次のコマンドを入力します。

    # yum install jbcs-httpd24-mod_ssl
  2. SSL 設定設定を指定するには:

    1. JBCS_HOME/httpd/conf.d/ssl.conf ファイルを開きます。
    2. ServerNameSSLCertificateFile、および 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 証明書に関連付けられている秘密鍵ファイルへのパスを指定します。
  3. Listen ディレクティブが、デプロイメントの httpd サービスのホスト名または IP アドレスと一致することを確認します。
  4. Apache HTTP Server を再起動するには、次のコマンドを入力します。

    # service jbcs-httpd24-httpd restart

4.3. Apache HTTP Server での OCSP の使用

Online Certificate Status Protocol (OCSP) を使用して、Apache HTTP Server との安全な接続を実現できます。

手順

  1. 認証局を設定します。

    注記

    CA が OCSP 証明書を発行できることを確認します。CA は、次の属性を証明書に追加できる必要があります。

    [ usr_cert ]
    ...
    authorityInfoAccess=OCSP;URI:http://<HOST>:<PORT>
    ...
    [ v3_OCSP ]
    basicConstraints = CA:FALSE
    keyUsage = nonRepudiation, digitalSignature, keyEncipherment
    extendedKeyUsage = OCSP Signing

    前の例で、HOSTPORT を、設定する OCSP レスポンダーの詳細に置き換えます。

  2. OCSP レスポンダーを設定します。

4.4. OCSP 証明書を検証する Apache HTTP Server の設定

ssl_conf ファイルで OCSP 設定を定義することにより、OCSP 証明書を検証するように Apache HTTP Server を設定できます。

手順

  1. JBCS_HOME/httpd/conf.d/ssl.conf ファイルを開きます。
  2. 展開に適した 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 をプロキシーサーバーとして設定する必要があります。

手順

  1. JBCS_HOME/httpd/conf.d/ ディレクトリーに移動します。
  2. mod_cluster.conf という名前のファイルを作成します。
  3. 次の設定の詳細を入力します。

    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 ワーカーノードを設定する必要があります。

手順

  1. JWS_HOME/tomcat<VERSION>/conf/server.xml ファイルを開きます。
  2. 次の 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 サーバーを使用している場合は、krbtgtldapHTTP という名前の 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 クライアントを設定する必要があります。

  1. krb5.conf ファイルで設定設定を指定します。
  2. JBCS_HOME/httpd/conf ファイルにキータブを作成します。
  3. キータブにアクセス許可を割り当てます。
  4. /etc/hosts ファイルに localhost が含まれていることを確認します。

前提条件

手順

  1. krb5.conf ファイルで設定設定を指定するには、次のようにします。

    1. /etc ディレクトリーに移動します。
    2. krb5.conf という名前のファイルを作成します。
    3. 次の設定の詳細を入力します。

      [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
  2. キータブを作成するには:

    1. JBCS_HOME/httpd/conf ファイルを開きます。
    2. 以下の詳細を入力します。

      # 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 変数を絶対パスに置き換える必要があります。

  3. 正しいグループと権限をキータブに適用するには、root ユーザーとして次のコマンドを入力します。

    # chgrp apache JBCS_HOME/httpd/conf/krb5.keytab
    # chmod 640 JBCS_HOME/httpd/conf/krb5.keytab
  4. 以下のホスト設定が /etc/hosts ファイルに含まれていることを確認します。

    127.0.0.1 localhost

6.3. mod_auth_kerb の設定

Kerberos 認証を設定する場合、auth_kerb.conf ファイルで設定を指定して mod_auth_kerb を設定する必要があります。

手順

  1. JBCS_HOME/httpd/conf.d/ ディレクトリーに移動します。
  2. auth_kerb.conf という名前のファイルを作成します。
  3. 次の設定の詳細を入力します。

    #
    # 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 認証をテストできます。

前提条件

手順

  1. テストページを作成するには、次の手順を実行します。

    1. JBCS_HOME/httpd/www/html/kerberostest ディレクトリーに移動します。
    2. auth_kerb_page.html という名前のテストページを作成します。
    3. 以下の詳細を入力します。

      <html>
      <body>
          <h1>mod_auth_kerb successfully authenticated!</h1>
      </body>
      </html>
  2. オプション:JBCS_HOME/httpd/conf/httpd.conf ファイルで、ログレベルをデバッグに設定します。
  3. Apache HTTP Server を起動します。詳細は、Red Hat JBoss Core Services Apache HTTP Server インストールガイド を参照してください。
  4. テストユーザー hnelson の Kerberos 認証を開始するには、次のコマンドを入力します。

    $ kinit hnelson
  5. テストユーザー 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 にアクセスすると、以下のような出力が表示されます。(この場合は、$LOCATIONmod_cluster-handler として定義されました。)

Transferred は、ワーカーノードに送信された POST データに一致します。Connected は、このステータスページが要求されたときに処理されたリクエストの数に対応します。Sessions はアクティブなセッションの数に対応します。Maxsessionid0 の場合、このフィールドは存在しません。

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

定義された AliasServerName に対応するかどうかを定義します。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 です。ここでは、ADDRESSAdvertiseGroupAddress に一致し、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
ワーカーに指定された任意の名前。たとえば、node1node_01Node_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 ワーカーノード設定

設定値は、以下の条件下でプロキシーに送信されます。

  • サーバーの起動時。
  • プロキシーがアドバタイズメカニズムで検出される場合。
  • エラーが発生すると、プロキシーの設定がリセットされます。
表C.1 Tomcat のプロキシー設定値
デフォルト説明

stickySession

true

あるセッションの後続リクエストを可能な限り同じノードへルーティングするべきかどうかを指定します。

stickySessionRemove

false

バランサーがリクエストをスタックしたノードへルーティングできない場合、Apache HTTP Server プロキシーがセッションのスティッキネスを削除するかどうかを指定します。stickySessionfalse の場合は、このプロパティーは無視されます。

stickySessionForce

true

バランサーがリクエストをスタックしたノードへルーティングできない場合、Apache HTTP Server プロキシーがエラーを返すかどうかを指定します。stickySessionfalse の場合は、このプロパティーは無視されます。

workerTimeout

-1

リクエストを処理するためにワーカーが利用可能になるまで待機する秒数を指定します。バランサーのすべてのワーカーが使用できなくなると、しばらく (workerTimeout/100) した後に mod_cluster を再試行して使用可能なワーカーを見つけます。-1 の値は、Apache HTTP Server がワーカーが利用可能になるまで待機せず、利用可能なワーカーがない場合にエラーを返すことを示します。

maxAttempts

1

Apache HTTP Server プロキシーがワーカーに指定のリクエストの送信を試みる回数を指定します。この回数試行した後に送信を断念します。最小値は 1 で、1 回送信を試みた後、断念します。

flushPackets

false

パケットのフラッシュが有効または無効化されるかどうかを指定します。

flushWait

-1

パケットをフラッシュするまでの待機時間を指定します。-1 を値として指定すると、永久に待機します。

ping

10

ping に対する pong 応答を待つ時間 (秒単位)。

smax

 

soft maximum アイドル接続数 を指定します。最大値は Apache HTTP Server スレッド設定 (ThreadsPerChild または 1) によって決まります。

ttl

60

smax しきい値を超えるアイドル接続の期間 (秒単位) を指定します。

nodeTimeout

-1

エラーを返す前に、バックエンドサーバーの応答を待つ時間 (秒単位) の mod_cluster を指定します。mod_cluster は、リクエストを転送する前に常に cping/cpong を使用します。mod_cluster によって使用される connectiontimeout 値は、ping の値です。

balancer

mycluster

ロードバランサーの名前を指定します。

loadBalancingGroup

 

同じ負荷分散グループ内の jvmRoutes 間の負荷分散を指定します。loadBalancingGroup はドメインディレクティブと論理的に同等です。

付録D Mod_cluster Proxy および Proxy Discovery 設定属性

以下の表には、mod_cluster プロキシーおよびプロキシー検出設定属性の属性および情報が含まれます。

表D.1 mod_cluster のプロキシー検出設定属性
属性プロパティーデフォルト値

proxy-list

proxyList

 

proxy-url

proxyURL

 

advertise

advertise

true

advertise-security-key

advertiseSecurityKey

 

excluded-contexts

excludedContexts

 

auto-enable-contexts

autoEnableContexts

true

stop-context-timeout

stopContextTimeout

10 秒 (秒単位)

socket-timeout

nodeTimeout

20 秒 (ミリ秒単位)

注記

nodeTimeout が定義されていない場合は、ProxyTimeout ディレクティブ Proxy が使用されます。ProxyTimeout が定義されていない場合は、サーバーのタイムアウト (Timeout) が使用されます (JBCS httpd.conf ではデフォルトで 120 秒)。nodeTimeoutProxyTimeoutTimeout はソケットレベルで設定されます。

表D.2 mod_cluster のプロキシー設定属性
属性プロパティーデフォルト値

sticky-session

stickySession

true

sticky-session-remove

stickySessionRemove

false

sticky-session-force

stickySessionForce

true

node-timeout

workerTimeout

-1

max-attempts

maxAttempts

1

flush-packets

flushPackets

false

flush-wait

flushWait

-1

ping

ping

10 (秒)

smax

smax

-1 (デフォルト値を使用)

ttl

ttl

-1 (デフォルト値を使用)

domain

loadBalancingGroup

 

load-balancing-group

loadBalancingGroup

 

付録E Tomcat の負荷設定

Apache Tomcat で mod_cluster を使用する場合は、負荷メトリックの次の追加プロパティーを設定できます。

表E.1 Tomcat の負荷設定
属性デフォルト値説明

loadMetricClass

org.jboss.modcluster.load.metric.impl.BusyConnectorsLoadMetric

org.jboss.load.metric.LoadMetric を実装するオブジェクトのクラス名。

loadMetricCapacity

1

loadMetricClass プロパティーにより定義された負荷メトリクスの容量。

loadHistory

9

負荷分散係数の計算で考慮する必要のある、過去の負荷値の数。

loadDecayFactor

2

この値で過去の負荷値が減少されます。

Red Hat logoGithubRedditYoutubeTwitter

詳細情報

試用、購入および販売

コミュニティー

Red Hat ドキュメントについて

Red Hat をお使いのお客様が、信頼できるコンテンツが含まれている製品やサービスを活用することで、イノベーションを行い、目標を達成できるようにします。

多様性を受け入れるオープンソースの強化

Red Hat では、コード、ドキュメント、Web プロパティーにおける配慮に欠ける用語の置き換えに取り組んでいます。このような変更は、段階的に実施される予定です。詳細情報: Red Hat ブログ.

会社概要

Red Hat は、企業がコアとなるデータセンターからネットワークエッジに至るまで、各種プラットフォームや環境全体で作業を簡素化できるように、強化されたソリューションを提供しています。

© 2024 Red Hat, Inc.