Czy istnieje sposób, aby dodać więcej serwera zaplecza do haproxy bez ponownego uruchamiania haproxy?

17

Chcemy być w stanie dodać więcej serwerów zaplecza na żądanie. W tej chwili nie widzę sposobu, aby dodać więcej serwerów zaplecza do pliku konfiguracyjnego bez ponownego uruchomienia haproxy.

Jan Deinhard
źródło

Odpowiedzi:

15

Nie przetestowałem tego konkretnego przypadku użycia, ale haproxy obsługuje „gorący przeładowanie”:

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)

Jeśli masz skrypt inicjujący uruchamianie i zatrzymywanie haproxy, prawdopodobnie obsługuje on reloadargument za pomocą funkcji takiej jak:

haproxy_reload()
{
    $HAPROXY -f "$CONFIG" -p $PIDFILE -D $EXTRAOPTS -sf $(cat $PIDFILE) \
        || return 2
    return 0
}
Kyle Brandt
źródło
1
Próbowałem tego, ale odkryłem, że to usuwa moje liczniki. Być może robię coś w niewłaściwy sposób, czy jest to oczekiwane zachowanie?
Leandro López
6

Z instrukcji:

> 1.6) Pomoc w zarządzaniu procesem

Haproxy obsługuje teraz pojęcie pliku pidfile. Jeśli argument linii poleceń „-p” lub opcja globalna „pidfile” zawiera nazwę pliku, plik ten zostanie usunięty, a następnie wypełniony wszystkimi pidami dla dzieci, po jednym w wierszu (tylko w trybie demona). Ten plik NIE znajduje się w chroot, co pozwala na pracę z chroot tylko do odczytu. Będzie własnością użytkownika rozpoczynającego proces i będzie miał uprawnienia 0644.

Przykład:

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
źródło
1

Również w zależności od wersji serwera proxy HA możesz rozważyć dynamiczny interfejs API serwera proxy HA zgodnie z opisem haproxy.com na tej stronie: https://www.haproxy.com/blog/dynamic-scaling-for-microservices-with -runtime-api /

Dynamiczny interfejs API HA-Proxy jest dostarczany z wersją Enterprise.

Należy rozważyć użycie dynamicznego API HA-Proxy, jeśli chcesz dodawać / usuwać serwery w locie jako zwykłą praktykę lub jeśli twój projekt sugeruje taki przypadek użycia.

Mike Mountrakis
źródło