如何配置 mod_proxy_balancer 在高负载下优雅地失败

bra*_*amp 7 linux mod-proxy apache-2.2

我们有一个系统,它在多个 tomcat 前面有一个 Apache 实例。这些 tomcat 然后连接到各种数据库。我们使用 mod_proxy_balancer 平衡 tomcat 的负载。

目前我们每秒接收 100 个请求,Apache 服务器上的负载相当低,但由于 tomcats 上的数据库操作繁重,负载大约为 25%(我估计它们可以处理)。

几周后会发生一个事件,我们估计我们的请求会大幅增加,可能会增加 10 倍。

我正在尽我所能减少我们的 tomcat 的负载,但我知道我们将耗尽容量,所以我想优雅地失败。我的意思是,我希望 Apache 以某种方式监视平均响应时间,而不是尝试处理太多所有超时的连接,并且一旦对 Tomcat 的响应时间超过某个阈值,我想要一个错误页面显示。

这意味着幸运的用户仍然可以快速呈现页面,而不幸的用户则快速获得错误页面。而不是每个人都为他们的页面等待太久,最终每个人都超时,并且数据库被从未使用过的查询淹没。

希望这是有道理的,所以我一直在寻找有关如何实现这一目标的建议。

谢谢

Bry*_*ite 9

我将此称为“抱歉的服务器”。如果您使用的是 Apache 2.2,您可以将另一台主机添加到您的 LB 池作为热备件,当实际应用服务器达到容量时,您的平衡器会将请求定向到“Sorry Server”,直到应用服务器再次可用。这是一个粗略的想法:

<Proxy balancer://yourapp>
    BalancerMember http://10.0.0.1:8080 retry=5 max=50
    BalancerMember http://10.0.0.2:8080 retry=5 max=50
    BalancerMember http://10.0.0.3:8080 retry=5 max=50
    BalancerMember http://10.0.0.4:8080 retry=5 max=50
    # the hot standby on server2
    BalancerMember http://10.0.0.5:80 status=+H
</Proxy>
<Location /app>
    ProxyPass           balancer://yourapp
</Location>
Run Code Online (Sandbox Code Playgroud)

实际上,您也可以在负载均衡器机器上设置一个额外的虚拟主机,并让它自己为“Sorry Server”页面提供服务。希望有帮助:)