Forgot your password?

Forgot your username?

All about IT, Web and Development.
By users for users.

Hochverfügbarkeit und Redundanz auf Linux Servern mit Keepalived



Gerade im Bereich von Loadbalancern und Linux Servern wird auf eine hohe Ausfallsicherheit gesetzt. Die Systeme müssen zu jeder Zeit einsatzbereit und damit hochverfügbar sein.



Der gängigste Weg ist hierbei für Redundanzen in der Infrastruktur zu sorgen. Beispielsweise werden Linux Serversysteme doppelt ausgelegt. Fällt einer der Knoten aus, übernimmt das Gegenstück.

Mit Keepalived ist es auf sehr einfachem Wege möglich solche Master - Slave (Backup) Konfigurationen einzurichten.


Einführung


Keepalived setzt das VRRP (Virtual Router Redundancy Protocol) ein. Grundlegendes Prinzip ist, dass dem Cluster (bestehend aus Master, Slave/s) eine virtuelle IP-Adresse hinzugefügt wird.

Die Auflösung der IP-Adresse in die MAC Adresse führt dabei immer auf den aktiven Server. Fällt also der Master aus, wird die Zuordnung der Adresse geändert und führt auf den Slave.

Um für eine Redundanz zu sorgen, muss Keepalived auf beiden Servern laufen.


Installation


Unter Debian / Ubuntu erfolgt die Installation von Keepalived über den nachfolgenden Befehl.

sudo apt-get install keepalived

Beim Einsatz von RedHat / CentOS Linux:

sudo yum install keepalived

Im nächsten Schritt wird der automatische Start beim Booten aktiviert.


sudo update-rc.d keepalived defaults

RedHat / CentOS:

sudo chkconfig keepalived on


Virtuelle IP erlauben


Um zu erlauben, dass IPs auch auf nicht lokale Schnittstellen zugewiesen werden dürfen, ist ein Eintrag in der /etc/systemctl.conf nötig.

sudo echo "net.ipv4.ip_nonlocal_bind = 1" >> /etc/sysctl.conf
sudo sysctl -p



Konfiguration


Die zentrale Konfiguration von Keepalived unter Linux erfolgt über die Datei /etc/keepalived/keepalived.conf.


Erreichbarkeit / Service prüfen


Zur Konfiguration sollte man sich zunächst Gedanken machen, wie man Nichterreichbarkeit definiert. Die einfachste Methode ist hierbei der Ping.

Allerdings kann ein Server durchaus per Ping erreichbar sein auch wenn der Dienst (SMB, NFS, Proxy, etc.) nicht reagiert.

Daher hat sich das Prüfen des entsprechenden Dienstes etabliert. Der erste Teil der Konfigurationsdatei besteht daher aus dem folgenden Block.

vrrp_script chk_haproxy {
   script "killall -0 haproxy"   # Dienst prüfen
   interval 2                    # Alle 2 Sekunden prüfen
   weight 2                      # 2 Punkte hinzufügen wenn OK
}


Eine Zuweisung von Master / Slave erfolgt dabei über die Priorität.Hierbei gilt höher = wichtiger.

Aus diesem Grund setzen wir 101 auf dem Master und 100 auf dem Backup Server.

Diese Abfrage lässt sich natürlich beliebig anpassen. So könnte man beispielsweise ein eigenes Bashskript für komplexere Abfragen konstruieren. Wichtig ist nur der Rückgabewert.

  • 0 = true - Erreichbar

  • 1 = false - Nicht erreichbar



Master


Für den Master ergibt sich dann die folgende Konfiguration.

vrrp_script chk_haproxy {
   script "killall -0 haproxy"   # Dienst prüfen
   interval 2                    # Alle 2 Sekunden prüfen
   weight 2                      # 2 Punkte hinzufügen wenn OK
}
 
vrrp_instance Instance0 {
   interface eth0                # Zu überwachendes Interface
   state MASTER
   virtual_router_id 51          # ID der Route
   priority 101                  # 101 - Master, 100 - Backup
   virtual_ipaddress {
       192.168.1.100            # Die virtuelle IP Adresse
   }
   track_script {
       chk_haproxy
   }
}


Backup


Auf dem Backup Server, welcher die Hochverfügbarkeit des Clusters gewährleisten soll sieht die Konfiguration wie folgt aus. Es wird lediglich die Priorität angepasst.

vrrp_script chk_haproxy {
   script "killall -0 haproxy"   # Dienst prüfen
   interval 2                    # Alle 2 Sekunden prüfen
   weight 2                      # 2 Punkte hinzufügen wenn OK
}
 
vrrp_instance Instance0 {
   interface eth0                # Zu überwachendes Interface
   state MASTER
   virtual_router_id 51          # ID der Route
   priority 100                  # 101 - Master, 100 - Backup
   virtual_ipaddress {
       192.168.1.100            # Die virtuelle IP Adresse
   }
   track_script {
       chk_haproxy
   }
}



Keepalived starten


Die Konfiguration ist nun abgeschlossen. Um Keepalived zu starten und damit auch die virtuelle IP im Netzwerk verfügbar zu machen, genügt es den Dienst zu neuzustarten.

sudo service keepalived restart

Sollte es dennoch zu Problemen kommen hilft meist ein Neustart der beiden Serversysteme.


Fazit


Die Konfiguration von Keepalived gestaltet sich sehr übersichtlich. Gerade für Linux Server bietet sich somit eine solide Basis für hochverfügbare Cluster mit Failover Funktionen.

Michael Kostka

Fachinformatiker / Systemintegration
Ich schreibe hier regelmäßig zu den Themen Android, Web, Linux und Hardware.

Raspberry Pi Starter Kit
DataCloud

Leave a comment

I have read the privacy policy and agree to electronically store and process my input data to answer the request.

Michael Kostka

17.07.2014 08:39

Hallo Claus,

dies kannst du über Notify Skripte realisieren:

https://tobrunet.ch/2013/07/keepalived-check-and-notify-scripts/#notify-script

Allerdings sollte die Datenbank auf dem Slave immer laufen. Wenn du sie erst im Failover Fall hochfährst kommt es zu ungewollten Verbindungsabbrüchen.

Viele Grüße
Michael

Claus ALbrecht - Brich

15.07.2014 09:49

Hallo zusammen,

wie starte ich auf dem slave dann eine Datenbank (pgsql) und stoppe Sie auf dem Master.

Oder geht das gar nicht.