Às vezes, desabilitamos servidores específicos no HAProxy (executando no RedHat 7, mas compilados localmente porque 1.8 não está disponível no RedHat) usando um soquete de administrador e queremos que o estado seja mantido se o servidor for reiniciado. Definimos o HAProxy para carregar seu estado de um arquivo com server-state-file
, mas precisamos nos lembrar de salvar o arquivo de estado toda vez que fizermos uma alteração. Existe uma boa maneira de garantir que o estado seja salvo toda vez que o servidor for interrompido?
Se o systemd tivesse ExecPreStop=
, poderíamos incluí-lo de um arquivo /etc/systemd/system
sem modificar o arquivo da unidade distribuída, mas os desenvolvedores do systemd disseram que não veem a necessidade dessa diretiva.
Acabamos criando um serviço "falso" com apenas uma ação de parada que depende
haproxy.service
e por isso terá suaExecStop
execução antes que o HAProxy seja interrompido.haproxy-state.service :
Precisa ser depois
haproxy.service
para parar antes . Ele precisaWantedBy
ser iniciado sempre que o HAProxy estiver em execução.Isso não é perfeito porque o estado pode mudar se houver uma longa pausa antes que o systemd pare o próximo serviço, mas esse é um risco que correremos.
Você pode considerar desabilitar todas as seções
frontend
e disponíveis antes de exportar seu estado.listen
Algo como executar a seguinte linha bash (para cada seção):echo 'disable frontend https_frontend' | socat /run/haproxy/admin.sock stdio
.Também pode ser feito tendo um acl específico considerado por todas as seções
frontend
e .listen
Isso permitirá que você os habilite/desabilite logicamente executando um único comando como:add acl ...' | socat /run/haproxy/admin.sock stdio
edel acl ...' | socat /run/haproxy/admin.sock stdio
, respectivamente.