尽管两个后端服务器完全正常,并且对各个服务器的重复检查没有返回任何错误,但几乎 1/4 的对 HAProxy 实例的请求都会因 503 错误而失败。
PHP 5.3 FPM、Nginx、Ubuntu 10.10、HAProxy 1.4.8
以下是我的 haproxy.cfg:
global
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
#debug
#quiet
defaults http
log global
mode http
option httplog
option dontlognull
retries 3
option redispatch
maxconn 2000
contimeout 5000
clitimeout 50000
srvtimeout 50000
errorfile 400 /etc/haproxy/errors/400.htm
errorfile 403 /etc/haproxy/errors/403.htm
errorfile 408 /etc/haproxy/errors/408.htm
errorfile 500 /etc/haproxy/errors/500.htm
errorfile 502 /etc/haproxy/errors/502.htm
errorfile 503 /etc/haproxy/errors/503.htm
errorfile 504 /etc/haproxy/errors/504.htm
listen www 0.0.0.0:80
mode http
balance roundrobin
option redispatch
cookie JSESSIONID prefix
stats enable
stats auth user:pass
option httpclose
option forwardfor
option httpchk HEAD /health HTTP/1.0
server web1 x.x.x.x:8080 weight 1 cookie web1 check inter 1000
server web2 y.y.y.y:8080 weight 2 cookie web2 check inter 1000
答案1
您的服务器的 IP 地址错误,两个都是 0.0.0.0 !这意味着连接将被转发到 haproxy 接收连接的同一 IP,因此我可以推断您的两台服务器中的一台与 haproxy 在同一主机上运行。
请修复该问题并检查您的日志。它可能不会修复您的 503,但它会让您恢复到可能正常工作的合理配置。然后,如果您仍然看到 503,请检查您的日志,以便我们找出 haproxy 遇到问题的原因。大多数情况下,503 是由于无法连接到服务器而导致的。您向他们发送的连接数很可能超出了他们可以接受的范围。在这种情况下,请在您的“服务器”行上使用“maxconn”设置,这将启用流量调节以防止溢出。