Sessão persistente de Haproxy não está redirecionando para servidor diferente quando o back-end falha

1

Eu tenho a seguinte configuração para o meu 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

É amarrado a servidores de aplicativos 2 Rails no back-end, e eu estou usando o cookie de sessão fornecidos pelo Rails ( _rails_session ) para aderência sessão.

Funciona muito bem até que um dos servidores fique inativo e, em seguida, os clientes com sessão existente para o servidor com falha que está tentando acessar esse servidor estão obtendo 500 respostas de erro do servidor em vez de serem redirecionados para o outro backend de funcionamento.

Eu percebi que o Haproxy irá redirecionar automaticamente o tráfego para o outro servidor ao detectar falhas. Estou fazendo algo errado na configuração? obrigado.

    
por sa125 20.07.2014 / 10:48

1 resposta

1

Você está perdendo a opção redispatch , aparentemente.

Na documentação :

option redispatch / no option redispatch: Enable or disable session redistribution in case of connection failure

In HTTP mode, if a server designated by a cookie is down, clients may definitely stick to it because they cannot flush the cookie, so they will not be able to access the service anymore.

Specifying "option redispatch" will allow the proxy to break their persistence and redistribute them to a working server.

    
por 21.07.2014 / 13:19