重新启动Haproxy优雅

根据各种博客,可以使用以下命令正常重启HAproxy:

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

为了validation这一点,我build立了一个连续发送消息给haproxy的apache脚本脚本。 理想情况下,每当我重新启动我的服务器的脚本不应该有一个影响的Apache的一个执行。 但是,似乎每当Haproxy重新启动Apache脚本脚本终止和负载平衡器的连接丢失。

这里是我的HaProxyconfiguration文件的细节:

global nbproc 4 log 127.0.0.1 local0 log 127.0.0.1 local1 notice #log loghost local0 info maxconn 4096 #chroot /usr/share/haproxy user haproxy group haproxy daemon pidfile /var/run/haproxy.pid stats socket /home/ubuntu/haproxy.sock #debug #quiet defaults log global mode http option httplog option dontlognull retries 3 option redispatch maxconn 2000 contimeout 5000 clitimeout 50000 srvtimeout 50000 listen webstats bind 0.0.0.0:1000 stats enable mode http stats uri /lb?stats stats auth anand:aaaaaaaa #stats refresh listen web-farm 0.0.0.0:80 mode http balance roundrobin option httpchk HEAD /index.php HTTP/1.0 server server2.com 1.1.1.1:80 server serve1.com 1.1.1.2:80 


请让我知道我在这里错过了什么。

在解决这个问题时,尝试使用“nbproc 1”而不是“nbproc 4”,增加进程的数量很less需要,并且在某些情况下可能会导致问题。

但是,这很可能不是主要问题。 你所描述的场景实际上应该如你所期望的那样工作

HAProxy的热重新configuration实际上是这样工作的:

  1. 一个新的进程以指定的configuration启动
  2. 旧进程收到一个SIGTTOU信号,以便新进程可以接pipe端口
  3. 旧的过程完成它目前的工作,然后退出
  4. 新stream程处理通过端口的stream量

如果在2之后出现任何错误,则旧的进程将接收到一个SIGTTIN信号,然后继续。

在你的问题中的一些额外的细节可以使解决这个问题更容易

  • 你用什么参数与ab
  • 热重新configuration后,您是否可以使用其他客户端连接到新进程
  • 您使用哪个(主要)版本的HAProxy