19.5.6. 配置 mod_cluster 工作节点

概述

mod_cluster 工作节点由一个 JBoss EAP 6 服务器组成。这个服务器可以是受管域里服务器组的一部分,也可以是一个独立服务器。JBoss EAP 6 里运行的一个独立进程管理这个群集的所有节点。它被称为主节点(Master)。关于工作节点的更多概念,请参考 第 19.1.4 节 “工作节点”。关于 Web 服务器负载平衡的概述,请参考 第 19.1.3 节 “HTTP 连接器概述”

主节点只需要通过 mod_cluster 子系统配置一次。要配置 mod_cluster 子系统,请参考《管理和配置指南》里的『配置 mod_cluster 子系统』。每个工作节点都是独立配置的,所以你可以为每个要加入群集的节点重复这个步骤。
如果你使用了受管域,服务器组里的每个服务器都是一个工作节点,它们共享相同的配置。因此,配置是对于整个服务器组完成的。而在独立服务器里,配置是对于单个 JBoss EAP 6 实例完成的。其余的配置步骤是相同的。

工作节点配置

  • 如果你使用了独立服务器,它必须以 standalone-ha 配置集启动。
  • 如果你使用受管域,你的服务器组必须使用 hafull-ha 配置集,以及 ha-socketsfull-ha-sockets 套接字绑定组。JBoss EAP 6 附带满足这些要求的启用了群集的服务器组 other-server-group

注意

如果使用管理 CLI 命令,它会假设你使用受管域。如果你使用的是独立服务器,请从命令行删除 /profile=full-ha

