¿Hay alguna manera de agregar más servidores de back-end a haproxy sin reiniciar haproxy?

17

Queremos poder agregar más servidores de back-end a pedido. En este momento no veo una manera de agregar más servidores de back-end al archivo de configuración sin reiniciar haproxy.

Jan Deinhard
fuente

Respuestas:

15

No he probado este caso de uso específico, pero haproxy admite una "recarga en caliente":

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)

Si tiene un script de inicio para iniciar y detener haproxy, es probable que admita el reloadargumento con una función como:

haproxy_reload()
{
    $HAPROXY -f "$CONFIG" -p $PIDFILE -D $EXTRAOPTS -sf $(cat $PIDFILE) \
        || return 2
    return 0
}
Kyle Brandt
fuente
1
He intentado esto pero he descubierto que borra mis contadores. Tal vez estoy haciendo algo de manera incorrecta, ¿o es un comportamiento esperado?
Leandro López el
6

Del manual:

> 1.6) Ayuda en la gestión del proceso

Haproxy ahora admite la noción de pidfile. Si se sigue el argumento de la línea de comando '-p', o la opción global 'pidfile' con un nombre de archivo, este archivo se eliminará y luego se rellenará con todos los pids de los niños, uno por línea (solo en modo demonio). Este archivo NO está dentro del chroot, lo que permite trabajar con un chroot de solo lectura. Será propiedad del usuario que inicie el proceso y tendrá permisos 0644.

Ejemplo:

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
fuente
1

También, dependiendo de la versión de su proxy HA, es posible que desee considerar la API dinámica HA-Proxy como haproxy.com describe en esta página: https://www.haproxy.com/blog/dynamic-scaling-for-microservices-with -runtime-api /

La API dinámica HA-Proxy viene con la versión Enterprise.

Debe considerar la API dinámica HA-Proxy si desea agregar / eliminar servidores sobre la marcha como una práctica habitual o si su proyecto implica un caso de uso de este tipo.

Mike Mountrakis
fuente