Gibt es eine Möglichkeit, mehr Back-End-Server zu Haproxy hinzuzufügen, ohne Haproxy neu zu starten?

17

Wir möchten in der Lage sein, bei Bedarf weitere Back-End-Server hinzuzufügen. Im Moment sehe ich keine Möglichkeit, der Konfigurationsdatei weitere Back-End-Server hinzuzufügen, ohne Haproxy neu zu starten.

Jan Deinhard
quelle

Antworten:

15

Ich habe diesen speziellen Anwendungsfall nicht getestet, aber haproxy unterstützt ein "heißes Neuladen":

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)

Wenn Sie ein Init-Skript zum Starten und Stoppen von Haproxy haben, unterstützt es das reloadArgument wahrscheinlich mit einer Funktion wie der folgenden:

haproxy_reload()
{
    $HAPROXY -f "$CONFIG" -p $PIDFILE -D $EXTRAOPTS -sf $(cat $PIDFILE) \
        || return 2
    return 0
}
Kyle Brandt
quelle
1
Ich habe es versucht, aber festgestellt, dass meine Zähler gelöscht werden. Vielleicht mache ich etwas falsch oder ist es erwartetes Verhalten?
Leandro López
6

Aus dem Handbuch:

> 1.6) Unterstützung beim Prozessmanagement

Haproxy unterstützt jetzt den Begriff pidfile. Wenn auf das Befehlszeilenargument '-p' oder auf die globale Option 'pidfile' ein Dateiname folgt, wird diese Datei entfernt und mit allen untergeordneten Pids gefüllt, eine pro Zeile (nur im Dämonmodus). Diese Datei befindet sich NICHT in der Chroot, daher kann mit einer schreibgeschützten Chroot gearbeitet werden. Es gehört dem Benutzer, der den Prozess startet, und verfügt über die Berechtigungen 0644.

Beispiel

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

Abhängig von Ihrer HA-Proxy-Version können Sie auch die dynamische HA-Proxy-API in Betracht ziehen, die von haproxy.com auf dieser Seite beschrieben wird: https://www.haproxy.com/blog/dynamic-scaling-for-microservices-with -runtime-api /

Die HA-Proxy Dynamic API wird mit der Enterprise-Version geliefert.

Sie sollten die dynamische HA-Proxy-API in Betracht ziehen, wenn Sie Server im laufenden Betrieb hinzufügen / entfernen möchten oder wenn Ihr Projekt einen solchen Anwendungsfall impliziert.

Mike Mountrakis
quelle