【发布时间】:2015-12-22 14:42:17
【问题描述】:
我正在使用 6 个 Apache httpd 2.2.15 将请求转发到 Tomcat 应用程序服务器(版本:7.0.41)。使用 mod_proxy,所有应用程序服务器都使用代理平衡器进行平衡。下面是apache httpd.conf的类似配置:
##Proxy Balancers for use by all Virtual Hosts
<Proxy balancer://FrontEnd>
BalancerMember ajp://APP01.abcd.com:8009 route=APP01 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP02.abcd.com:8009 route=APP02 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP03.abcd.com:8009 route=APP03 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP04.abcd.com:8009 route=APP04 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP05.abcd.com:8009 route=APP05 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP06.abcd.com:8009 route=APP06 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP07.abcd.com:8009 route=APP07 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP08.abcd.com:8009 route=APP08 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP09.abcd.com:8009 route=APP09 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP10.abcd.com:8009 route=APP10 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP11.abcd.com:8009 route=APP11 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP12.abcd.com:8009 route=APP12 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP13.abcd.com:8009 route=APP13 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP14.abcd.com:8009 route=APP14 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP15.abcd.com:8009 route=APP15 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP16.abcd.com:8009 route=APP16 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP21.abcd.com:8009 route=APP21 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP22.abcd.com:8009 route=APP22 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP23.abcd.com:8009 route=APP23 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP24.abcd.com:8009 route=APP24 timeout=120 ttl=600 keepalive=On
BalancerMember ajp://APP25.abcd.com:8009 route=APP25 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP26.abcd.com:8009 route=APP26 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP27.abcd.com:8009 route=APP27 timeout=120 ttl=600 keepalive=On
BalancerMember ajp:// APP28.abcd.com:8009 route=APP28 timeout=120 ttl=600 keepalive=On
ProxySet stickysession=JSESSIONID
</Proxy>
当我从 Apache webserver balancer-manager 检查时,我遇到了应用程序服务器之间负载分布不均匀的问题。事实上,前 13 个应用服务器(app01 到 app13,假设为 batch1)的负载几乎相等,其余的应用服务器(app14 到 app16 和 app21 到 app28,假设为 batch2)的负载相同。 batch1 应用服务器的负载几乎是 batch2 应用服务器的 3 倍。
我还尝试诊断是否有任何网络问题可能导致该问题。因此,尝试使用 traceroute 命令进行诊断,发现两个批处理服务器(batch1 和 batch2)的模式几乎相似,都有 30 跳。
我无法弄清楚,问题是什么?谁能帮帮我。 任何帮助,非常感谢。
【问题讨论】:
-
负载均衡器要么认为这两个服务器不那么忙,要么它们真的是。他们使用更快的硬件还是不同的配置?您是否定义了任何可能导致更多连接被定向到同一服务器的粘性?但是在 Stack Exchange 上可能有更好的地方可以提出这样的问题。
-
硬件和配置是一样的。 Web 服务器中没有定义粘性。只有,stickysession 才能捕获到应用程序服务器的一个特定请求的 JSESSIONID。谢谢玛格。
-
我尝试将 lbmethod 更改为“bytraffic”并重新加载服务器。重新加载后,每个应用服务器中的负载均匀分布。但是一段时间后,负载又变得不均匀,也就是说,Batch-1 承担了近 80% 的负载,而 Batch-2 的剩余(20%)。当 lb 方法默认为“byrequests”时,也会发生同样的事情。另外,我已经从代理平衡器中删除了 APP21-APP28(Batch-2 现在只包含 APP14-APP16),但问题仍然存在。谁能帮忙。
-
正常重启网络服务器解决了这个问题。我相信在更改后重新加载 Web 服务器(以避免任何停机时间)不会关闭所有连接并再次打开它。这可能是应用服务器之间负载平衡不均匀的原因。无论如何谢谢:) @Marged