【问题标题】:Hot reconfiguration of HAProxy still lead to failed request, any suggestions?HAProxy 的热重新配置仍然导致请求失败,有什么建议吗?
【发布时间】:2014-02-06 06:22:05
【问题描述】:

我发现使用这样的命令当流量很高时仍然有失败的请求

haproxy -f /etc/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)

热重载更新的配置文件。

下面是使用webbench的压力测试结果:

/usr/local/bin/webbench -c 10 -t 30 targetHProxyIP:1080
Webbench – Simple Web Benchmark 1.5
Copyright (c) Radim Kolar 1997-2004, GPL Open Source Software.

Benchmarking: GET targetHProxyIP:1080
10 clients, running 30 sec.

Speed=70586 pages/min, 13372974 bytes/sec.
**Requests: 35289 susceed, 4 failed.**

我运行命令

haproxy -f /etc/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)

在压力测试期间进行了几次。

在 haproxy 文档中提到

他们将收到 SIGTTOU 611 信号要求他们暂时停止监听端口以便新的 612进程可以抓取它们

所以有一段时间旧进程没有监听 PORT(比如 80)而新进程还没有开始监听 PORT(比如 80),在这个特定的时间段内,它会导致新连接失败,有意义吗?

那么有没有什么方法可以重新加载 haproxy 的配置,不会影响现有连接和新连接?

【问题讨论】:

    标签: configuration reload haproxy


    【解决方案1】:

    在最终实现 SO_REUSEPORT 的最新内核(3.9+)上,这个死区不再存在。虽然为较旧的内核提供了大约 10 年的补丁,但很明显,许多用户无法修补他们的内核。如果您的系统较新,那么新进程将在要求前一个进程释放端口之前成功尝试 bind(),然后有一段时间,两个进程都绑定到端口而不是没有进程。

    连接在关闭时到达离开进程队列的可能性仍然很小。但是没有可靠的方法来阻止这种情况的发生。

    【讨论】:

    • 威利,谢谢你的解释,真的很有帮助。我有一个后续问题:由于在云平台中,路由信息会动态变化,因为它将托管数千个应用程序。一个应用的路由更改不能影响其他应用,这一点非常重要。是否有可能/容易更改 HAProxy 代码以在重新配置时(比如添加一个新应用程序)不需要新进程,只需使用相同的进程来进行更改?是否有开发计划使 HAProxy 成为 CloudPlatform 就绪的负载均衡器(为数千个应用提供动态路由信息)?
    • 我用最新的3.11内核做测试,失败次数没有明显减少,请问需要手动开启内核为haproxy提供的复用端口功能吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-15
    • 2016-06-28
    • 2022-08-18
    • 2016-12-01
    • 1970-01-01
    • 2012-04-06
    • 1970-01-01
    相关资源
    最近更新 更多