Липкий сеанс Haproxy не перенаправляет на другой сервер при сбое сервера
У меня есть следующая конфигурация для моего haproxy LB:
global
daemon
maxconn 2048
# SSL
ca-base /etc/ssl/certs
crt-base /etc/ssl/private
ssl-default-bind-ciphers ALL:!aNULL:!ADH:!eNULL:!LOW:!EXP:RC4+RSA:+HIGH:+MEDIUM;
defaults
log global
mode http
option forwardfor
# handle incoming requests to port 80 (http)
frontend www-http
bind 1.2.3.4:80
reqadd X-Forwarded-Proto:\ http
default_backend www-backend
# handle incoming requests to port 443 (https)
frontend www-https
bind 1.2.3.4:443 ssl crt /etc/ssl/private/example.com.pem
reqadd X-Forwarded-Proto:\ https
default_backend www-backend
backend www-backend
# always use https
redirect scheme https if !{ ssl_fc }
# RR algorithm for load balancing
balance roundrobin
option httpclose
# tracke which backend served specific user
cookie _rails_srv insert
# sticky sessions
appsession _rails_session len 64 timeout 24h
server s1 4.5.6.7:80 check cookie s1
server s2 7.8.9.0:80 check cookie s2
Он привязан к 2 серверам приложений Rails в бэкэнде, и я использую сессионный cookie, предоставленный Rails (_rails_session
) для сессионной липкости.
Он прекрасно работает до тех пор, пока один из серверов не выйдет из строя, а затем клиенты с существующим сеансом на отказавший сервер, которые пытаются получить доступ к этому серверу, получают 500 сообщений об ошибках сервера, а не перенаправляются на другой работающий сервер.
Я полагал, что Haproxy будет автоматически перенаправлять трафик на другой сервер при обнаружении сбоя. Я что-то не так делаю в конфигурации? Благодарю.
1 ответ
Вы скучаете по redispatch
вариант, видимо.
Из документации:
опция redispatch / no опция redispatch: включить или отключить перераспределение сеанса в случае сбоя соединения
В режиме HTTP, если сервер, указанный в куки-файле, не работает, клиенты могут определенно придерживаться его, потому что они не могут очистить куки, поэтому они больше не смогут получить доступ к сервису.
Указание "option redispatch" позволит прокси-серверу нарушать их постоянство и перераспределять их на работающий сервер.