Sempre salva o estado do servidor HAProxy antes de parar

1

Às vezes, desabilitamos servidores específicos no HAProxy (em execução no RedHat 7, mas compilados localmente porque o 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. Nós definimos o HAProxy para carregar seu estado de um arquivo com server-state-file , mas precisamos 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 parar?
Se o systemd tivesse ExecPreStop= , poderíamos incluí-lo a partir de um arquivo em /etc/systemd/system sem modificar o arquivo da unidade distribuída, mas os desenvolvedores do systemd disseram não ver a necessidade dessa diretiva.

    
por yakatz 19.04.2018 / 01:30

1 resposta

1

Acabamos criando um serviço "falso" com apenas uma ação de parada que depende de haproxy.service e, portanto, terá sua ExecStop executada antes que o HAProxy seja interrompido.

haproxy-state.service:

[Unit]
Description=Save HAProxy State Before Service Stop
After=haproxy.service
Requires=haproxy.service

[Service]
Type=oneshot
RemainAfterExit=true
ExecStop=/bin/sh -c "/usr/bin/socat /run/haproxy/control.socket - <<< \"show servers state\" > /var/lib/haproxy/last_state"

[Install]
WantedBy=multi-user.target haproxy.service

Ele precisa ser após haproxy.service , por isso parará antes . Ele precisa ser WantedBy para que sempre seja 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 isso é um risco que teremos.

    
por 19.04.2018 / 01:30