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

mod_cluster ワーカーノードは、JBoss EAP サーバーで設定されます。このサーバーは、スタンドアロンサーバーまたは管理対象ドメインのサーバーグループの一部になります。個別のプロセスが JBoss EAP 内で実行され、クラスターのワーカーノードをすべて管理します。これはマスターと呼ばれます。

管理対象ドメインのワーカーノードは、サーバーグループ全体で同じ設定を共有します。スタンドアロンサーバーとして実行しているワーカーノードは個別に設定されます。設定手順は同じです。

  • スタンドアロンサーバーは standalone-ha または standalone-full-ha プロファイルで起動する必要があります。
  • 管理対象ドメインのサーバーグループは ha または full-ha プロファイルを使用し、 ha-sockets または full-ha-sockets ソケットバインディンググループを使用する必要があります。JBoss EAP にはこれらの要件を満たし、クラスターが有効になっている other-server-group というサーバーグループが含まれます。
ワーカーノードの設定

この手順の管理 CLI コマンドは、full-ha プロファイルの管理対象ドメインを使用していることを前提としています。スタンドアロンサーバーを実行している場合は、コマンドの /profile=full-ha の部分を削除してください。

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

    デフォルトでは、ネットワークインターフェイスがすべて 127.0.0.1 に設定されます。スタンドアロンサーバーまたはサーバーグループ内の 1 つまたは複数のサーバーをホストする各物理ホストでは、インターフェイスが他のサーバーが見つけることができるパブリック IP アドレスを使用するよう設定する必要があります。

    以下の管理 CLI コマンドを使用して、ご使用の環境に合うよう managementpublic、および unsecure インターフェイスの外部 IP アドレスを変更します。コマンドの EXTERNAL_IP_ADDRESS をホストの実際の外部 IP アドレスに置き換えてください。

    /interface=management:write-attribute(name=inet-address,value="${jboss.bind.address.management:EXTERNAL_IP_ADDRESS}")
    /interface=public:write-attribute(name=inet-address,value="${jboss.bind.address.public:EXTERNAL_IP_ADDRESS}")
    /interface=unsecure:write-attribute(name=inet-address,value="${jboss.bind.address.unsecure:EXTERNAL_IP_ADDRESS}")

    サーバーをリロードします。

    reload
  2. ホスト名を設定します。

    管理対象ドメインに参加する各ホストに一意なホスト名を設定します。この名前はスレーブ全体で一意になる必要があり、スレーブがクラスターを識別するために使用されるため、使用する名前を覚えておくようにしてください。

    1. 適切な host.xml 設定ファイルを使用して JBoss EAP のスレーブホストを起動します。

      $ EAP_HOME/bin/domain.sh --host-config=host-slave.xml
    2. 以下の管理 CLI コマンドを使用して、一意なホスト名を設定します。この例では、slave1 が新しいホスト名として使用されます。

      /host=EXISTING_HOST_NAME:write-attribute(name=name,value=slave1)

      ホスト名の設定に関する詳細は、ホスト名の設定 を参照してください。

  3. ドメインコントローラーに接続する各ホストを設定します。

    注記

    このステップはスタンドアロンサーバーには適用されません。

    新たに設定されたホストが管理対象ドメインに参加する必要がある場合、ローカル要素を削除し、ドメインコントローラーを示すリモート要素ホスト属性を追加する必要があります。

    1. 適切な host.xml 設定ファイルを使用して JBoss EAP のスレーブホストを起動します。

      $ EAP_HOME/bin/domain.sh --host-config=host-slave.xml
    2. 以下の管理 CLI コマンドを使用して、ドメインコントローラーを設定します。

      /host=SLAVE_HOST_NAME:write-remote-domain-controller(host=DOMAIN_CONTROLLER_IP_ADDRESS,port=${jboss.domain.master.port:9990},security-realm="ManagementRealm")

      これにより、host-slave.xml ファイルの XML が次のように変更されます。

      <domain-controller>
          <remote host="DOMAIN_CONTROLLER_IP_ADDRESS" port="${jboss.domain.master.port:9990}" security-realm="ManagementRealm"/>
      </domain-controller>

      詳細は、ホストコントローラーの設定を 参照してください。

  4. 各スレーブホストの認証を設定します。

    各スレーブサーバーには、ドメインコントローラーまたはスタンドアロンマスターの ManagementRealm で作成されたユーザー名とパスワードが必要です。ドメインコントローラーまたはスタンドアロンマスターで、各ホストに対して EAP_HOME/bin/add-user.sh コマンドを実行します。スレーブのホスト名と一致するユーザー名で、各ホストの管理ユーザーを追加します。

    秘密の値が提供されるようにするため、必ず最後の質問 (Is this new user going to be used for one AS process to connect to another AS process?) に yes と返答してください。

    例: add-user.sh スクリプト出力 (抜粋)

    $ EAP_HOME/bin/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
    
    Username : slave1
    Password : changeme
    Re-enter Password : changeme
    What groups do you want this user to belong to? (Please enter a comma separated list, or leave blank for none)[  ]:
    About to add user 'slave1' for realm 'ManagementRealm'
    Is this correct yes/no? yes
    Is this new user going to be used for one AS process to connect to another AS process?
    e.g. for a slave host controller connecting to the master or for a Remoting connection for server to server {JEB} calls.
    yes/no? yes
    To represent the user add the following to the server-identities definition <secret value="SECRET_VALUE" />

    ここで出力された Base64 でエンコードされた秘密の値 SECRET_VALUE をコピーします。 この値は次のステップで使用することがあります。

    詳細は、JBoss EAPHow To Configure Server SecurityAdding a User to the Master Domain Controller を参照してください。

  5. 新しい認証を使用するようスレーブホストのセキュリティーレルムを変更します。

    サーバー設定に秘密の値を指定する方法、認証情報ストアまたは vault からパスワードを取得する方法、またはパスワードをシステムプロパティーとして渡す方法のいずれかでパスワードを指定できます。

    • 管理 CLI を使用して、サーバー設定ファイルに Base64 でエンコードされたパスワード値を指定します。

      以下の管理 CLI コマンドを使用して秘密の値を指定します。必ず SECRET_VALUE を前のステップの add-user 出力から返された秘密の値に置き換えてください。

      /host=SLAVE_HOST_NAME/core-service=management/security-realm=ManagementRealm/server-identity=secret:add(value="SECRET_VALUE")

      サーバーをリロードする必要があります。--host 引数はスタンドアロンサーバーには適用されません。

      reload --host=HOST_NAME

      詳細は、JBoss EAPHow To Configure Server SecurityConfiguring the Slave Controllers to Use the Credential を参照してください。

    • ホストを設定し、認証情報ストアからパスワードを取得します。

      秘密の値を認証情報ストアに保存した場合、以下のコマンドを使用してサーバーの秘密の値が認証情報ストアからの値になるよう設定できます。

      /host=SLAVE_HOST_NAME/core-service=management/security-realm=ManagementRealm/server-identity=secret:add(credential-reference={store=STORE_NAME,alias=ALIAS}

      サーバーをリロードする必要があります。--host 引数はスタンドアロンサーバーには適用されません。

      reload --host=HOST_NAME

      詳細は、JBoss EAPHow To Configure Server SecurityCredential Store を参照してください。

    • ホストを設定し、vault からパスワードを取得します。

      1. EAP_HOME/bin/vault.sh スクリプトを使用してマスクされたパスワードを生成します。以下のような VAULT::secret::password::VAULT_SECRET_VALUE 形式の文字列が生成されます。

        VAULT::secret::password::ODVmYmJjNGMtZDU2ZC00YmNlLWE4ODMtZjQ1NWNmNDU4ZDc1TElORV9CUkVBS3ZhdWx0.
        注記

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

      2. 以下の管理 CLI コマンドを使用して秘密の値を指定します。必ず VAULT_SECRET_VALUE を前のステップで生成したマスクされたパスワードに置き換えてください。

        /host=master/core-service=management/security-realm=ManagementRealm/server-identity=secret:add(value="${VAULT::secret::password::VAULT_SECRET_VALUE}")

        サーバーをリロードする必要があります。--host 引数はスタンドアロンサーバーには適用されません。

        reload --host=HOST_NAME

        詳細は、JBoss EAP How To Configure Server SecurityPassword Vault を参照してください。

    • システムプロパティーとしてパスワードを指定します。

      次の例は、server.identity.password をパスワードのシステムプロパティー名として使用します。

      1. サーバー設定ファイルでパスワードのシステムプロパティーを指定します。

        以下の管理 CLI コマンドを使用して、システムプロパティーを使用する秘密のアイデンティティーを設定します。

        /host=SLAVE_HOST_NAME/core-service=management/security-realm=ManagementRealm/server-identity=secret:add(value="${server.identity.password}")

        サーバーをリロードする必要があります。--host 引数はスタンドアロンサーバーには適用されません。

        reload --host=master
      2. サーバーの起動時にシステムプロパティーのパスワードを設定します。

        server.identity.password システムプロパティーを設定するには、このプロパティーをコマンドライン引数として渡すか、プロパティーファイルで渡します。

        1. プレーンテキストのコマンドライン引数として渡します。

          サーバーを起動し、server.identity.password プロパティーを渡します。

          $ EAP_HOME/bin/domain.sh --host-config=host-slave.xml -Dserver.identity.password=changeme
          警告

          パスワードはプレーンテキストで入力する必要があります。 ps -ef コマンドを実行すると、このパスワードを確認できます。

        2. プロパティーファイルでプロパティーを設定します。

          プロパティーファイルを作成し、キーバリューペアをプロパティーファイルに追加します。 例を以下に示します。

          server.identity.password=changeme
          警告

          パスワードはプレーンテキストで、このプロパティーファイルにアクセスできるユーザーはパスワードを確認できます。

          コマンドライン引数を使用してサーバーを起動します。

          $ EAP_HOME/bin/domain.sh --host-config=host-slave.xml --properties=PATH_TO_PROPERTIES_FILE
  6. サーバーを再起動します。

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

スタンドアロンサーバーまたは管理対象ドメインのサーバーグループ内のサーバーが mod_cluster ワーカーノードとして設定されます。クラスター化されたアプリケーションをデプロイする場合、セッションはフェイルオーバーのためにすべてのクラスターサーバーに複製され、外部 Web サーバーまたはロードバランサーからのリクエストを許可できます。クラスターの各ノードは、デフォルトで自動検出を使用して他のノードを検出します。