我们设置了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
所有三台服务器都有大量的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!
请注意,90%的时间没有错误。这些错误是随机发生的。
答案 0 :(得分:26)
我有同样的问题。经过几天的拔毛,我找到了问题。
我运行了两个HAProxy实例。一个是僵尸,在某个更新或haproxy重启期间不知何故从未被杀过。刷新/ haproxy统计信息页面时我注意到了这一点,PID会在两个不同的数字之间发生变化。带有其中一个数字的页面具有荒谬的连接统计数据。确认我做了
netstat -tulpn | grep 80
并看到两个haproxy进程正在侦听端口80。
为了解决这个问题我做了一个“杀死xxxx”,其中xxxx是带有可疑统计数据的pid。
答案 1 :(得分:6)
在此处为遇到此完全相同问题的其他人添加我的答案,但上述解决方案均不适用。请注意,我的回答不适用于上面列出的原始代码。
对于可能遇到此问题的其他人,请检查您的配置,看看您是否可能错误地将其设置为&#34; bind&#34;在配置的多个部分中排队。 Haproxy在启动期间不会检查这一点,我计划将此作为推荐的验证检查提交给开发人员。在我的情况下,我有3个不同的配置部分,我错误地将相同的IP绑定放在两个不同的地方。关于是否使用正确的部分或使用了错误的部分大约是50/50。即使使用了正确的部分,大约一半的请求仍然得到503。
答案 2 :(得分:1)
您的服务器可能共享一个在特定时间超时的公共资源,并且您的健康检查请求同时进行(从而同时拉出后端服务器)。
您可以尝试使用HAProxy选项spread-checks
随机化运行状况检查。
答案 3 :(得分:1)
我有同样的问题,因为Linux框中运行了2个HAProxy服务,但名称/ pid /资源不同。除非我停止不需要的操作,否则所需的实例会随机抛出503错误,例如5次中的1次。
尝试使用单个linux机箱进行多个URL路由,但在haproxy或我定义的haproxy的配置文件中看起来有限制。
答案 4 :(得分:0)
很难说没有更多细节,但是你是否有可能超过每个后端配置的maxconn? Stats UI在前端和单个后端上显示这些统计信息。
答案 5 :(得分:0)
我通过向后端添加option http-server-close
解决了HAProxy间歇性503s的问题。看起来uWSGI(位于上游)在保持活动方面表现不佳。不知道问题的真正根源是什么,但是添加此选项后,此后再没有见过503。
答案 6 :(得分:0)
不要在 haproxy.cfg 的多个部分使用“绑定”行 例如,这将是错误的
frontend stats
bind *:443 ssl crt /etc/ssl/certs/your.pem
frontend Main
bind *:443 ssl crt /etc/ssl/certs/your.pem
像这样修复
frontend stats
bind *:8443 ssl crt /etc/ssl/certs/your.pem
frontend Main
bind *:443 ssl crt /etc/ssl/certs/your.pem