16.5.6. mod_cluster ワーカーノードの設定

概要

mod_cluster ワーカーノードは、JBoss EAP サーバーから構成されます。このサーバーは、管理対象ドメインまたはスタンドアロンサーバーのサーバーグループの一部になることができます。JBoss EAP 内では、クラスターのすべてのノードを管理する別のプロセスが実行されます。これはマスターと呼ばれます。ワーカーノードの概念の詳細については、「ワーカーノード」を参照してください。HTTPD ロードバランシングの概要については、「HTTP コネクターの概要 」を参照してください。

マスターは、mod_cluster サブシステムを介して 1 度だけ設定されます。mod_cluster サブシステムを設定するには、『管理および設定ガイド』の「mod_cluster サブシステムの設定」を参照してください。各ワーカーノードは別々に設定されるため、クラスターを追加する各ノードに対してこの手順を繰り返してください。
管理対象ドメインを使用する場合、サーバーグループ内の各サーバーは同一の設定を共有するワーカーノードです。したがって、設定はサーバーグループ全体に対して行われます。スタンドアロンサーバーでは、設定は、単一の JBoss EAP 6 インスタンスに対して行われます。設定手順はそれ以外は同じです。

ワーカーノード設定

  • スタンドアロンサーバーを使用する場合は、スタンドアロンサーバーを standalone-ha プロファイルで起動する必要があります。
  • 管理対象ドメインを使用する場合、サーバーグループは ha または full-ha プロファイルと ha-sockets または full-ha-sockets ソケットバインディンググループを使用する必要があります。JBoss EAP 6 には、これらの要件を満たす other-server-group という名前のクラスター対応サーバーグループが同梱されます。

注記

管理 CLI コマンドが提供された場合は、管理対象ドメインが使用されると見なされます。スタンドアロンサーバーを使用する場合は、コマンドの /profile=full-ha 部分を削除します。

手順16.7 ワーカーノードの設定

  1. ネットワークインターフェースの設定

    デフォルトでは、ネットワークインターフェースがすべて 127.0.0.1 に設定されます。スタンドアロンサーバーまたはサーバーグループ内の 1 つまたは複数のサーバーをホストする各物理ホストでは、インターフェースが他のサーバーが見つけることができるパブリック IP アドレスを使用するよう設定する必要があります。
    JBoss EAP 6 ホストの IP アドレスを変更するには、ホストをシャットダウンし、設定ファイルを直接編集する必要があります。これは、管理コンソールと管理 CLI を駆動する管理 API は固定管理アドレスに依存するためです。
    クラスター内の各サーバーの IP アドレスをマスターのパブリック IP アドレスに変更するには、次の手順を実行します。
    1. サーバーを完全にシャットダウンします。
    2. EAP_HOME/domain/configuration/ 内にある管理対象ドメイン用の host.xml または EAP_HOME/standalone/configuration/ 内にあるスタンドアロンサーバー用の standalone-ha.xml を編集します。
    3. <interfaces> 要素を見つけます。managementpublic、および unsecured の 3 つのインターフェースが設定されます。これらそれぞれに対して、値 127.0.0.1 をホストの外部 IP アドレスに変更します。
    4. 管理対象ドメインに参加し、マスターでないホストの場合は、<host 要素を見つけます。この要素には > 閉じ記号がないことに注意してください。これはこの要素が属性を含むためです。名前属性の値を master から一意の名前 (スレーブごとに異なる名前) 変更します。この名前は、スレーブがクラスター対して身元を示すためにも使用されるため、注意してください。
    5. 管理対象ドメインに参加する必要がある新たに設定されたホストの場合は、<domain-controller> 要素を見つけます。<local /> 要素をコメントアウトまたは削除し、次の行を追加して、IP アドレス (X.X.X.X) をドメインコントローラーのアドレスに変更します。この手順は、スタンドアロンサーバーには適用されません。
      <remote host="X.X.X.X" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>
    6. ファイルを保存し、終了します。
  2. 各スレーブサーバーの認証を設定します。

    各スレーブサーバーでは、ドメインコントローラーまたはスタンドアロンマスターの ManagementRealm で作成されたユーザー名とパスワードが必要です。ドメインコントローラーまたはスタンドアロンマスターで、EAP_HOME/bin/add-user.sh コマンドを実行します。同じユーザー名を持つユーザーをスレーブとして ManagementRealm に追加します。このユーザーが外部 JBoss AS インスタンスに対して認証する必要があるかどうか尋ねられた場合は、yes と回答します。パスワード changeme を使用した、slave1 という名前のスレーブに対するコマンドの入出力例は以下のとおりです。
    user:bin user$ ./add-user.sh
    
    What type of user do you wish to add? 
     a) Management User (mgmt-users.properties) 
     b) Application User (application-users.properties)
    (a): a
    
    Enter the details of the new user to add.
    Realm (ManagementRealm) : 
    Username : slave1
    Password : changeme
    Re-enter Password : changeme
    About to add user 'slave1' for realm 'ManagementRealm'
    Is this correct yes/no? yes
    Added user 'slave1' to file '/home/user/jboss-eap-6.0/standalone/configuration/mgmt-users.properties'
    Added user 'slave1' to file '/home/user/jboss-eap-6.0/domain/configuration/mgmt-users.properties'
    Is this new user going to be used for one AS process to connect to another AS process e.g. slave domain controller?
    yes/no? yes
    To represent the user add the following to the server-identities definition <secret value="Y2hhbmdlbWU=" />
    
  3. add-user.sh の出力から Base64 でエンコードされた <secret> 要素をコピーします。

    認証に Base64 でエンコードされたパスワード値を指定したい場合、add-user.sh の出力の最終行より <secret> 要素値をコピーします。次の手順でこの値が必要になります。
  4. 新しい認証を使用するようスレーブホストのセキュリティーレルムを変更します。

    1. スレーブホストの host.xml または standalone-ha.xml ファイルを再度開きます。
    2. <security-realms> 要素を探します。ここにセキュリティーレルムを設定します。
    3. 以下の方法の 1 つを用いて秘密の値を指定できます。
      • 設定ファイルに Base64 でエンコードされたパスワード値を指定します。

        1. 以下の XML コードを <security-realm name="ManagementRealm"> 行のすぐ下に追加します。
          <server-identities>
              <secret value="Y2hhbmdlbWU="/>
          </server-identities>
          
          
        2. "Y2hhbmdlbWU=" を前の手順で add-user.sh の出力より返された秘密の値に置き換えます。
      • ホストを設定し、vault よりパスワードを取得します。

        1. vault.sh スクリプトを使用してマスクされたパスワードを生成します。次のような文字列が生成されます: VAULT::secret::password::ODVmYmJjNGMtZDU2ZC00YmNlLWE4ODMtZjQ1NWNmNDU4ZDc1TElORV9CUkVBS3ZhdWx0
          vault に関する詳細は、「機密性の高い文字列のパスワード vault」の項にある 「クリアテキストファイルでの機密性が高い文字列のセキュア化」 を参照してください。
        2. 以下の XML コードを <security-realm name="ManagementRealm"> 行のすぐ下に追加します。
          <server-identities>
              <secret value="${VAULT::secret::password::ODVmYmJjNGMtZDU2ZC00YmNlLWE4ODMtZjQ1NWNmNDU4ZDc1TElORV9CUkVBS3ZhdWx0}"/>
          </server-identities>
          
          
          必ず秘密の値を前の手順で生成したマスクされたパスワードに置き換えるようにしてください。

          注記

          vault でパスワードを作成する場合、Base64 エンコードではなくプレーンテキストで指定する必要があります。
      • システムプロパティーとしてパスワードを指定します。

        1. 以下の XML コードを <security-realm name="ManagementRealm"> 行のすぐ下に追加します。
          <server-identities>
              <secret value="${server.identity.password}"/>
          </server-identities>
          
          
        2. システムプロパティーとしてパスワードを指定する場合、次の方法のいずれかを用いてホストを設定できます。
          • 次の例のように、プレーンテキストのパスワードをコマンドライン引数として入力し、サーバーを起動します。
            -Dserver.identity.password=changeme

            注記

            パスワードはプレーンテキストで入力する必要があります。ps -ef コマンドを実行すると、このパスワードを確認できます。
          • パスワードをプロパティーファイルに格納し、プロパティーファイルの URL をコマンドライン引数として渡します。
            1. キーと値のペアをプロパティーファイルに追加します。例は次のとおりです。
              server.identity.password=changeme
              
            2. コマンドライン引数を用いてサーバーを起動します。
              --properties=URL_TO_PROPERTIES_FILE
              .
    4. ファイルを保存し、終了します。
  5. サーバーを再起動します。

    ホスト名をユーザー名として使用し、暗号化された文字列をパスワードとして使用してスレーブがマスターに対して認証されます。
結果

スタンドアロンサーバーまたは管理対象ドメインのサーバーグループ内のサーバーが mod_cluster ワーカーノードとして設定されます。クラスター化されたアプリケーションをデプロイする場合、セッションはフェイルオーバーのためにすべてのクラスターサーバーに複製され、外部の HTTPD サーバーまたはロードバランサーから要求を受け入れることができます。クラスターの各ノードは、デフォルトで自動検出を使用して他のノードを検出します。自動検出と mod_cluster サブシステムの他の固有設定値を設定するには、mod_cluster サブシステムの設定」を参照してください。Apache HTTPD サーバーを設定するには、「外部 HTTPD を JBoss EAP 6 アプリケーションの Web フロントエンドとして使用」を参照してください。