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)安装 mod_proxy_cluster 还是使用 Red Hat Enterprise Linux (RHEL) Application Streams,请考虑以下准则:

  • 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.62 时,请确保选择 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.62 不支持将非升级的连接隧道到后端 websocket 服务器。这意味着,当您为 mod_proxy_wstunnel 模块配置 ProxyPass 指令时,您必须确保 upgrade 参数没有设置为 NONE。有关 mod_proxy_wstunnel 的更多信息,请参阅 Apache 文档

3.3.1. 配置基本代理服务器

您可以将 Apache HTTP 服务器配置为作为代理服务器,在 web 客户端和后端 web 服务器之间转发请求和响应。您必须配置代理服务器监听程序,以接收来自后端 worker 节点的连接请求和响应。当您要配置使用 mod_proxy_cluster 的负载平衡代理服务器时,还必须为管理频道配置虚拟主机。

先决条件

流程

  1. 进入 Apache HTTP 服务器配置目录:

    • 如果您使用 JBCS Apache HTTP 服务器,请进入 JBCS_HOME/httpd/conf.d 目录。
    • 如果您使用 RHEL Apache HTTP 服务器,请转到 /etc/httpd/conf.d 目录。
  2. 打开 mod_proxy_cluster.conf 文件。
  3. 要为代理服务器创建 Listen 指令,请在 mod_proxy_cluster.conf 文件中输入以下行:

    Listen IP_ADDRESS:PORT_NUMBER
    注意

    在前面的示例中,将 IP_ADDRESS 替换为代理服务器用来与 worker 节点通信的服务器网络接口地址,并将 PORT_NUMBER 替换为代理服务器侦听的端口。

    确保端口已打开以传入 TCP 连接。

  4. 要创建虚拟主机,请在 mod_proxy_cluster.conf 文件中输入以下详情:

    <VirtualHost IP_ADDRESS:PORT_NUMBER>
       DirectoryIndex disabled
       <Location />
          Require ip IP_ADDRESS
       </Location>
    
       KeepAliveTimeout 60
       MaxKeepAliveRequests 0
    
       ManagerBalancerName mycluster
       AdvertiseFrequency 5
       EnableMCMPReceive On
    
       <Location /mod_cluster_manager>
          SetHandler mod_cluster-manager
          Require ip IP_ADDRESS
       </Location>
    
    </VirtualHost>
    重要

    如果您在虚拟主机中指定 EnableMCMPReceive 指令,则 Apache HTTP 服务器需要您始终在虚拟主机定义中使用 Location 元素而不是 Directory 元素。从 JBCS 2.4.62 开始,Apache HTTP 服务器不支持在同一虚拟主机中使用 Directory 元素和 EnableMCMPReceive 指令。如果您在同一虚拟主机中指定 Directory 元素和 EnableMCMPReceive 指令,则 Apache HTTP 服务器无法启动并记录一个错误,表示您应该使用 Location 元素。在 JBCS 2.4.62 中引入启动失败,因为与早期版本不兼容的破坏更改。

    注意

    在前面的示例中,将 IP_ADDRESSPORT_NUMBER 替换为您为 Listen 指令指定的服务器网络接口和端口号的地址。

    此地址和端口组合仅用于 mod_proxy_cluster 管理消息。此地址和端口组合不用于常规流量。

有关启动 Apache HTTP 服务器服务的更多信息,请参阅 Red Hat JBoss Core Services Apache HTTP Server 安装指南

3.3.1.1. 禁用服务器公告

代理服务器使用 UDP 多播公告其自身。AdvertiseFrequency 指令指示服务器默认每 10 秒发送服务器公告消息。服务器公告消息包含您在 VirtualHost 定义中指定的 IP_ADDRESSPORT_NUMBER。配置为响应服务器广告的 worker 节点使用此信息将自身注册到代理服务器。如果要防止 worker 节点注册到代理服务器,您可以选择禁用服务器公告。

注意

当代理服务器和 worker 节点之间有 UDP 多播时,服务器公告会添加 worker 节点,而无需进一步配置代理服务器。服务器公告只需要 worker 节点上的最小配置。

流程

  1. 进入 Apache HTTP 服务器配置目录:

    • 如果您使用 JBCS Apache HTTP 服务器,请进入 JBCS_HOME/httpd/conf.d 目录。
    • 如果您使用 RHEL Apache HTTP 服务器,请转到 /etc/httpd/conf.d 目录。
  2. 打开 mod_proxy_cluster.conf 文件。
  3. VirtualHost 定义中添加以下指令:

    ServerAdvertise Off
    注意

    如果服务器公告被禁用,或者 UDP 多播在代理服务器和 worker 节点间不可用,您可以使用静态代理服务器列表配置 worker 节点。在这两种情况下,您不需要使用 worker 节点列表配置代理服务器。

