Coloque o servidor no modo de drenagem usando a interface de gerenciamento da web. Isso fornece a funcionalidade exata que você está procurando.
Estou usando o haproxy para balancear a carga de servidores da web. Eu uso persistência de sessão com cookies adicionais, pois alguns aplicativos usam arquivos de sessão e eles não são sincronizados entre servidores.
Desejo desativar um servidor para manutenção, mas sem interromper as sessões. Por isso, gostaria de permitir que os clientes existentes continuem a sua sessão de aplicativo, mas não aceitem novos clientes.
Você acha que isso é possível com alguma configuração haproxy? Ou há uma maneira inteligente de fazer isso?
Lista não exaustiva de outras formas de alcançar essa necessidade:
Eu uso esse tipo de configuração:
frontend https-in
bind xxx.xxx.xxx.xxx:443 ssl crt /etc/haproxy/ssl/_default.pem crt /etc/haproxy/ssl
reqadd X-Forwarded-Proto:\ https
acl APP1 hdr(host) -i APP1.atac.local
use_backend APP1 if APP1
default_backend _default
backend APP1
redirect scheme https if !{ ssl_fc }
mode http
balance roundrobin
cookie HAPROXY_SESSION insert indirect
option httpchk HEAD /haproxy_test_page.php HTTP/1.0\nUser-Agent:\ HAProxy
server SRV1 SRV1_IP:PORT cookie SRV1 check
server SRV2 SRV2_IP:PORT cookie SRV2 check
Se eu apenas desabilitar o SRV1 (com o comando haproxy cli), acho que todas as sessões do aplicativo abertas no SRV1 serão interrompidas após o término da "sessão" atual do HTTP. Está certo?
Se você usa socat para se comunicar com suas configurações de haproxy, você pode colocar um servidor no estado de drenagem da seguinte maneira:
echo "set server backend/serv state drain" | sudo socat stdio /etc/haproxy/haproxysock
Mais comandos aqui ! Para instalar o socat no Ubuntu, acesse answer
Eu testo isso com a versão haproxy 1.6.3:)
Other ways
synchronize session files between servers (needs a way to synchronize files between several servers, or a common single mountpoint)
Se os servidores de back-end usam PHP para o (s) aplicativo (s), você pode usar o Memcache para sincronizar as sessões entre eles.
Além disso, o Couchbase-Server pode fazer a replicação do memcache fora da caixa.
É claro que é um pouco exagerado usar o couchbase-server apenas para replicação de sessões:)
Tags maintenance haproxy cookies