Haproxy优雅重新加载

我正在寻找优雅的haproxy重新加载的解决scheme。 我有一个运行的nginx服务器将请求传递给Haproxy,有时我重新加载Haproxyconfiguration。 但我注意到,在重新加载时,所有现有的连接都被切断,haproxy后端队列显示0个请求(从haproxy的套接字统计获得)。

我正在使用几个博客文章中提到的方法和haproxy关于这个问题的文档:

重新加载:

haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -D -sf (</var/run/haproxy.pid) 

开始:

 haproxy -D -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid 

如果有人能提出任何解决scheme,我们将不胜感激。 以下是我的haproxyconfiguration文件

 global maxconn 64000 ulimit-n 200000 log 127.0.0.1 local0 log 127.0.0.1 local1 notice spread-checks 5 stats socket /etc/haproxy/stats defaults log global mode http balance roundrobin maxconn 64000 option abortonclose option httpclose retries 3 option redispatch timeout client 30000 timeout connect 30000 timeout server 30000 stats enable stats uri /haproxy?stats stats realm Haproxy Statistics stats auth haproxy:stats timeout check 5000 

您发布的命令对我来说似乎不是100%正确的。 在我的系统上,它显示:

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

你错误地键入了最后一个选项-sf的值。

这可能会根据您的testing方法预期。 虽然如上所述,您似乎在重新加载命令的末尾还缺less一个$

当HAProxy执行“重新加载”时,它启动一个新的HAProxy进程,将会话数据从第一个进程的unix域套接字发送到第二个进程,第一个进程从正在监听的TCP端口解除绑定,第二个进程绑定。 第一个过程然后终止。 所以他们不会在任何阶段共享内存,也不会同步文件描述符(无论从我自己的testing)。 所以重载的要点是持久性表(如基于cookie的哈希)被维护,以便客户端将重新连接到所需的后端服务器。 然而,从第一个过程排除联系而不是立即下降的意义上说,它应该是优雅的。

如果你在执行重载的时候看你的进程表,那么你应该观察上面的内容,除非自从我testing(几个月前)以来发生了变化。