【问题标题】:3x thin servers in apache, but 2 in config file - what would thin do?apache 中有 3 个瘦服务器,但配置文件中有 2 个 - Thin 会做什么?
【发布时间】:2014-03-27 20:16:53
【问题描述】:

我刚刚注意到我们的生产服务器上的一个问题,因此配置了 apache 平衡器:

<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 配置文件中这样做了)。我开始研究这个的原因是已经注意到对应用程序的每三个请求都很慢。我假设这就是原因。

我的问题是:在这些条件下,薄实际上会做什么?为什么应用程序仍然有效?毫无疑问,每三个请求都会完全死掉,而不是“应对这种情况”。

提前致谢。

【问题讨论】:

    标签: ruby-on-rails thin


    【解决方案1】:

    Thin 不知道也不关心 Apache 配置。它只遵循自己的配置,因此只会生成 2 个服务器。

    每三个请求有点慢的原因可能是由于 Apache 重新路由了请求。由于两台瘦服务器使用端口 6000 和 6001,因此 Apache 对端口 6002 的引用无法到达服务器 - 根本没有任何人使用该端口。

    Apache 仍然尝试在那里发送请求,因为它也不知道该地址/端口后面是否有服务器。然后它等待超时(几秒钟?),因为没有给出响应,然后将请求重新路由到其他端口之一(6000 或 6001)。

    Apache 不会“保存”无法访问的服务器,因为它可能只是临时中断。您可能可以通过一些设置来改变这种行为(至少在 Nginx 中是可能的)

    您应该删除 Apache 中的第三个端口定义或添加另一个瘦服务器。

    【讨论】:

    • 第三台瘦服务器正在我们的机器上通过monit启动,即使第三台服务器正在运行,瘦配置文件是否仍然不允许请求到达那里?
    • 好吧,如果第三台服务器在 6002 端口上运行,应该没问题,但如果三个实例从一个点控制会更好,这将是一个 bundle exec 使用瘦配置 (扩展到 3 台服务器)。否则,使用配置关闭服务器只会关闭已知的两台服务器,而不是全部三台。通常,该配置仅用于启动和停止 - 它不会在服务器已经运行时动态控制服务器,因此 2 服务器限制不会干扰正在启动的其他服务器。
    猜你喜欢
    • 1970-01-01
    • 2016-12-30
    • 2011-06-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-31
    • 2020-05-09
    • 2021-06-04
    相关资源
    最近更新 更多