for my scenario, i need to using "balance source" to keep the persistence of haproxy's balancing, I find that when one of my backend server (s1) has been killed, and if the next round health check is still not launched, then s1 is still be marked as UP. after 3 retries, the redispatch option does not work, I still get a 503 error. after a while, health check launched and s1 has been marked as DOWN, then my req has been forward to another backend server and everything is ok now.
my quesition is that, is there any config can help me to avoid 503 error when 3 retries have been failed but s1 is still marked as UP before the next round health check I debug haproxy(1.6.10) and find that when I using "balance source", the redispatch option does not work actually. after 3 retries, redispatch does not work, I guess that is because "balance source" is deterministic based on source IP and server state info(UP/DOWN and weight) (from : http://blog.haproxy.com/2013/04/22/client-ip-persistence-or-source-ip-hash-load-balancing/ ) so if the server looks like "UP" then the balance source will still assign redispatch new conn to this deaded server s1.