第 13 章 Web、HTTP 连接器和 HTTP 群集
13.1. 配置 mod_cluster 工作节点 复制链接链接已复制到粘贴板!
mod_cluster 工作节点(Worker Node)由一个 JBoss EAP 服务器组成。这个服务器可以是受管域服务器组的一部分,或者是一个独立服务器。在 JBoss EAP 里会有一个单独的进程运行,它管理群集里的所有节点。它被称为主节点。关于工作节点的更多概念,请参考《红帽 JBoss EAP 6.1 管理和配置指南》里的『工作节点』章节。关于 HTTPD 负载平衡的概述,请参考 《JBoss EAP 6.1 管理和配置指南》里的『HTTP 连接器概述』章节。
mod_cluster
子系统配置一次。要配置 mod_cluster
子系统,请参考《管理和配置指南》里的『配置 mod_cluster 子系统』。每个工作节点都是独立配置的,所以你可以为每个要加入群集的节点重复这个步骤。
工作节点配置
- 如果你使用了独立服务器,它必须以
standalone-ha
配置集启动。 - 如果你使用受管域,你的服务器组必须使用
ha
或full-ha
配置集,以及ha-sockets
或full-ha-sockets
套接字绑定组。JBoss EAP 6 附带满足这些要求的启用了群集的服务器组other-server-group
。
注意
/profile=full-ha
。
过程 13.1. 配置工作节点
配置网络接口。
在默认情况下,网络接口都是127.0.0.1
。每个容纳独立服务器或服务器组里的一个或多个服务器的物理主机的接口都需要进行配置以使用其他服务器可以看到的公共 IP 地址。要修改 JBoss EAP 6 主机的 IP 地址,你需要关闭它并直接修改配置文件。这是因为驱动管理控制台和管理 CLI 的 Management API 依赖于稳定的管理地址。遵循下列步骤将群集里的每个服务器的 IP 地址修改为主节点的公共 IP 地址。- 完全地关闭服务器。
- 对于受管域,编辑位于
EAP_HOME/domain/configuration/
里的host.xml
,而对于独立服务器,编辑位于EAP_HOME/standalone/configuration/
里的standalone-ha.xml
。 - 找到
<interfaces>
元素。有三个接口需要配置,management
、public
和unsecured
。你都要修改127.0.0.1
为主机的外部 IP 地址。 - 对于参与受管域但不是主节点的主机,找到
<host
元素。请注意,它没有结尾的>
符号,这是因为它包含了属性。将其 name 属性从master
修改为其他的唯一名称,每个从节点都应不同。这个名称也将被从节点用来标识群集,请注意这一点。 - 对于需要加入受管域的刚配置好的主机,找到
<domain-controller>
元素。注释或删除<local />
元素,并添加下列一行,修改 IP 地址(X.X.X.X
)为域控制台的地址。这个步骤不适用于独立服务器。<remote host="X.X.X.X" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>
<remote host="X.X.X.X" port="${jboss.domain.master.port:9999}" security-realm="ManagementRealm"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 保存文件并退出。
为每个从服务器配置验证。
每个从服务器都需要在域控制器或独立主服务器的ManagementRealm
里创建一个用户名和密码。在域控制器或独立主服务器上,运行EAP_HOME/bin/add-user.sh
命令。请用和从服务器相同的用户名添加一个用户到ManagementRealm
。当提示这个用户是否需要到外部的 JBoss AS 实例验证,请选择yes
。下面是这个命令的输入和输出的例子,从服务器名为slave1
,其密码为changeme
。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 从
add-user.sh
的输出里复制 Base64 编码的<secret>
元素。如果你计划验证时指定 Base64 编码的密码,请复制add-user.sh
的输出里的<secret>
元素值,你在下面的步骤里需要用到它。修改从主机的安全区以使用新的验证。
- 重新打开从主机的
host.xml
或standalone-ha.xml
文件。 - 找到
<security-realms>
元素。这是你配置安全区(Security Realm)的地方。 - 你可以用下列方法之一指定 secret 值:
在配置文件里指定 Base64 编码的密码值。
- 在
<security-realm name="ManagementRealm">
行下添加下列 XML 片段:Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 用前一步骤的
add-user.sh
输出里返回的 secret 值来替换 "Y2hhbmdlbWU=" 。
配置主机通过 vault.sh 获取密码。
- 使用
vault.sh
脚本生成一个加密的密码。它将生成一个这样的字符串:VAULT::secret::password::ODVmYmJjNGMtZDU2ZC00YmNlLWE4ODMtZjQ1NWNmNDU4ZDc1TElORV9CUkVBS3ZhdWx0
。你可以在本指南的『敏感字符串的密码阀』里找到更多信息:第 10.11.1 节 “关于保护明码文件里的敏感字符”。 - 在
<security-realm name="ManagementRealm">
行下添加下列 XML 片段:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 请用前一步骤生成的加密密码替换 secret 值。注意
当在阀里创建一个密码时,它必须以明文而不是 Base64 编码来指定。
指定密码为系统属性。
- 在
<security-realm name="ManagementRealm">
行下直接添加下列 XML 代码块。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 当你将密码指定为系统属性时,你可以用下列方法之一配置主机:
- 在命令行里以明文输入密码来启动服务器,例如:
-Dserver.identity.password=changeme
-Dserver.identity.password=changeme
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意
密码必须以明文输入并对于任何执行ps -ef
命令的用户可见。 - 将密码放在属性文件里并将文件的 URL 作为命令行参数传入。
- 在属性文件里添加键/值对。例如:
server.identity.password=changeme
server.identity.password=changeme
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 用命令行参数启动服务器:.
--properties=URL_TO_PROPERTIES_FILE
--properties=URL_TO_PROPERTIES_FILE
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 保存文件并退出。
重启服务器。
从主机现在将以主机名为用户名以及加密的字符串为密码来向主服务器进行验证。
你的独立服务器,或者位于受管域的服务器组里的服务器,现在已被配置为 mod_cluster 工作节点。如果你部署一个群集应用程序,它的会话会被复制到所有的群集节点以用于失效切换,且它可以从外部的 HTTPD 服务器或负载平衡器接受请求。在默认情况下,群集的每个节点都可以用自动发现来发现其他节点。要配置自动发现和 mod_cluster
子系统的其他专有设置,请参考《管理和配置指南》里的『配置 mod_cluster 子系统』章节。要配置 Apache HTTPD 服务器,请参考《管理和配置指南》里的『将外部 HTTPD 用作 JBoss EAP 应用程序的 Web 前端』章节。