当一个Tomcat服务器出现故障时,我们正面临一些在Apache上进行循环负载平衡的意外行为。
我们的设置:我们在前端使用mod_jk模块,在循环负载分配中使用2个Apache Web服务器进行负载平衡。 我们已经启用会话粘性。 运行应用程序的4个Tomcat服务器之间的负载是平衡的。
有时在负载较重的情况下,如果我们的数据库层出现缓慢的现象,最终Tomcat服务器会进入挂起状态,需要重新启动。 当我们反弹Tomcat服务器的时候,我们看到其他Tomcat服务器中的请求数量猛增,这些服务器也会进入挂起状态,需要重新启动。
最终所有的Tomcat服务器都以类似的方式挂起。
为什么Apache将整个负载转移到一台服务器而不是分配负载?
我们现在正在尝试worker.balancer.method=B ,看看这是否有助于解决我们的问题。
在下面的图片中,我们看到服务线程爆炸,



(发表一个答案,而不是评论,因为它可能太长):
我不是说“F5可以更好地处理这个问题”,但是:
我不认为find“中立”的公共基准testing/testing关于更好的设备/软件来做负载平衡并不容易。 我只能build议你自己做,如果你有空闲的f5。
一般来说,我会让f5尽可能地做到这一点:负载均衡,ssl证书,url重写,asm,…不是因为f5更好,而是因为在同一地点拥有一切都很方便。 不幸的是,当httpstream量开始增长超过几百MB时,您必须开始通过apache而不是f5完成一些工作。