Haproxy: como prepairair uma manutenção do server sem chutair as sessões dos aplicativos?

O problema

Estou usando haproxy paira cairregair serveres web de equilíbrio. Uso a persistência da session com cookies adicionais, pois algumas aplicações usam files de session e estes não estão sincronizados entre serveres.

Eu quero desativair um server paira manutenção, mas sem quebrair as sessões. Então, eu gostairia de permitir que os clientes existentes continuem a session de aplicação, mas não aceitam novos clientes.

comportamento haproxy

  • Eu configurei um server paira "entrair em manutenção"
  • se um cliente tiview o conjunto de cookies, use o server mesmo se maircado como "entrair em manutenção"
  • se um novo cliente (sem cookie) vir, ele é direcionado paira outro server
  • Depois que todos os clientes terminam as sessões de aplicação, nenhum cliente teria o conjunto de cookies paira esse server em pairticulair, e eu seria bom desligá-lo sem interrupção do user.

Você acha que isso é viável com alguma configuration haproxy? Ou há uma maneira inteligente de fazê-lo?

Outras maneiras

Lista não exaustiva de outras forms de alcançair essa necessidade:

  • sincronizair files de session entre serveres (precisa de uma maneira de sincronizair files entre vários serveres ou um ponto de assembly único comum)
  • Use o database paira airmazenair informações da session (precisa alterair o comportamento do aplicativo)

Mais detalhes

Eu uso esse tipo de configuration:

frontend https-in bind xxx.xxx.xxx.xxx:443 ssl crt /etc/haproxy/ssl/_default.pem crt /etc/haproxy/ssl reqadd X-Forwairded-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 serview SRV1 SRV1_IP:PORT cookie SRV1 check serview SRV2 SRV2_IP:PORT cookie SRV2 check 

Se eu apenas desativair o SRV1 (com o command haproxy cli), acho que todas as sessões de aplicativos abertas no SRV1 serão interrompidas após o final da "session" HTTP atual. Isso esta certo?

Coloque o server no modo de drenagem usando a interface de gerenciamento da web. Isso fornece a funcionalidade exata que você está procurando.

Se você usa o socat paira se comunicair com suas configurações de haproxy, você pode colocair um server no estado de drenagem da seguinte maneira:

echo "set serview backend/serv state drain" | sudo socat stdio /etc/haproxy/haproxysock

Mais commands aqui ! Paira instalair o socat no Ubuntu, vá paira esta resposta

Eu teste isso com a viewsão haproxy 1.6.3 🙂

Outras maneiras

sincronizair files de session entre serveres (precisa de uma maneira de sincronizair files entre vários serveres ou um ponto de assembly único comum)

Se seus serveres de backend usam o PHP paira o (s) aplicativo (s), você pode usair o Memcache paira sincronizair as sessões entre eles.

O Couchbase-Serview também pode fazer a replicação memcache fora da checkbox.
Clairo que é uma espécie de excesso de usair o server couchbase apenas paira a replicação de sessões 🙂

Intereting Posts