Drenar conexões no reinício do processo NGINX?

3

Estou usando o NGINX 1.8.1 no CentOS 6 e 7. Durante nossas implementações, é necessário que o NGINX seja interrompido, o deploy seja executado e o NGINX seja iniciado novamente. Infelizmente, NGINX durante uma parada parece apenas 500 todas as conexões. Como estou usando o Ansible para atualizar hosts de 2/10 de uma vez, é provável que muitos de nossos clientes recebam 500 em todo o processo de implantação.

Existe uma maneira, através das configurações do NGINX, de o processo NGINX drenar todas as conexões ativas (isto é, esperar que elas sejam concluídas) enquanto rejeita todas as novas conexões durante uma parada?

Eu sei que os Elastic Load Balancers da Amazon tem essa funcionalidade , existe um equivalente para o NGINX?

    
por Naftuli Kay 07.05.2016 / 01:56

3 respostas

3

De acordo com os comentários, você poderia tentar resolver isso usando um firewall:

  • Tarefa: Bloquear novas conexões recebidas, mas manter as relacionadas e estabelecidas

  • Experimente: iptables -I INPUT -j DROP -p tcp --syn --destination-port 80 (ou 443, o que se aplica à sua configuração) para definir a regra, bloqueando assim o novo tráfego

  • Faça sua implantação ...

  • Experimente: iptables -D INPUT -j DROP -p tcp --syn --destination-port 80 (ou 443, o que se aplica à sua configuração) para reverter a regra, permitindo assim um novo tráfego

  • Nota: Acabei de testar isso em breve, funcionou como esperado. Mas: Por favor, não tome isso como garantido, e teste você mesmo também. Comentários bem-vindos ...

Editar: Como @Guntram Blohm apontou nos comentários, é melhor usar iptables -I em vez de iptables -A . Alterou isto apropriadamente no código acima.

    
por 07.05.2016 / 02:30
3

Envie ao nginx o sinal "QUIT" para executar um desligamento normal , que interrompe a escuta de novas conexões, mas permite que os funcionários continuem a fornecer conexões ativas.

Vale a pena distinguir entre desligamento normal e drenagem de conexão ; O desligamento normal afeta o modo como o NGINX lida com as conexões de entrada enquanto o servidor está sendo desligado, mas a drenagem da conexão (como mencionado por Martijn Heemels é um recurso do NGINX Plus) lida com a forma como o NGINX remove um servidor de backend de serviço ao agir como um balanceador de carga. De sua pergunta, parece que você está mais interessado no primeiro.

    
por 07.05.2016 / 04:45
2

Até onde eu sei, a drenagem de conexão só está disponível na versão comercial, Nginx Plus.

Há uma descrição do recurso aqui: link

Isso faz parte do módulo ngx_http_upstream_conf_module .

    
por 07.05.2016 / 02:17

Tags