We’ve upgraded haproxy from 2.6.7 to 2.6.8 and started to observe unusual change in behavior.
Our configuration (simplified) is:
global maxconn 4096 master-worker pidfile haproxy.pid stats socket ha.sock level admin defaults mode http retries 1 option redispatch maxconn 2000 balance roundrobin stats uri /haproxy stats realm Global\ statistics timeout connect 10s timeout queue 60s timeout client 305s option http-server-close log stdout format raw daemon option httplog listen family_default bind ipv6:8888 alpn http/1.1 cookie SERVERID rewrite http-request set-header X-Balancer-Current-Cookie SERVERID server default-0 127.0.0.1:8888 cookie default-0 check inter 3s rise 1 fall 2 maxqueue 5 maxconn 1 server default-1 127.0.0.1:8889 cookie default-1 check inter 3s rise 1 fall 2 maxqueue 5 maxconn 1 option httpchk GET /
The backend here are very simple python echoserver, which is not threaded and does not set the cookie.
After starting haproxy I can access the frontend, and it round robins correctly between backends.
When I’ll start to load the server:
while :; do curl -m 2 http://[ipv6]:8888/ ; done
After few moments I see that:
- the curl client timeouts
- in the log I see:
family_default family_default/ -1/-1/-1/-1/80845 400 0 - - CR-- 16/16/14/0/0 0/0 “”
family_default family_default/ 0/60001/-1/-1/60001 503 217 - - sQNN 15/15/13/0/0 0/1 “GET / HTTP/1.1”
- I attached screenshot of the /haproxy stats page:
- as soon as I downgrade to 2.6.7-c55bfdb, such problem does not happen
So, have I found an issue (found nothing on github, or it is just my incorrect configuration? Maybe some kind of reveal of the upgrade to 2.6.8?