Preservar o status do servidor backend ao recarregar o haproxy

3

Como tenho um grande pool de certificados https que mudam de um dia para outro (aplicativo multilíngüe enorme com muitos domínios), tenho um script que pode recarregar o haproxy em horários quase aleatórios. Isso funciona bem.

Também defino servidores de back-end para MAINT quando estou implantando novas versões de aplicativos para eles. Isso também funciona bem.

O problema é que, se ocorrer o recarregamento, todos os servidores que eu defini para o status MAINT serão recarregados como READY. Isso permite que os clientes vejam esperas ou até mesmo mensagens de erro.

Existe uma maneira de preservar o status atual dos servidores back-end ao recarregar o haproxy?

    
por Ross Presser 27.10.2017 / 13:00

1 resposta

4

Não tenho certeza de qual versão você está usando, as necessidades a seguir HAProxy >= 1.6~ :

Você pode querer dar uma olhada no carregamento diretiva server-state-from-file , que permite

seamless reloads of HAProxy.

This directive points HAProxy to a file where server state from previous running process has been saved. That way, when starting up, before handling traffic, the new process can apply old states to servers exactly has if no reload occured. [...]

(Isso é apenas um trecho, para mais detalhes, siga o link.)

Usando isso, sua configuração pode parecer (somente as partes relevantes mostradas):

global
  server-state-file /var/lib/haproxy/server-state
  stats socket /var/lib/haproxy/stats

defaults
  load-server-state-from-file global

Seu comando reload poderia se parecer com o seguinte:

socat /var/lib/haproxy/stats - <<< \"show servers state\" > /var/lib/haproxy/server-state && systemctl reload-or-restart haproxy

Isto é:

  • Conecte-se ao stats socket via socat , obtenha os estados dos servidores e / ou backends e grave no arquivo de estado.
  • Depois disso, se tudo correr bem, recarregue ou reinicie o HAProxy .
por 27.10.2017 / 15:45

Tags