I use very simple config for balancing traffic between 3 backends:
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?