Será que esse "script de reinicialização" do HAProxy funcionará da maneira mais agradável possível?


9

Eu montei esse script de vários lugares. O que eu espero é que ele faça o seguinte depois de executar:

  1. Pause todo o tráfego http "NOVO" para as portas 80 e 443 - apenas "pause", não dê nenhum erro
  2. reinicie o haproxy normalmente quando todas as solicitações "em andamento" forem concluídas
  3. Desative o tráfego http e continue os negócios como de costume.

É assim que vai funcionar? Perdi alguma coisa? Temos milhares de regras acl baseadas em ip, armazenadas em um arquivo que faz referência a haproxy e precisamos recarregá-lo várias vezes por minuto.

#!/bin/sh

# hold/pause new requests
iptables -I INPUT -p tcp --dport 80 --syn -j DROP
iptables -I INPUT -p tcp --dport 443 --syn -j DROP
sleep 1

# gracefully restart haproxy
/usr/sbin/haproxy -f /etc/haproxy/haproxy.cfg -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)

# allow new requests to come in again
iptables -D INPUT -p tcp --dport 80 --syn -j DROP
iptables -D INPUT -p tcp --dport 443 --syn -j DROP

Edit: Eu adoraria testá-lo de alguma forma, mas ainda não temos tráfego (com exceção de eu testar).

Fontes:

http://www.forouzani.com/reload-haproxy-cfg-without-restarting.html

https://github.com/Mirantis/openstack-lbaas/issues/3

Recarga normal HAProxy sem perda de pacotes

Respostas:


4

Com base nesses artigos, deve funcionar bem.

Lembre-se de que você não tem o tráfego, sempre pode imitá-lo.

Use a ferramenta de referência do apache para colocar algum tráfego falso.

Apenas verifique se a página que você está carregando leva alguns segundos para carregar, para testar o pior cenário possível.

Criei para você um livro de receitas que prova que a configuração que você fornece funciona corretamente.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.