【发布时间】:2015-09-10 13:18:15
【问题描述】:
我们在 Mesos 集群上使用 Haproxy,我们正在根据马拉松事件(一天 50-100 次)为 Haproxy 进行动态重新加载。我们有近 300 个应用程序在 Mesos 上运行(Haproxy 中有 300 个虚拟主机)。当我们进行动态重新加载时,Haproxy 需要很长时间才能重新加载 Haproxy,我们观察到 50 个应用程序需要 30-40 秒才能重新加载 Haproxy。我们有一个 Haproxy 配置文件,当我们重新加载所有应用程序时,所有应用程序都会重新加载(前端),这会导致所有应用程序停机。有没有办法减少停机时间和对最终用户的影响。
我们尝试了这种情况,
"http://engineeringblog.yelp.com/2015/04/true-zero-downtime-haproxy-reloads.html"
如果用户在重新加载时请求,则请求将在重新加载后排队并提供服务。
但是如果我们一个接一个地进行多次重新加载,即使重新加载 HaProxy 服务,HaProxy 的旧进程仍然存在,这会导致严重的问题。
root 7816 0.1 0.0 20024 3028 ? Ss 03:52 0:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -sf 6778
root 7817 0.0 0.0 20024 3148 ? Ss 03:52 0:00 /usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -sf 6778
是否有任何解决方案在处理请求后停止前一个进程一次。
我们能否像 Nginx 那样根据前端的配置进行分离,这样后端有任何变化时,只有那些应用才会生效。
谢谢。
【问题讨论】:
-
30-40 秒重新加载 Haproxy 听起来很意外。您能否提供有关您的设置的更多详细信息?您是使用 marathon-haproxy-bridge 还是其他系统来管理和重新加载 haproxy?你能提供一些你重新加载时的日志吗?
标签: haproxy mesos mesosphere marathon