Existe-t-il un moyen d'ajouter plus de serveur principal à haproxy sans redémarrer haproxy?

17

Nous voulons pouvoir ajouter plus de serveurs principaux à la demande. Pour le moment, je ne vois pas de moyen d'ajouter plus de serveurs principaux au fichier de configuration sans redémarrer haproxy.

Jan Deinhard
la source

Réponses:

15

Je n'ai pas testé ce cas d'utilisation spécifique mais haproxy prend en charge un "rechargement à chaud":

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 vous avez un script init pour démarrer et arrêter haproxy, il prend probablement en charge l' reloadargument avec une fonction comme:

haproxy_reload()
{
    $HAPROXY -f "$CONFIG" -p $PIDFILE -D $EXTRAOPTS -sf $(cat $PIDFILE) \
        || return 2
    return 0
}
Kyle Brandt
la source
1
J'ai essayé mais j'ai trouvé que ça effaçait mes compteurs. Peut-être que je fais quelque chose dans le mauvais sens, ou est-ce un comportement attendu?
Leandro López
6

Du manuel:

> 1.6) Aider à la gestion des processus

Haproxy prend désormais en charge la notion de fichier pid. Si l'argument de ligne de commande '-p' ou l'option globale 'pidfile' est suivi d'un nom de fichier, ce fichier sera supprimé, puis rempli avec tous les pids des enfants, un par ligne (uniquement en mode démon). Ce fichier n'est PAS dans le chroot, ce qui permet de travailler avec un chroot en lecture seule. Il appartiendra à l'utilisateur qui démarre le processus et disposera des autorisations 0644.

Exemple :

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
la source
1

En fonction de votre version de HA-proxy, vous voudrez peut-être également considérer l'API dynamique HA-Proxy comme décrit par haproxy.com dans cette page: https://www.haproxy.com/blog/dynamic-scaling-for-microservices-with -runtime-api /

L'API dynamique HA-Proxy est fournie avec la version Entreprise.

Vous devriez considérer l'API dynamique HA-Proxy si vous souhaitez ajouter / supprimer des serveurs à la volée comme une pratique habituelle ou si votre projet implique un tel cas d'utilisation.

Mike Mountrakis
la source