我们设置了3台服务器:
这是我们的/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.