过程 19.9. 配置工作节点

  1. 配置网络接口。

    在默认情况下,网络接口都是 127.0.0.1。每个容纳独立服务器或服务器组里的一个或多个服务器的物理主机的接口都需要进行配置以使用其他服务器可以看到的公共 IP 地址。
    要修改 JBoss EAP 6 主机的 IP 地址,你需要关闭它并直接修改配置文件。这是因为驱动管理控制台和管理 CLI 的 Management API 依赖于稳定的管理地址。
    遵循下列步骤将群集里的每个服务器的 IP 地址修改为主节点的公共 IP 地址。
    1. 用本节之前描述的配置集启动 JBoss EAP 服务器。
    2. 在 Linux 里用 EAP_HOME/bin/jboss-cli.sh 命令、在 Windows 服务器里使用 EAP_HOME\bin\jboss-cli.bat 命令启动管理 CLI。输入 connect 连接到 localhost 上的域控制器,或 connect IP_ADDRESS 连接到远程服务器上的域控制器。
    3. 用下列命令修改 managementpublicunsecure 接口的外部 IP 地址。请确保用实际的外部 IP 地址替换命令里的 EXTERNAL_IP_ADDRESS
      /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
      您应该看到下列输出结果:
       "outcome" => "success"
    4. 对于参与受管域但不是主节点的主机,你必须将主机名从 master 修改为其他的唯一名称。这个名称必须在从节点里是唯一的,它将被从节点用来标识群集,所以请记下这个名称。
      1. 用下列语法启动 JBoss EAP 从主机:
        bin/domain.sh --host-config=HOST_SLAVE_XML_FILE_NAME
        例如:
        bin/domain.sh --host-config=host-slave01.xml
      2. 启动管理 CLI。
      3. 使用下列语法来替代主机名:
        /host=master:write-attribute(name="name",value=UNIQUE_HOST_SLAVE_NAME)
        例如:
        /host=master:write-attribute(name="name",value="host-slave01")
        你应该看到下面的结果。
         "outcome" => "success"
        这修改了 host-slave01.xml 文件里的内容:
        <host name="host-slave01" xmlns="urn:jboss:domain:1.6">
        
    5. 对于需要加入受管域的新配置的主机,您必须删除 local 元素并添加 remote 源及指向域控制器的 host 属性。这个步骤不适用于独立服务器。
      1. 用下列语法启动 JBoss EAP 从主机:
        bin/domain.sh --host-config=HOST_SLAVE_XML_FILE_NAME
        例如:
        bin/domain.sh --host-config=host-slave01.xml
      2. 启动管理 CLI。
      3. 使用下列语法来指定域控制器:
        /host=UNIQUE_HOST_SLAVE_NAME/:write-remote-domain-controller(host=DOMAIN_CONTROLLER_IP_ADDRESS,port=${jboss.domain.master.port:9999},security-realm="ManagementRealm") 
        例如:
        /host=host-slave01/:write-remote-domain-controller(host="192.168.1.200",port=${jboss.domain.master.port:9999},security-realm="ManagementRealm") 
        你应该看到下面的结果。
         "outcome" => "success"
        这修改了 host-slave01.xml 文件里的内容:
        <domain-controller>
            <remote host="192.168.1.200" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>
        </domain-controller>
        
  2. 为每个从服务器配置验证。

    每个从服务器都需要在域控制器或独立主服务器的 ManagementRealm 里创建一个用户名和密码。在域控制器或独立主服务器上,运行 EAP_HOME/bin/add-user.sh 命令。请用和从服务器相同的用户名添加一个用户到 ManagementRealm。当提示这个用户是否需要到外部的 JBoss AS 实例验证,请选择 yes。下面是这个命令的输入和输出的例子,从服务器名为 slave1,其密码为 changeme
    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. 修改从主机的安全区以使用新的验证。

    你可以用下列方法之一指定 secret 值:
    • 用管理 CLI 在服务器配置文件里指定 Base64 编码的密码值。

      1. 在 Linux 里用 EAP_HOME/bin/jboss-cli.sh 命令、在 Windows 服务器里使用 EAP_HOME\bin\jboss-cli.bat 命令启动管理 CLI。输入 connect 连接到 localhost 上的域控制器,或 connect IP_ADDRESS 连接到远程服务器上的域控制器。
      2. 用下列命令指定 secret 值。请用前一步骤的 add-user 输出里返回的 secret 值来替换 SECRET_VALUE
        /core-service=management/security-realm=ManagementRealm/server-identity=secret:add(value="SECRET_VALUE") 
        :reload
        您应该看到下列输出结果:
         "outcome" => "success"
    • 配置主机通过 vault.sh 获取密码。

      1. 使用 vault.sh 脚本生成一个加密的密码。它将生成一个这样的字符串: VAULT::secret::password::ODVmYmJjNGMtZDU2ZC00YmNlLWE4ODMtZjQ1NWNmNDU4ZDc1TElORV9CUkVBS3ZhdWx0
        你可以在本指南的『敏感字符串的密码阀』里找到更多信息:第 11.13.1 节 “关于保护明码文件里的敏感字符”
      2. 在 Linux 里用 EAP_HOME/bin/jboss-cli.sh 命令、在 Windows 服务器里使用 EAP_HOME\bin\jboss-cli.bat 命令启动管理 CLI。输入 connect 连接到 localhost 上的域控制器,或 connect IP_ADDRESS 连接到远程服务器上的域控制器。
      3. 用下列命令指定 secret 值。请用前一步骤生成的遮掩密码替换 SECRET_VALUE
        /core-service=management/security-realm=ManagementRealm/server-identity=secret:add(value="${VAULT::secret::password::SECRET_VALUE}") 
        :reload
        您应该看到下列输出结果:
         "outcome" => "success"

        注意

        当在阀里创建一个密码时,它必须以明文而不是 Base64 编码来指定。
    • 指定密码为系统属性。

      下面的例子将 server.identity.password 用作密码的系统属性名称。
      1. 用管理 CLI 在服务器配置文件里指定密码的系统属性。
        1. 在 Linux 里用 EAP_HOME/bin/jboss-cli.sh 命令、在 Windows 服务器里使用 EAP_HOME\bin\jboss-cli.bat 命令启动管理 CLI。输入 connect 连接到 localhost 上的域控制器,或 connect IP_ADDRESS 连接到远程服务器上的域控制器。
        2. 输入下列命令来配置 secret 标识符以使用系统属性。
          /core-service=management/security-realm=ManagementRealm/server-identity=secret:add(value="${server.identity.password}") 
          :reload
          您应该看到下列输出结果:
           "outcome" => "success"
      2. 当你将密码指定为系统属性时,你可以用下列方法之一配置主机:
        • 在命令行里以明文输入密码来启动服务器,例如:
          -Dserver.identity.password=changeme

          注意

          密码必须以明文输入并对于任何执行 ps -ef 命令的用户可见。
        • 将密码放在属性文件里并将文件的 URL 作为命令行参数传入。
          1. 在属性文件里添加键/值对。例如:
            server.identity.password=changeme
          2. 用命令行参数启动服务器:
            --properties=URL_TO_PROPERTIES_FILE
            .
  5. 重启服务器。

    从主机现在将以主机名为用户名以及加密的字符串为密码来向主服务器进行验证。
结果

你的独立服务器,或者位于受管域的服务器组里的服务器,现在已被配置为 mod_cluster 工作节点。如果你部署一个群集应用程序,它的会话会被复制到所有的群集节点以用于失效切换,且它可以从外部的 Web 服务器或负载平衡器接受请求。在默认情况下,群集的每个节点都可以用自动发现来发现其他节点。要配置自动发现和 mod_cluster 子系统的其他专有设置,请参考 第 19.5.2 节 “配置 mod_cluster 子系统”。要配置 Apache HTTP 服务器,请参考 第 19.3.5 节 “将外部 Web 服务器用作 JBoss EAP 6 应用程序的 Web 前端”