3.3. 域集群模式
域模式是集中管理和发布服务器的配置的一种方式。
以标准模式运行集群可能会快速变为聚合,因为集群大小会增大。每次需要更改配置更改时,都必须在集群的每个节点中执行它。域模式通过提供存储和发布配置的中心来解决此问题。设置可能非常复杂,但在最后需要它。此功能内置在 Red Hat Single Sign-On 派生的 JBoss EAP 应用服务器中。
本指南将介绍域模式的基本知识。应从 JBoss EAP 配置指南 中获取集群中如何设置域模式的详细步骤。
以下是在域模式下运行的一些基本概念。
- 域控制器
- 域控制器是一种负责存储、管理和发布集群中每个节点的常规配置的进程。此过程是从哪些节点获取其配置的核心点。
- 主机控制器
- 主机控制器负责管理特定计算机上的服务器实例。您可以将其配置为运行一个或多个服务器实例。域控制器也可以与每台机器上的主机控制器交互,以管理集群。为减少正在运行的进程的数量,域控制器在其上运行的计算机上也充当主机控制器。
- 域配置文件
- 域配置文件是一组指定的配置,供服务器用于从中启动。域控制器可以定义由不同服务器使用的多个域配置文件。
- 服务器组
- 服务器组是服务器的集合。它们作为一个进行管理和配置。您可以为服务器组分配域配置文件,并且该组中的每个服务都将使用该域配置文件作为其配置。
在域模式中,主控节点上启动域控制器。集群的配置驻留在域控制器中。接下来,在集群中的每个机器上启动主机控制器。每个主机控制器部署配置指定在该计算机上启动多少个 Red Hat Single Sign-On 服务器实例。当主机控制器启动时,它会启动尽可能多的 Red Hat Single Sign-On 服务器实例。这些服务器实例从域控制器拉取其配置。
在一些环境中,如 Microsoft Azure,域模式不适用。请参阅 JBoss EAP 文档。
3.3.1. 域配置
本指南中的各种其他章节将指导您配置数据库、HTTP 网络连接、缓存和其他基础架构相关事项等各个方面。虽然独立模式使用 standalone.xml 文件来配置这些内容,但域模式使用 …/domain/configuration/domain.xml 配置文件。这是定义 Red Hat Single Sign-On 服务器的域配置文件和服务器组的位置。
domain.xml
您在域控制器运行时对此文件所做的任何更改都不会生效,甚至可能被服务器覆盖。而是使用命令行脚本或 JBoss EAP 的 Web 控制台。如需更多信息,请参阅 JBoss EAP 配置指南。
让我们来看看这个 domain.xml 文件的一些方面。auth-server-standalone
和 auth-server-clustered
配置集
XML 块是您要做出大量配置决策的位置。您要在此处配置诸如网络连接、缓存和数据库连接等内容。
auth-server 配置集
<profiles> <profile name="auth-server-standalone"> ... </profile> <profile name="auth-server-clustered"> ... </profile>
auth-server-standalone
配置集是一个非集群的设置。auth-server-clustered
配置集是集群设置。
如果您进一步向下滚动,您将看到定义了各种 socket-binding-groups
。
socket-binding-groups
<socket-binding-groups> <socket-binding-group name="standard-sockets" default-interface="public"> ... </socket-binding-group> <socket-binding-group name="ha-sockets" default-interface="public"> ... </socket-binding-group> <!-- load-balancer-sockets should be removed in production systems and replaced with a better software or hardware based one --> <socket-binding-group name="load-balancer-sockets" default-interface="public"> ... </socket-binding-group> </socket-binding-groups>
此配置定义了与每个 Red Hat Single Sign-On 服务器实例一起打开的各种连接器的默认端口映射。包含 ${…}
的任何值都是可在命令行中使用 -D
开关覆盖的值,即.
$ domain.sh -Djboss.http.port=80
Red Hat Single Sign-On 的服务器组的定义位于 server-groups
XML 块中。它指定使用的域配置文件(默认
),以及主机控制器引导实例时 Java 虚拟机的一些默认引导参数。它还将 socket-binding-group
绑定到服务器组。
服务器组
<server-groups> <!-- load-balancer-group should be removed in production systems and replaced with a better software or hardware based one --> <server-group name="load-balancer-group" profile="load-balancer"> <jvm name="default"> <heap size="64m" max-size="512m"/> </jvm> <socket-binding-group ref="load-balancer-sockets"/> </server-group> <server-group name="auth-server-group" profile="auth-server-clustered"> <jvm name="default"> <heap size="64m" max-size="512m"/> </jvm> <socket-binding-group ref="ha-sockets"/> </server-group> </server-groups>
3.3.2. 主机控制器配置
Red Hat Single Sign-On 附带两个主机控制器配置文件,它们位于 …/domain/configuration/ 目录中: host-master.xml 和 host-slave.xml。host-master.xml 配置为引导域控制器、负载均衡器和一个 Red Hat Single Sign-On 服务器实例。host-slave.xml 配置为与域控制器通信并引导一个 Red Hat Single Sign-On 服务器实例。
负载均衡器不是所需的服务。它已存在,以便您可以在开发机器上轻松测试驱动集群。虽然在生产环境中可用,但如果您有您要使用的不同硬件或软件负载均衡器,您可以选择替换它。
主机控制器配置
要禁用负载均衡器服务器实例,请编辑 host-master.xml 并注释掉或删除 "load-balancer"
条目。
<servers> <!-- remove or comment out next line --> <server name="load-balancer" group="loadbalancer-group"/> ... </servers>
关于此文件的另一个值得注意的是,身份验证服务器实例的声明。它有一个 port-offset
设置。domain.xml socket-binding-group
或服务器组中定义的任何网络端口都会向其中添加 port-offset
值。在这个示例域设置中,我们这样做,因此负载均衡器服务器打开的端口不会与启动的身份验证服务器实例冲突。
<servers> ... <server name="server-one" group="auth-server-group" auto-start="true"> <socket-bindings port-offset="150"/> </server> </servers>
3.3.3. 服务器实例工作目录
主机文件中定义的每个 Red Hat Single Sign-On 服务器实例都会在 …/domain/servers/{SERVER NAME} 下创建一个工作目录。可以有一些其他配置,以及服务器实例需要或创建任何临时、日志或数据文件。这些服务器目录的结构最终像任何其他 JBoss EAP 引导服务器一样。
工作目录
3.3.4. 域启动脚本
在域模式下运行服务器时,您需要运行特定的脚本来根据您的操作系统引导服务器。这些脚本位于服务器分发的 bin/ 目录中。
域启动脚本
引导服务器:
Linux/Unix
$ .../bin/domain.sh --host-config=host-master.xml
Windows
> ...\bin\domain.bat --host-config=host-master.xml
运行引导脚本时,您需要传递要通过 --host-config
参数使用的主机控制配置文件。
3.3.5. 集群域示例
您可以使用开箱即用的 domain.xml 配置测试驱动器集群。这个示例域旨在在一台机器上运行并引导:
- 域控制器
- HTTP 负载均衡器
- 2 Red Hat Single Sign-On 服务器实例
要在两台机器上模拟运行集群,您需要运行 domain.sh
脚本两次以启动两个单独的主机控制器。第一个是 master 主机控制器,它将启动域控制器、HTTP 负载均衡器和一个 Red Hat Single Sign-On 身份验证服务器实例。第二个是从属主机控制器,仅启动身份验证服务器实例。
3.3.5.1. 设置到域控制器的连接
在引导前,您必须配置 slave 主机控制器,以便它可以安全地与域控制器通信。如果不执行此操作,则从主机将无法从域控制器获取集中式配置。要设置安全连接,您必须创建一个服务器 admin 用户和在主设备和从设备之间共享的机密。您可以通过运行 …/bin/add-user.sh
脚本来完成此操作。
当您运行脚本时,选择 Management User
并回答 yes
,当它询问新用户是否将用于一个 AS 进程连接到另一个进程时,请回答 yes。这将生成一个 secret,您需要剪切并粘贴到 …/domain/configuration/host-slave.xml 文件中。
添加 App Server Admin
$ 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. Using realm 'ManagementRealm' as discovered from the existing property files. Username : admin Password recommendations are listed below. To modify these restrictions edit the add-user.properties configuration file. - The password should not be one of the following restricted values {root, admin, administrator} - The password should contain at least 8 characters, 1 alphabetic character(s), 1 digit(s), 1 non-alphanumeric symbol(s) - The password should be different from the username Password : Re-enter Password : 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 'admin' for realm 'ManagementRealm' Is this correct yes/no? yes Added user 'admin' to file '/.../standalone/configuration/mgmt-users.properties' Added user 'admin' to file '/.../domain/configuration/mgmt-users.properties' Added user 'admin' with groups to file '/.../standalone/configuration/mgmt-groups.properties' Added user 'admin' with groups to file '/.../domain/configuration/mgmt-groups.properties' 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="bWdtdDEyMyE=" />
add-user.sh 不将用户添加到 Red Hat Single Sign-On 服务器,而是添加到底层 JBoss Enterprise Application Platform 中。以上脚本中使用和生成的凭证仅用于示例目的。请使用系统上生成的。
接下来,将 secret 值剪切并粘贴到 …/domain/configuration/host-slave.xml 文件中,如下所示:
<management> <security-realms> <security-realm name="ManagementRealm"> <server-identities> <secret value="bWdtdDEyMyE="/> </server-identities>
您还需要在 …/domain/configuration/host-slave.xml 文件中添加创建用户的用户名:
<remote security-realm="ManagementRealm" username="admin">
3.3.5.2. 运行启动脚本
由于我们在一台开发机器上模拟两个节点集群,因此您将运行 启动脚本两次:
引导 master
$ domain.sh --host-config=host-master.xml
引导从设备
$ domain.sh --host-config=host-slave.xml
要试用,请打开浏览器并访问 http://localhost:8080/auth。