搜索

3.3. 使用 mod_proxy_cluster时 Apache HTTP 服务器负载均衡配置

download PDF

在 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 的负载平衡代理服务器时,还必须为管理频道配置虚拟主机。

先决条件

流程

  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>
    
       <Directory />
          Require ip IP_ADDRESS
       </Directory>
    
       KeepAliveTimeout 60
       MaxKeepAliveRequests 0
    
       ManagerBalancerName mycluster
       AdvertiseFrequency 5
       EnableMCPMReceive On
    
    </VirtualHost>
    注意

    在前面的示例中,将 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
    注意

    如果禁用服务器公告,或者代理服务器和 worker 节点之间没有 UDP 多播,您可以使用静态代理服务器列表配置 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 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.

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 功能。

流程

  1. 要为 JBoss Web 服务器添加监听程序,在 JWS_HOME/tomcat &lt;VERSION&gt; /conf/server.xml 文件中添加以下 Listener 元素,在其他 Listener 元素下:

    <Listener className="org.jboss.modcluster.container.catalina.standalone.ModClusterListener" advertise="true" stickySession="true" stickySessionForce="false" stickySessionRemove="true" />
  2. 要为 worker 节点赋予一个唯一的身份,在 JWS_HOME/tomcat &lt;VERSION> /conf/server.xml 文件中,将 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 Server worker 节点定期向 Apache HTTP 服务器平衡发送包含其当前负载状态的状态消息。这些消息的默认频率为 10 秒。如果您有数百个 worker 节点,S TAMP 消息可以增加 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,如上例中所示。

3.3.3. 配置 worker 节点以使用静态代理服务器列表操作

服务器公告允许 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: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 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

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

© 2024 Red Hat, Inc.