22.4. 将 JBoss EAP 配置为前端负载均衡器
您可以配置 JBoss EAP 和 undertow 子系统,以充当前端负载平衡器,将请求代理到后端 JBoss EAP 服务器。由于 Undertow 使用异步 IO,因此负责连接的 IO 线程是请求中涉及的唯一线程。相同的线程也用于连接到后端服务器。
您可以使用以下协议:
-
HTTP 通过纯文本(
http),支持 HTTP/1 和 HTTP/2 (h2c) -
HTTP 通过安全连接(
https),支持 HTTP/1 和 HTTP/2 (h2) -
ajp (
ajp)
您可以定义 静态负载均衡器 并指定配置中的后端主机,或者使用 mod_cluster 前端 动态更新主机。
22.4.1. 使用 mod_cluster 将 undertow 配置为负载平衡器 复制链接链接已复制到粘贴板!
您可以使用内置的 mod_cluster 前端负载平衡器来负载平衡其他 JBoss EAP 实例。
此流程假设您在受管域中运行,并已配置了以下内容:
用作负载平衡器的 JBoss EAP 服务器。
此服务器使用
load-balancer配置文件,它绑定到load-balancer-sockets套接字绑定组。注意load-balancer配置集已预先配置了套接字绑定 mod-cluster Undertow 过滤器,并在默认主机中引用到过滤器,以便将此服务器用作前端负载平衡器。* 两个 JBoss EAP 服务器,它们充当后端服务器。** 这些服务器在集群中运行,并使用ha配置集,该配置文件绑定到ha-sockets套接字绑定组。:要部署到后端服务器的 distributable 应用程序。
配置 mod_cluster 前端负载均衡器
以下步骤对受管域中的服务器进行负载平衡,但可以对其进行调整以应用到一组单机服务器。确保更新 management CLI 命令值以适合您的环境。
流程
设置 mod_cluster 公告安全密钥。
添加 advertise 安全密钥可让负载均衡器和服务器在发现过程中进行身份验证。
使用以下管理 CLI 命令设置 mod_cluster 公告安全密钥。
/profile=ha/subsystem=modcluster/proxy=default:write-attribute(name=advertise-security-key, value=mypassword)
/profile=ha/subsystem=modcluster/proxy=default:write-attribute(name=advertise-security-key, value=mypassword)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 更新 mod_cluster 负载平衡器的安全密钥。
使用以下管理 CLI 命令,为 mod_cluster 过滤器设置安全密钥:
/profile=load-balancer/subsystem=undertow/configuration=filter/mod-cluster=load-balancer:write-attribute(name=security-key,value=mypassword)
/profile=load-balancer/subsystem=undertow/configuration=filter/mod-cluster=load-balancer:write-attribute(name=security-key,value=mypassword)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
建议仅向内部网络公开 mod_cluster 使用的管理和公告套接字绑定,而不是公共 IP 地址。
负载平衡器 JBoss EAP 服务器现在可以对两个后端 JBoss EAP 服务器进行负载平衡。
多个 mod_cluster 配置
mod_cluster 子系统支持多个命名代理配置,允许向反向代理注册非默认 undertow 服务器。此外,这允许单个应用服务器节点注册到不同的代理服务器组。
以下示例将 ajp-listener、服务器和主机添加到 undertow 服务器。它还添加了一个新的 mod_cluster 配置,它使用广播机制注册主机。
22.4.2. 在负载均衡器中启用等级的会话关联性 复制链接链接已复制到粘贴板!
您必须在负载均衡器中启用等级的会话关联性,才能具有多个会话关联性,在 distributable-web 子系统中排序路由。有关 distributable-web 子系统和不同的关联性选项的更多信息,请参阅 JBoss EAP 开发指南中的 distributable-web 子系统配置。
分隔节点路由的默认分隔符为 。如果要不同的值,您可以配置 关联性 资源的 delimiter 属性。
流程
为负载均衡器启用等级的会话关联性:
/subsystem=undertow/configuration=filter/mod-cluster=load-balancer/affinity=ranked:add
/subsystem=undertow/configuration=filter/mod-cluster=load-balancer/affinity=ranked:addCopy to Clipboard Copied! Toggle word wrap Toggle overflow 可选:配置
关联性资源的delimiter属性:/subsystem=undertow/configuration=filter/mod-cluster=load-balancer/affinity=ranked:write-attribute(name=delimiter,value=':')
/subsystem=undertow/configuration=filter/mod-cluster=load-balancer/affinity=ranked:write-attribute(name=delimiter,value=':')Copy to Clipboard Copied! Toggle word wrap Toggle overflow
22.4.3. 将 undertow 配置为静态负载均衡器 复制链接链接已复制到粘贴板!
要使用 Undertow 配置静态负载平衡器,您需要在 undertow 子系统中配置代理处理程序。要在 Undertow 中配置代理处理程序,您需要在将充当您的静态负载均衡器的 JBoss EAP 实例上执行以下操作:
- 添加反向代理处理程序
- 为每个远程主机定义出站套接字绑定
- 将每个远程主机添加到反向代理处理程序
- 添加反向代理位置
以下示例演示了如何将 JBoss EAP 实例配置为静态负载均衡器。JBoss EAP 实例位于 lb.example.com,并将在两个额外服务器之间负载平衡: server1.example.com 和 server2.example.com。负载平衡器将反向代理到位置 /app,并且使用 AJP 协议。
流程
添加反向代理处理程序:
/subsystem=undertow/configuration=handler/reverse-proxy=my-handler:add
/subsystem=undertow/configuration=handler/reverse-proxy=my-handler:addCopy to Clipboard Copied! Toggle word wrap Toggle overflow 为每个远程主机定义出站套接字绑定:
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-host1/:add(host=server1.example.com, port=8009) /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-host2/:add(host=server2.example.com, port=8009)
/socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-host1/:add(host=server1.example.com, port=8009) /socket-binding-group=standard-sockets/remote-destination-outbound-socket-binding=remote-host2/:add(host=server2.example.com, port=8009)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 将每个远程主机添加到反向代理处理器中:
/subsystem=undertow/configuration=handler/reverse-proxy=my-handler/host=host1:add(outbound-socket-binding=remote-host1, scheme=ajp, instance-id=myroute1, path=/test) /subsystem=undertow/configuration=handler/reverse-proxy=my-handler/host=host2:add(outbound-socket-binding=remote-host2, scheme=ajp, instance-id=myroute2, path=/test)
/subsystem=undertow/configuration=handler/reverse-proxy=my-handler/host=host1:add(outbound-socket-binding=remote-host1, scheme=ajp, instance-id=myroute1, path=/test) /subsystem=undertow/configuration=handler/reverse-proxy=my-handler/host=host2:add(outbound-socket-binding=remote-host2, scheme=ajp, instance-id=myroute2, path=/test)Copy to Clipboard Copied! Toggle word wrap Toggle overflow 添加反向代理位置:
/subsystem=undertow/server=default-server/host=default-host/location=\/test:add(handler=my-handler)
/subsystem=undertow/server=default-server/host=default-host/location=\/test:add(handler=my-handler)Copy to Clipboard Copied! Toggle word wrap Toggle overflow
当访问 lb.example.com:8080/app 时,您现在会看到从 server1.example.com 和 server2.example.com 代理的内容。