使用 HAproxy + Apache 缓解 HTTP 连接洪水

使用 HAproxy + Apache 缓解 HTTP 连接洪水

我们的基础设施由运行 HAProxy 和 Apache 的负载均衡器组成,它们将流量转发到仅运行 Apache 的应用服务器。过去几天,我们看到了连接泛滥,负载均衡器很乐意将其传递下去,但这些连接很快就会淹没我们的应用服务器。它们变得没有响应,我们唯一的缓解策略是启动更多应用服务器来承受这种泛滥。起初我们无法确定这些服务器为什么会宕机,因为负载均衡器上没有真正的流量峰值,但经过一番调查,我们发现 Apache 连接的数量已经超出了上限。

附件是一些图表,它们似乎是洪水的唯一指标。我已将maxconn每个后端服务器的 HAProxy 指令降低到更合理的数字(以前的默认值为 255),但我担心新的合法连接将被延迟,直到洪水消退。对于具有现有连接的用户,该服务似乎已启动,但对于新连接和外部监控服务,它似乎会下降,因为 HAProxy 是与主机无关的速率限制。

我们这边(HAProxy 或 Apache)还能做些什么来帮助我们维持负载吗?还是我们应该考虑在网络外过滤它?由于流量很小,我觉得我们还可以做更多的事情,但我对 HAProxy 的所有功能不太熟悉。我还想探索 HAProxy 是否可以根据 IP 进行速率限制,但我还没有找到任何东西。

编辑:我们审计了其中一个负载均衡器的访问日志,排名前几位的 IP 的请求数量如下:

1070 69.64.*.*
1227 1.9.*.*
1235 64.71.*.*
1376 69.64.*.*
1459 12.189.*.*
1572 1.9.*.*
1678 208.106.*.*
1982 5.15.*.*
2630 23.22.*.*
3300 76.125.*.* (our office)
3543 216.38.*.*

因此,我们可以动态禁止在小窗口内建立过多会话的 IP,但我们不能根据总请求数进行阻止,因为那样也会抓到我们。这条路线有意义吗?我们应该在负载均衡器的 iptables 级别执行此操作吗?

非常感谢您的任何建议!

谢谢,

克里斯

在此处输入图片描述 在此处输入图片描述 在此处输入图片描述 在此处输入图片描述 在此处输入图片描述 在此处输入图片描述

答案1

首先,如果您得到的只是“仅仅”连接洪流,那么在服务器上设置 maxconn 就足够了,因为 haproxy 只会将有效请求传递给服务器,而不是没有请求的普通连接。此外,较低的 maxconn 会使您的服务器更快,并且通常可以更快地为您的用户提供服务(前提是您不要将 maxconn 调得太低,至少要保持 apache 机器上的 CPU 核心数为 2-3 倍)。

如果遇到请求泛滥,则需要更好的应对措施。Haproxy 1.5-dev 有许多这样的措施,它能够将一些请求过多、连接率过高、并发连接过多或出现过多错误的 IP 地址列入黑名单。

这里有一个很好的解释http://blog.exceliance.fr/2012/02/27/use-a-load-balancer-as-a-first-row-of-defense-against-ddos/关于如何进行设置的说明。

希望这有帮助!

相关内容