HAProxy随机HTTP 503错误

BnW*_*BnW 15 haproxy

我们设置了3台服务器:

  • 服务器A使用Nginx + HAproxy来执行负载平衡
  • 后端服务器B.
  • 后端服务器C.

这是我们的/etc/haproxy/haproxy.cfg:

global
        log /dev/log   local0
        log 127.0.0.1   local1 notice
        maxconn 40096
        user haproxy
        group haproxy
        daemon

defaults
        log     global
        mode    http
        option  httplog
        option  dontlognull
        retries 3
        option redispatch
        maxconn 2000
        contimeout      50000
        clitimeout      50000
        srvtimeout      50000
                stats enable
                stats uri /lb?stats
                stats realm Haproxy\ Statistics
                stats auth admin:admin
listen statslb :5054 # choose different names for the 2 nodes
        mode http
        stats enable
        stats hide-version
        stats realm Haproxy\ Statistics
        stats uri /
        stats auth admin:admin

listen  Server-A 0.0.0.0:80    
        mode http
        balance roundrobin
        cookie JSESSIONID prefix
        option httpchk HEAD /check.txt HTTP/1.0
        server  Server-B <server.ip>:80 cookie app1inst2 check inter 1000 rise 2 fall 2
        server  Server-C <server.ip>:80 cookie app1inst2 check inter 1000 rise 2 fall 3
Run Code Online (Sandbox Code Playgroud)

所有三台服务器都有大量的RAM和CPU核心来处理请求

浏览时显示随机HTTP 503错误: 503 Service Unavailable - No server is available to handle this request.

还在服务器的控制台上:

Message from syslogd@server-a at Dec 21 18:27:20 ...
 haproxy[1650]: proxy Server-A has no server available!
Run Code Online (Sandbox Code Playgroud)

请注意,90%的时间没有错误.这些错误随机发生.

Mat*_*nes 27

我遇到过同样的问题.经过几天拉头发后,我发现了这个问题.

我有两个HAProxy实例在运行.一个是僵尸,在某个更新或haproxy重启期间不知何故从未被杀过.刷新/ haproxy统计信息页面时我注意到了这一点,PID会在两个不同的数字之间发生变化.带有其中一个数字的页面具有荒谬的连接统计数据.确认我做了

netstat -tulpn | grep 80
Run Code Online (Sandbox Code Playgroud)

并看到两个haproxy进程侦听端口80.

为了解决这个问题,我做了一个"杀死xxxx",其中xxxx是带有可疑统计数据的pid.


小智 6

在这里添加我的答案给其他遇到这个完全相同问题的人,但上面列出的解决方案都不适用.请注意,我的回答不适用于上面列出的原始代码.

对于可能遇到此问题的其他任何人,请检查您的配置,看看您是否可能错误地将相同的"绑定"行放在配置的多个部分中.Haproxy在启动期间不会检查这一点,我计划将此作为推荐的验证检查提交给开发人员.在我的情况下,我有3个不同的配置部分,我错误地将相同的IP绑定放在两个不同的地方.关于是否使用正确的部分或使用了错误的部分大约是50/50.即使使用了正确的部分,大约一半的请求仍然得到503.


小智 0

没有更多细节很难说,但是您是否有可能超过每个后端配置的 maxconn ?统计 UI 在前端和各个后端上显示这些统计数据。