24.6.3. 配置 mod_cluster Worker 节点

mod_cluster 工作程序节点由 JBoss EAP 服务器组成。此服务器可以是单机服务器,也可以是受管域中服务器组的一部分。单独的进程在 JBoss EAP 内运行,后者管理群集的所有工作程序节点。这称为 master。

受管域中的工作程序节点在服务器组间共享相同的配置。作为单机服务器运行的 worker 节点是单独配置的。否则,配置步骤是相同的。

  • 单机服务器必须使用 standalone-ha 或 standalone- full-ha 配置文件启动。
  • 受管域中的服务器组必须使用 hafull-ha 配置文件,以及 ha-socketsfull-ha-sockets 套接字绑定组。JBoss EAP 附带一个支持群集的服务器组,名为 other-server-group,它满足这些要求。
配置工作程序节点

此流程中的管理 CLI 命令假定您使用带 full-ha 配置文件的受管域。如果您正在运行单机服务器,请删除命令的 /profile=full-ha 部分。

  1. 配置网络接口。

    默认情况下,网络接口默认为 127.0.0.1。托管单机服务器或服务器组中一个或多个服务器的每个物理主机都需要将其接口配置为使用其公共 IP 地址,由其他服务器看到。

    根据您的环境,使用以下管理 CLI 命令为管理 公共 和不安全 接口 修改外部 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. 配置每一主机以连接域控制器。

    注意

    此步骤不适用于单机服务器。

    对于需要加入受管域的新配置主机,您必须删除本地元素,再添加指向域控制器的 remote element host 属性。

    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 中创建用户名和密码。在域控制器或单机 master 上,为每个主机运行 EAP_HOME/bin/add-user.sh 命令。为每个主机添加一个管理用户,用户名与从设备的主机名匹配。

    确保对最后一个问题 回答是 "这个新用户将用于一个 AS 进程连接到另一个 AS 进程吗?",以便为您提供一个 secret 值。

    示例: add-user.sh Script 输出 (trimmed)

    $ 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 EJB calls.
    yes/no? yes
    To represent the user add the following to the server-identities definition <secret value="SECRET_VALUE" />

    复制此输出中提供的 Base64 编码 secret 值 SECRET_VALUE,可在下一步中使用。

    如需更多信息,请参阅 JBoss EAP 如何配置服务器安全指南中的将 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/how_to_configure_server_security/#add_user_master_domain_controller 用户添加到主域控制器一节

  5. 修改从主机的安全域,以使用新的身份验证。

    您可以通过在服务器配置中设置 secret 值、从凭证存储或 vault 中获取密码,或者将密码作为系统属性来指定密码。

    • 使用 Management 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 EAP 如何配置服务器安全指南》中的"将从属控制器配置为使用凭据 "一节。

    • 将主机配置为从凭据存储获取密码。

      如果您在凭证存储中存储了 secret 值,您可以使用以下命令将服务器 secret 设置为来自凭证存储的值:

      /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 EAP 如何配置服务器安全指南 https://access.redhat.com/documentation/en-us/red_hat_jboss_enterprise_application_platform/7.3/html-single/how_to_configure_server_security/#credential_store 的凭据存储部分

    • 将主机配置为从密码库获取密码。

      1. 使用 EAP_HOME/bin/vault.sh 脚本生成屏蔽的密码。它将生成一个字符串,格式为 VAULT::secret::password::VAULT_SECRET_VALUE,例如:

        VAULT::secret::password::ODVmYmJjNGMtZDU2ZC00YmNlLWE4ODMtZjQ1NWNmNDU4ZDc1TElORV9CUkVBS3ZhdWx0.
        注意

        在密码库中创建密码时,必须以纯文本形式指定,而不是 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 如何配置服务器安全指南的 Password Vault 部分。

    • 指定密码作为系统属性。

      以下示例使用 server.identity.password 作为密码的系统属性名称。

      1. 在服务器配置文件中指定密码的系统属性。

        使用以下 managemente 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 系统属性作为命令行参数或在属性文件中传递来设置 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 worker 节点。如果部署集群应用,其会话将复制到所有集群节点进行故障转移,并且可以接受来自外部 Web 服务器或负载平衡器的请求。默认情况下,集群的每个节点都使用自动发现功能发现其他节点。