我刚刚注意到我们的生产服务器上出现了一个问题,即配置了apache balancer:
<Proxy balancer://thin_cluster>
BalancerMember http://127.0.0.1:6000
BalancerMember http://127.0.0.1:6001
BalancerMember http://127.0.0.1:6002
ProxySet lbmethod=bybusyness maxattempts=1 timeout=30
</Proxy>
但瘦配置文件只指定了2台服务器;
thin.yml (condensed for brevity)
address: 127.0.0.1
port: 6000
servers: 2 # <-- wrong!!
大约6个月前瘦服务器的数量从2增加到3,但无论谁增加它都忘了增加thin.yml文件中的服务器数量(他们只在apache配置文件中执行)。我开始研究这个问题的原因是它已经注意到应用程序的每三个请求都很慢。我假设这就是原因。
我的问题是:在这些条件下,实际上会做什么?为什么应用程序仍然有效?当然,每三个请求都会全部死亡,而不是“应对这种情况”。
提前致谢。
答案 0 :(得分:1)
Thin不知道或不关心Apache配置。它只遵循自己的配置,因此只会产生2台服务器。
每三个请求有点慢的原因可能是Apache重新路由请求。由于两个瘦服务器使用端口6000和6001,因此从Apache到端口6002的引用无法到达服务器 - 该端口根本不被任何人使用。
Apache仍尝试在那里发送请求,因为它也不知道该地址/端口后面是否有服务器。然后它等待超时(几秒钟?),因为没有给出响应,然后将请求重新路由到其他端口之一(6000或6001)。
Apache不会“保存”无法访问的服务器,因为它可能只是暂时中断。您可以使用某些设置更改此行为(至少可以在Nginx中使用)
您应该删除Apache中的第三个端口定义或添加另一个瘦服务器。