3.3.1.2. 日志记录 worker 节点详情

当您配置使用 mod_proxy_cluster 的负载平衡代理服务器时,您可以选择配置 Apache HTTP 服务器来记录处理请求的每个 worker 节点的详情。如果您需要对负载均衡器进行故障排除,日志记录 worker 节点详情会很有用。

流程

  1. 进入 Apache HTTP 服务器配置目录:

    • 如果您使用 JBCS Apache HTTP 服务器,请进入 JBCS_HOME/httpd/conf.d 目录。
    • 如果您使用 RHEL Apache HTTP 服务器,请转到 /etc/httpd/conf.d 目录。
  2. 打开 mod_proxy_cluster.conf 文件。
  3. 在 Apache HTTP 服务器 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.

使用 mod_proxy_cluster 时,您可以将后端 worker 节点配置为仅在非集群模式下运行的 JBoss Web Server Tomcat 服务。在这种情况下,mod_proxy_cluster 在计算负载均衡因素时,在任何特定时间只能使用一个负载指标。

注意

JBoss Web Server worker 节点只支持 mod_proxy_cluster 功能的子集。JBoss EAP 提供了完整的 mod_proxy_cluster 功能。

流程

  1. 要在 JWS_HOME/tomcat <VERSION> /conf/server.xml 文件中添加监听程序到 JBoss Web 服务器,请在其他 Listener 元素下添加以下 Listener 元素:

    <Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="true" stickySession="true" stickySessionForce="false" stickySessionRemove="true" />
  2. 要在 JWS_HOME/tomcat <VERSION> /conf/server.xml 文件中为 worker 节点指定一个唯一的身份,请将 jvmRoute 属性和值添加到 Engine 元素:

    <Engine name="Catalina" defaultHost="localhost" jvmRoute="worker01">
  3. 要配置 STATUS MCMP 消息频率,请修改 org.jboss.modcluster.container.catalina.status-frequency Java 系统属性。

    例如:

    -Dorg.jboss.modcluster.container.catalina.status-frequency=6
    注意

    JBoss Web 服务器 worker 节点定期向 Apache HTTP 服务器均衡发送包含其当前负载状态的状态消息。这些消息的默认频率为 10 秒。如果您有数百个 worker 节点,则 STATUS MCMP 消息可能会增加 Apache HTTP 服务器网络上的流量拥塞。

    您可以通过修改 org.jboss.modcluster.container.catalina.status-frequency Java 系统属性来配置 MCMP 消息频率。默认情况下,属性接受以秒乘以 10 的值。例如,将属性设置为 1 表示 10 秒。在前面的示例中,属性设置为 6,即 60 秒。

  4. 可选: 要为代理服务器公告配置防火墙,请完成以下步骤,为 worker 节点的防火墙上的 UDP 连接打开端口 23364

    • 对于 RHEL:

      firewall-cmd --permanent --zone=public --add-port=23364/udp
    • 对于使用 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"'
      注意

      当代理服务器使用 mod_proxy_cluster 时,代理服务器可以使用 UDP 多播来公告其自身。大多数操作系统防火墙默认阻止服务器公告功能。要启用服务器公告并接收这些多播信息,您可以在 worker 节点的防火墙上为 UDP 连接打开端口 23364,如上例所示。

服务器公告允许 worker 节点动态发现并注册到代理服务器。如果 UDP 多播不可用,或者服务器公告被禁用,则必须使用代理服务器地址和端口的静态列表来配置 JBoss Web Server worker 节点。

流程

  1. 打开 JWS_HOME/tomcat &lt;VERSION&gt; /conf/server.xml 文件。
  2. 要定义 mod_proxy_cluster 侦听器并禁用动态代理发现,修改 ModClusterListenerListener 元素。

    例如:

    <Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="false" stickySession="true" stickySessionForce="false" stickySessionRemove="true"/>
    注意

    确保将 advertise 属性设置为 false

  3. 要创建静态代理服务器列表,请通过以以下格式添加以逗号分隔的代理列表来更新 proxyList 属性: IP_ADDRESS:PORT,IP_ADDRESS: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"/>
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

Theme

© 2026 Red Hat
返回顶部