了解 apache 的 mod_proxy_balancer 模块

了解 apache 的 mod_proxy_balancer 模块

我正在尝试为几个 Web 服务器设置负载均衡器。我使用的是带有 Apache http 服务器的 centos 5.6(服务器版本:Apache/2.2.3)。我有一个客户端生成器,它生成大约 200 个线程,并尝试通过负载均衡器浏览网页。我为此使用了 Apache mod_proxy_balancer。这是我的设置:

<IfModule mod_proxy_balancer.c>
   <Proxy balancer://xx.xx.xx.xx>
         BalancerMember yy.yy.yy.yy loadfactor=1
         BalancerMember zz.zz.zz.zz loadfactor=1
   </Proxy>

   <Location />
         ProxyPass       balancer://xx.xx.xx.xx/
   </Location>
</IfModule>

启动后,几分钟后我开始在客户端看到 503 错误,apache 错误日志读取如下:

[Mon Aug 22 10:19:09 2011] [error] (110)Connection timed out: proxy: HTTP: attempt to connect to yy.yy.yy.yy:80 failed

[Mon Aug 22 10:19:09 2011] [error] ap_proxy_connect_backend disabling worker for (yy.yy.yy.yy)

[Mon Aug 22 10:19:10 2011] [error] proxy: BALANCER: (balancer://xx.xx.xx.xx). All workers are in error state

我将 httpd.conf 中的超时时间更改为 1200,但我仍然遇到相同的问题。我可以理解存在超时,它会将 IP 标记为处于错误状态,并在特定时间(根据文档为 60 秒)后重试连接。它连接并继续正常工作几分钟,这个过程循环进行。我想知道如何解决这个问题并了解导致超时的原因。如果我将客户端直接连接到后端服务器之一,它可以正常工作。因此,我猜是负载均衡器导致了瓶颈。任何帮助我理解或解决这个问题的信息都将不胜感激。谢谢!

  • 瑟图

答案1

我通常使用 AJP 和 JBoss 应用服务器执行此操作,但我对其进行了如下配置:

<Proxy balancer://ajpcluster>     
  BalancerMember ajp://test.local.host:8109     
  BalancerMember ajp://test.local.host:8209   
</Proxy>
<Location /jconsole >  
  ProxyPass balancer://ajpcluster/jconsole stickysession=JSESSIONID|jsessionid nofailover=On
  ProxyPassReverse balancer://ajpcluster/jconsole
</Location>

答案2

也许您需要在 BalancerMember 服务器的防火墙上使用 mod_proxy_balancer 将服务器的 IP 列入白名单,Apache 通过该防火墙连接到节点?

相关内容