我正在尝试为几个 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 通过该防火墙连接到节点?