3.3. 使用 mod_proxy_cluster时 Apache HTTP 服务器负载均衡配置
在 Apache HTTP Server 2.1 及更高版本中,默认情况下,Apache HTTP 服务器正确配置了 mod_proxy_cluster
。有关设置自定义配置的更多信息 ,请参阅配置基本代理服务器。
mod_proxy_cluster
的配置文件示例
根据您是否通过 Red Hat JBoss Core Services (JBCS)或使用 Red Hat Enterprise Linux (RHEL) Application Streams 安装 mod_proxy_cluster
,请考虑以下指南:
-
JBCS 在
JBCS_HOME/httpd/conf.d/ 目录中提供了
的示例配置文件。mod_
proxy_cluster -
RHEL 在
/etc/httpd/conf.d/
目录中提供了mod_proxy_cluster
的示例配置文件。
mod_proxy_cluster
的示例配置文件命名为 mod_proxy_cluster.conf.sample
。要使用此示例而不是创建自己的配置文件,您可以删除 .sample
扩展,并根据需要修改文件内容。
您还可以使用红帽客户门户网站上的 Load Balancer 配置工具,快速为 mod_proxy_cluster
和 Tomcat worker 节点生成最佳配置模板。当您将 Load Balancer Configuration 工具用于 Apache HTTP Server 2.4.57 时,请确保选择 2.4.x
作为 Apache 版本,然后选择 Tomcat/JWS
作为后端配置。
使用 mod_proxy_cluster
的指南
考虑以下使用 mod_proxy_cluster
连接器的准则:
-
当使用
mod_proxy_cluster
连接器时,您必须启用mod_proxy
模块并禁用mod_proxy_balancer
模块。 -
如果您希望
mod_proxy_cluster
使用 Apache JServ 协议(AJP),您必须启用proxy_ajp_module
。 -
使用 AJPSecret
your_secret
为 AJP 后端提供机密。如果your_secret
与后端中配置的值不匹配,则后端会为通过代理发送的任何请求发送503
错误响应。
Red Hat JBoss Core Services 2.4.57 不支持将非升级的连接连接到后端 websocket 服务器。这意味着,当您为 mod_proxy_wstunnel
模块配置 ProxyPass
指令时,您必须确保 upgrade 参数没有设置为 NONE
。有关 mod_proxy_wstunnel
的更多信息,请参阅 Apache 文档。
3.3.1. 配置基本代理服务器 复制链接链接已复制到粘贴板!
您可以将 Apache HTTP 服务器配置为充当代理服务器,以转发 web 客户端和后端 web 服务器之间的请求和响应。您必须配置代理服务器监听程序,以接收来自后端 worker 节点的连接请求和响应。当您要配置使用 mod_proxy_cluster
的负载平衡代理服务器时,还必须为管理频道配置虚拟主机。
先决条件
- 已安装 Apache HTTP 服务器。
-
如果您使用 Application Streams 安装 Apache HTTP 服务器的 RHEL 发行版,您可以 手动安装
mod_proxy_cluster
。 - 您必须为代理服务器监听程序指定的端口用于传入的 TCP 连接。
流程
进入 Apache HTTP 服务器配置目录:
-
如果您使用 JBCS Apache HTTP 服务器,请转到
JBCS_HOME/httpd/conf.d
目录。 -
如果您使用 RHEL Apache HTTP 服务器,请转到
/etc/httpd/conf.d
目录。
-
如果您使用 JBCS Apache HTTP 服务器,请转到
-
打开
mod_proxy_cluster.conf
文件。 要为代理服务器创建
Listen
指令,请在mod_proxy_cluster.conf
文件中输入以下行:Listen IP_ADDRESS:PORT_NUMBER
Listen IP_ADDRESS:PORT_NUMBER
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在前面的示例中,将
IP_ADDRESS
替换为代理服务器用来与 worker 节点通信的服务器网络接口地址,并将PORT_NUMBER
替换为代理服务器侦听的端口。确保端口为传入 TCP 连接打开。
要创建虚拟主机,请在
mod_proxy_cluster.conf
文件中输入以下详情:Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意在前面的示例中,将
IP_ADDRESS
和PORT_NUMBER
替换为您为Listen
指令指定的服务器网络接口地址和端口号。此地址和端口组合仅用于
mod_proxy_cluster
管理消息。此地址和端口组合不用于常规流量。
有关启动 Apache HTTP 服务器服务的更多信息,请参阅 Red Hat JBoss Core Services Apache HTTP Server 安装指南。
3.3.1.1. 禁用服务器广告 复制链接链接已复制到粘贴板!
代理服务器使用 UDP 多播来公告其自身。AdvertiseFrequency
指令指示服务器默认每 10 秒发送服务器广告消息。服务器广告消息包含您在 VirtualHost
定义中指定的 IP_ADDRESS
和 PORT_NUMBER
。配置为响应服务器广告的 worker 节点使用此信息将自身注册到代理服务器。如果要防止 worker 节点使用代理服务器注册,您可以选择禁用服务器广告。
当代理服务器和 worker 节点之间有 UDP 多播时,服务器广告会添加 worker 节点,而无需在代理服务器上进一步配置。服务器广告只需要 worker 节点上的配置最小。
先决条件
流程
进入 Apache HTTP 服务器配置目录:
-
如果您使用 JBCS Apache HTTP 服务器,请转到
JBCS_HOME/httpd/conf.d
目录。 -
如果您使用 RHEL Apache HTTP 服务器,请转到
/etc/httpd/conf.d
目录。
-
如果您使用 JBCS Apache HTTP 服务器,请转到
-
打开
mod_proxy_cluster.conf
文件。 在
VirtualHost
定义中添加以下指令:ServerAdvertise Off
ServerAdvertise Off
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意如果禁用服务器公告,或者代理服务器和 worker 节点之间没有 UDP 多播,您可以使用静态代理服务器列表配置 worker 节点。在这两种情况下,您不需要使用 worker 节点列表配置代理服务器。
3.3.1.2. 日志记录 worker 节点详情 复制链接链接已复制到粘贴板!
当您配置使用 mod_proxy_cluster
的负载平衡代理服务器时,您可以选择将 Apache HTTP 服务器配置为记录处理请求的每个 worker 节点的详细信息。如果您需要对负载均衡器进行故障排除,日志记录 worker 节点详情会很有用。
先决条件
流程
进入 Apache HTTP 服务器配置目录:
-
如果您使用 JBCS Apache HTTP 服务器,请转到
JBCS_HOME/httpd/conf.d
目录。 -
如果您使用 RHEL Apache HTTP 服务器,请转到
/etc/httpd/conf.d
目录。
-
如果您使用 JBCS Apache HTTP 服务器,请转到
-
打开
mod_proxy_cluster.conf
文件。 在 Apache HTTP Server
LogFormat
指令中添加以下详情:%{BALANCER_NAME}e :: The name of the balancer that served the request. %{BALANCER_WORKER_NAME}e :: The name of the worker node that served the request.
%{BALANCER_NAME}e :: The name of the balancer that served the request. %{BALANCER_WORKER_NAME}e :: The name of the worker node that served the request.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.3.2. 在 mod_proxy_cluster中配置 JBoss Web Server worker 节点 复制链接链接已复制到粘贴板!
使用 mod_proxy_cluster
时,您可以将后端 worker 节点配置为仅在非集群模式下运行的 JBoss Web Server Tomcat 服务。在这种情况下,mod_proxy_cluster
在计算负载均衡因素时,在任何特定时间都只能使用一个负载指标。
JBoss Web Server worker 节点只支持 mod_proxy_cluster
功能的子集。JBoss EAP 提供了完整的 mod_proxy_cluster
功能。
先决条件
流程
要为 JBoss Web 服务器添加监听程序,在
JWS_HOME/tomcat <VERSION> /conf/server.xml
文件中添加以下Listener
元素,在其他Listener
元素下:<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="true" stickySession="true" stickySessionForce="false" stickySessionRemove="true" />
<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="true" stickySession="true" stickySessionForce="false" stickySessionRemove="true" />
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要为 worker 节点赋予一个唯一的身份,在
JWS_HOME/tomcat <VERSION> /conf/server.xml
文件中,将jvmRoute
属性和值添加到Engine
元素:<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker01">
<Engine name="Catalina" defaultHost="localhost" jvmRoute="worker01">
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 要配置
STATUS MCMP
消息频率,请修改org.jboss.modcluster.container.catalina.status-frequency
Java 系统属性。例如:
-Dorg.jboss.modcluster.container.catalina.status-frequency=6
-Dorg.jboss.modcluster.container.catalina.status-frequency=6
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意JBoss Web Server worker 节点定期向 Apache HTTP 服务器平衡发送包含其当前负载状态的状态消息。这些消息的默认频率为 10 秒。如果您有数百个 worker 节点,S
TAMP
消息可以增加 Apache HTTP 服务器网络上的流量拥塞。您可以通过修改
org.jboss.modcluster.container.catalina.status-frequency
Java 系统属性来配置MCMP
消息频率。默认情况下,属性接受以秒为单位指定的值,乘以 10。例如,将属性设为1
表示 10 秒。在前面的示例中,属性设置为6
,即 60 秒。可选: 要为代理服务器公告配置防火墙,请完成以下步骤,以便在 worker 节点的防火墙上为 UDP 连接打开端口
23364
:对于 RHEL:
firewall-cmd --permanent --zone=public --add-port=23364/udp
firewall-cmd --permanent --zone=public --add-port=23364/udp
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 对于使用 PowerShell 的 Windows Server:
Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList '-command "NetSh Advfirewall firewall add rule name="UDP Port 23364" dir=in action=allow protocol=UDP localport=23364"' Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList '-command "NetSh Advfirewall firewall add rule name="UDP Port 23364" dir=out action=allow protocol=UDP localport=23364"'
Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList '-command "NetSh Advfirewall firewall add rule name="UDP Port 23364" dir=in action=allow protocol=UDP localport=23364"' Start-Process "$psHome\powershell.exe" -Verb Runas -ArgumentList '-command "NetSh Advfirewall firewall add rule name="UDP Port 23364" dir=out action=allow protocol=UDP localport=23364"'
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意当代理服务器使用
mod_proxy_cluster
时,代理服务器可以使用 UDP 多播来公告其自身。大多数操作系统防火墙默认阻止服务器公告功能。要启用服务器公告并接收这些多播消息,您可以为 worker 节点的防火墙上的 UDP 连接打开端口23364
,如上例中所示。
3.3.3. 配置 worker 节点以使用静态代理服务器列表操作 复制链接链接已复制到粘贴板!
服务器公告允许 worker 节点动态发现并使用代理服务器注册。如果 UDP 多播不可用,或者禁用服务器广告,则必须使用代理服务器地址和端口的静态列表配置 JBoss Web Server worker 节点。
流程
-
打开
JWS_HOME/tomcat <VERSION> /conf/server.xml
文件。 要定义
mod_proxy_cluster
侦听器并禁用动态代理发现,修改ModClusterListener
的Listener
元素。例如:
<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="false" stickySession="true" stickySessionForce="false" stickySessionRemove="true"/>
<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="false" stickySession="true" stickySessionForce="false" stickySessionRemove="true"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注意确保将
advertise
属性设置为false
。要创建静态代理服务器列表,请通过以以下格式添加以逗号分隔的代理列表来更新
proxyList
属性:IP_ADDRESS: PORT ,IP_ADDRESS:PORT:PORT
例如:
<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="false" stickySession="true" stickySessionForce="false" stickySessionRemove="true" proxyList="10.33.144.3:6666,10.33.144.1:6666"/>
<Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="false" stickySession="true" stickySessionForce="false" stickySessionRemove="true" proxyList="10.33.144.3:6666,10.33.144.1:6666"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow