HAProxy mit keepalived

Der HAProxy macht den Webserver HA, jetzt machen wir den HAProxy selber HA.

haproxy keepalived

Dieser Beitrag ist die Erweiterung zu diesem Beitrag.

Die ersten 3 Server sind ja schon vorhanden, sprich frontend-01, frontend-02 und der haproxy-01. Nun machen wir nach dem gleichen Verfahren einen vierten Server bereit. Dieser trägt den Namen haproxy-02. Dieser Server wird genau gleich aufgesetzt, mit der genau gleichen Konfiguration wie der Server haproxy-01.

Damit sind wir VMmässig fertig mit den Vorbereitungen. Nun geht es darum, denn Dienst keepalived bereitzusteleln.

Die ersten Schritte sind auf beiden Servern haproxy-01 und haproxy-02 genau gleich:

  • ip link show
  • merk dir bitte den Namen des Interfaces, in meinem Fall heisst das Interface ens192
  • apt-get install keepalived
  • nano /etc/keepalived/keepalived.conf

Nun machen wir mit dem Master-Server weiter, haproxy-01.

vrrp_script chk_haproxy {

script "/bin/pidof haproxy"
interval 2

}

vrrp_instance VI_1 {

interface ens192
state MASTER
priority 200

virtual_router_id 51
virtual_ipaddress {
172.16.1.101

}

track_script {

chk_haproxy

}

Der erste Teil vrrp_script chk_haproxy führt eine Überprüfung durch, ob der Dienst haproxy läuft oder nicht. Falls der Dienst nicht laufen soll, geht er in den failover Status und gibt die später konfigurierte IP-Adresse an den Backupserver weiter. Hier wird die Überprüfung deklariert.

Unter vrrp_instance VI_1 wird nun definiert, wie sich keepalived verhalten soll. Unter interface tragen wir die vorher abgefragte Schnittstelle ein. state definiert, ob es sich um den Master oder ein Backup handelt. priority definiert, in welcher Reihenfolge diese reagieren sollen. Der Master sollte die höchste Priorität zu den Backups haben. Im Beispiel ist diese bei 200 gesetzt.

Unter virtual_router_id definieren wir nun, mit welcher IP-Adresse sich der Server nach aussen identifizieren soll, die er im failover an seinen Backupserver weiter gibt.

Zu guter letzt mit track_script rufen wir die Routine auf, welche dafür sorgt, dass keepalived reagieren soll. So wird nicht nur vom Backup geprüft, ob der Master noch vorhanden ist, sondern auch wennd er Dienst haproxy abgeschaltet ist, er den failover einleitet.

 

Nun gehts weiter zum Backupserver, haproxy-02.

vrrp_script chk_haproxy {

script "/bin/pidof haproxy"
interval 2

}

vrrp_instance VI_1 {

interface ens192
state BACKUP
priority 100

virtual_router_id 51
virtual_ipaddress {
172.16.1.101

}

track_script {

chk_haproxy

}

Was hat sich geändert? Der Parameter state ändert von Master auf Backup und die priority ist kleiner als die des haproxy-01, dem Master.

Die letzen Schritte, die wieder für beide Server gelten:

  • service keepalived restart

Die beiden Dienste sollten nun ohne Fehler starten. Die virtuelle IP-Adresse sollte auch pingbar sein. Schon sind wir bereit zum Testen.

  • Um zu prüfen, auf welchem Server wir sind, gehe ich auf 172.16.1.101:8080 und rufe die HAProxy Statistiken auf. Darin ist angezeigt, welcher Node aktiv auf die IP reagiert.
  • Tests auf dem Master
    • service haproxy stop
    • Der Server leitet ein failover ein, übergibt die IP 172.16.1.101, Stats ändern auf haproxy-02
    • service haproxy start
    • Der Server meldet dem Backup, er ist wieder bereit und nimmt die IP zurück, Stats ändern auf haproxy-01
    • reboot
    • haproxy-02 merkt, das der Master weg ist, wechselt von Backup auf Master.
     

Die gleichen Tests auf dem Backup durchzuführen bringt hier leider nicht viel, da die Hauptrolle immer auf dem Master bleibt.

Wenn man nun die pings beachtet, verliert man normalerweise 1 Paket während dem Umschalten. Es kann aber auch passieren, dass er kein Paket verliert.

Etwas zum Serverneustart: Die Server sind extrem schlank und ressourcensparend, trotzdem schaffen sie es, einen Reboot mit ca. 4 verlorenen pings durchzuführen.

 

Etwas zur Pflege der Server, ich führe in regelmässigen Abständen folgende Zeilen durch:

apt-get update
apt-get upgrade
apt-get dist-upgrade
apt-get autoremove
apt-get autoclean

Wenn man sich das in einen Batch pakt, ist das auch schnell erledigt und ist in der Regel schnell up to date. Aber bitte trotzdem nicht vergessen, einen Snapshot zu machen.

 


Drucken