Nginx正在从池中删除上游服务器

Nginx正在从池中删除上游服务器,nginx,Nginx,我们的设置是Debian lenny上的标准nginx(0.7.59版)+精简上游服务器。现在,我们在一个用于web/app的坚固盒子和一个db盒子上。最近,我们开始注意到thins最终将开始“挂起”,即它们将不再接收来自nginx的请求。我们将运行15个thin,10-15分钟后,第一个或第二个thin将被挂起。如果一整天都不动,那些同样的几样东西再加上几样东西就会挂起来。到目前为止,我们看到的唯一修复方法是重新启动nginx。重新启动后,挂起的thin立即再次开始接收请求。正因为如此,看起来

我们的设置是Debian lenny上的标准nginx(0.7.59版)+精简上游服务器。现在,我们在一个用于web/app的坚固盒子和一个db盒子上。最近,我们开始注意到thins最终将开始“挂起”,即它们将不再接收来自nginx的请求。我们将运行15个thin,10-15分钟后,第一个或第二个thin将被挂起。如果一整天都不动,那些同样的几样东西再加上几样东西就会挂起来。到目前为止,我们看到的唯一修复方法是重新启动nginx。重新启动后,挂起的thin立即再次开始接收请求。正因为如此,看起来这些东西可能已经被从上游的水池中拿走了

如果我正确理解文档(),使用默认值(我们有),如果nginx无法在10秒内与后端服务器“通信”3次,它会将该上游服务器设置为“不工作”状态。然后它将等待10秒,然后重试该服务器。这是有道理的,但我们正在看到瘦无限期地挂起。我尝试为每一项设置max_失败为0,但没有帮助。我无法找出什么会导致上游服务器永久“不工作”

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


nginx中是否有其他东西(可更改指令或其他条件)会导致服务器完全退出池?

我们在nginx的反向代理支持方面遇到了许多问题,并最终通过在Mongrel和nginx之间进行切换实现了更好的体系结构。因此,我们的架构是:

web=>nginx=>haproxy=>Mongrels

我们之前(在HAProxy之前)看到的是,nginx会向Mongrel发送太多请求,Mongrel的请求队列不稳定,它会很快被太多排队的请求卡住。HAProxys队列比nginx更稳定,它能更好地平衡后端之间的所有请求。nginx只在像最少连接这样的算法更好时才提供循环平衡。我不知道Thin和Mongrel是否有同样的问题

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

maxconn指令非常关键,EngineYard为nginx提供了一个补丁,使其成为nginx的本机,因此您不需要部署HAProxy来充分利用它


请参阅:

是的,我们以前见过,我忘了提到我们使用公平代理平衡器插件(;),它使用最不繁忙的算法而不是循环。它工作得很好,而且随着时间的推移,#requests/thin非常接近。如果我们能找出是什么导致Thin不再接收来自nginx的请求,我希望不必引入另一个像HAProxy这样的层。所以nginx ey平衡器基本上模仿了HAProxy的maxconn算法,需要HAProxy?是的,nginx ey平衡器模仿了HAProxy的maxconn算法,需要HAProxy。这就是我们开始改用haproxy的主要原因,现在它只是我们架构的一部分。非常感谢您的帮助。我想试试nginx-ey平衡器。尽管它只有针对nginx v 0.6.34/35和0.8.0的补丁。我会看看哪一个更接近0.7.59,希望是最好的。。或者等到0.8.x变得稳定。