I use very simple config for balancing traffic between 3 backends:
defaults
mode http
option redispatch
retries 3
frontend front_site
bind *:443 ssl no-sslv3 crt /etc/haproxy/domain.com.pem
default_backend back_site
backend back_site
option tcp-check
balance round-robin
cookie server_id insert indirect nocache
server back01 back01:443 ssl verify none check cookie b01
server back02 back02:443 ssl verify none check cookie b02
server back03 back03:443 ssl verify none check cookie b03
The problem is that when back01 is down then all new requests come only to back02 (and server_id cookie is set to b02). It looks like Haproxy selects first available server from the list. If I move back03 string before back02 then all requests come to back03 and nothing to back02. Did I miss something in documentation?