优雅地重启 Haproxy

AKG*_*AKG 5 configuration load-balancing haproxy amazon-ec2

根据各种博客,可以使用以下命令优雅地重新启动 HAproxy:

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

为了验证这一点,我设置了一个 apache bench 脚本,它连续向 haproxy 发送消息。理想情况下,每当我重新启动服务器时,脚本都不应该对 apache 群执行产生影响。但是,似乎每当 Haproxy 重新启动时,apache bench 脚本都会终止并且与负载均衡器的连接丢失。

这是我的 HaProxy 配置文件的详细信息:

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
Run Code Online (Sandbox Code Playgroud)

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

Den*_*isB 3

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

然而,这很可能不是主要问题。您描述的场景实际上应该按您的预期工作。

HAProxy的热重配置实际上是这样工作的:

  1. 使用指定的配置启动一个新进程
  2. 旧进程收到 SIGTTOU 信号,以便新进程可以接管端口
  3. 旧进程完成当前工作然后退出
  4. 新进程处理端口上的流量

如果 2 之后出现任何问题,旧进程会收到 SIGTTIN 信号,并像以前一样继续。

您的问题中的一些其他详细信息可以使解决此问题变得更容易:

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