4

我们的设置是标准 nginx (ver 0.7.59) + Debian lenny 上的瘦上游服务器。现在我们有 1 个用于 web/app 的强大盒子和 1 个 db 盒子。最近我们开始注意到 Thin 最终会开始“挂起”,即它们将不再接收来自 nginx 的请求。我们有 15 个薄运行,10-15 分钟后,前 1 或 2 个将被挂起。如果离开一整天,那些相同的几件再加上几件将保持悬挂状态。到目前为止,我们看到的唯一修复是重新启动 nginx。重新启动后,挂起的瘦子立即再次开始接收请求。正因为如此,看起来那些薄薄的东西可能已经从上游池中取出了。

如果我正确理解文档(http://wiki.nginx.org/NginxHttpUpstreamModule#server),使用默认值(我们有),如果 nginx 不能在 10 秒内与后端服务器“通信”3 次,它会将上游服务器设置为“不工作”状态。然后它将等待 10 秒,然后再次尝试该服务器。这是有道理的,但我们正在无限期地看到薄弱的悬垂。我尝试将每个薄的 max_fails 设置为 0,但这没有帮助。我不知道是什么导致上游服务器永久“不工作”。

我们最近看到了大幅的增长率增长,所以我们不确定它是否与此有关,或者只是因为在更短的时间内更多的流量而更加明显。

nginx 中是否还有其他东西(可变指令或其他条件)会导致它完全从池中取出服务器?

4

1 回答 1

5

我们在 nginx 的反向代理支持方面遇到了很多问题,最终通过将HAProxy放在Mongrel 和 nginx 之间实现了更好的架构。所以我们的架构是:

web => nginx => haproxy => 杂种

我们之前(在 HAProxy 之前)看到的是,nginx 会用太多的请求淹没 Mongrel,而 Mongrel 的请求队列并不稳固,它很快就会被太多的排队请求卡住。HAProxys 队列更稳定,它比 nginx 更好地平衡后端之间的所有请求。nginx 仅在真正像最少连接这样的算法更好时才提供循环平衡。我不知道 Thin 是否遇到与 Mongrel 相同的问题。

在我们的新设置中,nginx 只代理单个 haproxy 实例,并且 haproxy 已配置所有已注册的 Mongrel。HAProxy 对上游 ok/fail 检测有更好的支持,并且还可以将每个应用服务器限制为 1 个连接(maxconn 指令),这是 Mongrel 的关键,不确定 Thin。

maxconn 指令非常关键,以至于 EngineYard 为 nginx 提供了一个补丁,使其成为 nginx 原生的,因此您无需部署 HAProxy 即可利用它。

参见:nginx-ey-balancer

于 2009-08-31T16:28:03.757 回答