Virtuelle-IP für Failover-Szenarien mit ucarp

Veröffentlicht: Mai 11, 2015 in Linux
Schlagwörter:, , ,

Durch ucarp lässt sich die Verfügbarkeit von IP-Systemen deutlich erhöhen. Dies wird durch den Einsatz virtueller IP-Adressen auf verschiedenen Servern erreicht. Das Haupteinsatzgebiet von CARP ist eigentlich die Hochverfügbarkeit von Gateways, jedoch lassen sich auch andere Dienste wie Webserver sehr einfach redundant auslegen.

Grundlegendes

UCARP ist eine Userland-Implementierung des des Common Address Redundancy Protocols (CARP), welches vom OpenBSD-Projekt entwickelt wurde. CARP zeichnet sich besonders durch den sehr geringen Overhead aus. Der Austausch von Statusmeldungen erfolgt über das lokale Netzwerk, d.h. es wird keine dedizierte Verbindung benötigt.

Die Hochverfügbarkeit wird erreicht in dem den physikalischen Netzwerkschnittstellen eine virtuelle IP zugeteilt wird. Diese virtuelle IP ist immer dem Master zugeordnet. Fällt er aus, wird das Backup-System zum Master. Da das Backup-System im FailOver-Fall transparent einspringt, ist das Cluster immer über eine IP erreichbar, ohne das die User etwas mitbekommen.

Einrichten des CARP-Clusters

Wichtig ist das wir 2 Server haben auf denen der selbe Dienst läuft, welcher abgesichert werden soll. Die Systeme haben jeweils eine eindeutige IP- und MAC-Adresse und bilden einen Cluster. Zusätzlich wird diesem Cluster jetzt eine virtuelle IP- und MAC-Adresse zugewiesen, über welche die Aussenwelt das Cluster anspricht. Damit die Kommunikation zwischen den Systemen funktioniert, müssen beide Server im selben Subnetz liegen. Es gibt MASTER und SLAVE-Systeme, der Master kommuniziert mit der Aussenwelt und die Slaves sind inaktiv bis der Master ausfällt. Fällt der Master aus, übernimmt einer der Slaves sowohl die virtuelle IP-Adresse als auch die virtuelle MAC-Adresse.

Aber nun genug von der Theorie. In diesem Beispiel gehen wir von dem folgenden Szenario aus:

  • ucarp 1.5.2 auf Debian (kein Startskript, Skripte zum hoch/runterfahren der virtuellen Schnittstelle => diese sind unter der Überschrift Skripte zu finden)
  • Node1 (Master): IP = 192.168.1.201
  • Node2 (Slave)   : IP = 192.168.1.202
  • Virtuelle-IP              = 192.168.1.101

Im ersten Schritt installieren wir ucarp auf allen System, unter Debian/Ubuntu geht dies über:

apt-get install ucarp

Als nächstes wird ucarp in der /etc/network/interfaces eingerichtet.

Master
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.201
broadcast 192.168.1.255
netmask 255.255.255.0
gateway 192.168.1.1
up ucarp -B -P -i eth0 -s 192.168.1.201 -v 1 -p password -a 192.168.1.101 -u /usr/share/ucarp/vip-up -d /usr/share/ucarp/vip-down
down pkill ucarp
# ucarp virtuelles Interface
iface eth0:ucarp inet static
address 192.168.1.101
netmask 255.255.255.0

Die Konfiguration für ucarp ist ab Zeile 11 zu sehen, die vorhergehenden Zeilen zeigen die normale Interfacekonfiguration. In den Zeilen 14-16 wird das virtuelle Interface, mit der virtuellen IP, für ucarp konfiguriert.

Wirklich interessant ist hier die Zeile 11, da sie ucarp startet. Aus diesem Grund werden wir diese etwas genauer beleuchten:

  • up => gibt an das alles was folgt beim hochfahren des Interfaces eth0 ausgeführt werden soll
  • ucarp => Aufruf von ucarp
  • -B => starte als Daemon
  • -P => preempt => starte sofort als Master
  • -i … => gibt an an welches Interface ucarp gebunden wird
  • -s … => die IP über welche die Kommunikation der beiden Nodes untereinander erfolgt
  • -v … => vid => interne Verwaltungsnummer der Verbindung, diese muss eindeutig für dies Verbindung sein und auf beiden Nodes gleich sein
  • -p … => Passwort um die Verbindung zwischen den beiden Servern sicher herzustellen, muss auf beiden Seiten gleich sein
  • -u … => Skript zum Aktivieren
  • -d … => Skript zum Herunterfahren

Die Zeile „down pkill ucarp“ sorgt dafür das ucarp beim Herunterfahren der Schnittstelle eth0 beendet wird.

Sofern man nicht möchte das ucarp sekündlich seinen MuliCast sendet, sollte man die Option -b unter Angabe der Zeit in Sekunden verwenden.

Nach dem Neustart und der Eingabe von „ifconfig“ sollte man folgendes sehen:

eth0:ucarp Link encap:Ethernet Hardware Adresse e8:9a:8f:b9:29:34
         inet Adresse:192.168.1.101 Bcast:192.168.1.255 Maske:255.255.255.255
         UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1
Slave
auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.1.202
broadcast 192.168.1.255
netmask 255.255.255.0
gateway 192.168.1.1
up ucarp -B -i eth0 -s 192.168.1.202 -v 1 -p password -a 192.168.1.101 -u /usr/share/ucarp/vip-up -d /usr/share/ucarp/vip-down
down pkill ucarp
#ucarp virtuelles Interface
iface eth0:ucarp inet static
address 192.168.1.101
netmask 255.255.255.255

Die Konfiguration für den Slave ist sehr ähnlich. Hier wurde lediglich der Parameter -P weggelassen sowie die IP angepasst.

Skripte
  • hochfahren
#!/bin/sh
/sbin/ifup $1:ucarp
  • herunterfahren
#!/bin/sh
/sbin/ifup $1:ucarp
Tipps zur Fehlersuche
  • starten von ucarp auf der Kommandozeile (ohne -B)
ucarp -P -i eth0 -s 192.168.1.220 -v 1 -p word -a 192.168.1.201 -u /usr/share/ucarp/vip-up -d /usr/share/ucar/vip-down

[INFO] Local advertised ethernet address is [e8:9a:8f:b9:29:34]
[WARNING] Switching to state: BACKUP
[WARNING] Spawning [/usr/share/ucarp/vip-down eth0 192.168.1.201]
/sbin/ifdown: interface eth0:ucarp not configured
[WARNING] Switching to state: MASTER
[WARNING] Spawning [/usr/share/ucarp/vip-up eth0 192.168.1.201]
[WARNING] Putting MASTER down - preemption
[WARNING] Non-preferred master advertising: reasserting control of VIP with another gratuitous arp
  • bei der weiteren Analyse kann das Tool tcpdump helfen
tcpdump not port ssh and not arp -i eth0 -v -n
Advertisements

Kommentar verfassen

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden /  Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden /  Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden /  Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden /  Ändern )

w

Verbinde mit %s