Existe uma maneira de adicionar mais servidor de back-end ao haproxy sem reiniciar o haproxy?

17

Queremos poder adicionar mais servidores back-end sob demanda. No momento, não vejo uma maneira de adicionar mais servidores de back-end ao arquivo de configuração sem reiniciar o haproxy.

Jan Deinhard
fonte

Respostas:

15

Não testei este caso de uso específico, mas o haproxy suporta uma "recarga a quente":

2.4.1) Hot reconfiguration
--------------------------
The '-st' and '-sf' command line options are used to inform previously running
processes that a configuration is being reloaded. They will receive the SIGTTOU
signal to ask them to temporarily stop listening to the ports so that the new
process can grab them. If anything wrong happens, the new process will send
them a SIGTTIN to tell them to re-listen to the ports and continue their normal
work. Otherwise, it will either ask them to finish (-sf) their work then softly
exit, or immediately terminate (-st), breaking existing sessions. A typical use
of this allows a configuration reload without service interruption :

 # haproxy -p /var/run/haproxy.pid -sf $(cat /var/run/haproxy.pid)

Se você possui um script init para iniciar e parar o haproxy, provavelmente suporta o reloadargumento com uma função como:

haproxy_reload()
{
    $HAPROXY -f "$CONFIG" -p $PIDFILE -D $EXTRAOPTS -sf $(cat $PIDFILE) \
        || return 2
    return 0
}
Kyle Brandt
fonte
11
Eu tentei isso, mas descobri que ele limpa meus contadores. Talvez eu esteja fazendo algo da maneira errada ou seja um comportamento esperado?
Leandro López
6

Do manual:

> 1.6) Ajudando o gerenciamento de processos

O Haproxy agora suporta a noção de pidfile. Se o argumento da linha de comandos '-p' ou a opção global 'pidfile' for seguida com um nome de arquivo, esse arquivo será removido e preenchido com todos os pids filhos, um por linha (apenas no modo daemon). Este arquivo NÃO está dentro do chroot, o que permite trabalhar com um chroot somente leitura. Ele pertencerá ao usuário que iniciar o processo e terá permissões 0644.

Exemplo:

global
    daemon
    quiet
    nbproc  2
    pidfile /var/run/haproxy-private.pid

# to stop only those processes among others :
# kill $(</var/run/haproxy-private.pid)

# to reload a new configuration with minimal service impact and without
# breaking existing sessions :
# haproxy -f haproxy.cfg -p /var/run/haproxy-private.pid -sf $(</var/run/haproxy-private.pid)
Janne Pikkarainen
fonte
1

Além disso, dependendo da versão do proxy HA, você pode considerar a API dinâmica do proxy HA, conforme descrito por haproxy.com nesta página: https://www.haproxy.com/blog/dynamic-scaling-for-microservices-with -runtime-api /

A API dinâmica HA-Proxy vem com a versão Enterprise.

Você deve considerar a API dinâmica HA-Proxy, se desejar adicionar / remover servidores em tempo real como uma prática usual ou se o seu projeto implicar nesse caso de uso.

Mike Mountrakis
fonte