CARP unter Ubuntu Linux

Allgemeines zu CARP

Durch das Common Address Redundancy Protocol (CARP) lässt sich die Verfügbarkeit von IP-Systemen deutlich erhöhen. Dies wird durch den Einsatz virtueller IP/MACAdressen auf verschiedenen Rechnern erreicht. Das Haupteinsatz von CARP ist zwar die Hochverfügbarkeit von Gateways, jedoch lassen sich auch andere Dienste wie Datenbanken oder Mailserver sehr einfach redundant auslegen. Heute zeige ich euch wie wir dies unter Ubuntu machen können…

Einrichten eines CARP Clusters

Wichtig ist das wir zwei Server haben auf denen der selbe Dienst läuft welchen wir absichern wollen. Diese 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 diese virtuelle IP/MACAdresse kommuniziert der Cluster mit anderen Systemen. Damit die Kommunikation 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. Über das CARP Protocol stellen die Mitglieder sicher das alles läuft. Wenn der Master ausfällt, übernimmt einer der Slaves sowohl die virtuelle MAC-Adresse als auch die virtuelle IP-Adresse. Soviel zur Theorie…

Zuerst müssen wir das Packet uCarp auf allen Servern installieren. Dazu geben wir das altbekannte ein..

apt-get install ucarp

Nun richten wir als erstes den Master ein und müssen die Virtuelle MAC/IP konfigurieren.

nano  /etc/network/interfaces

Hier eine Beispieldatei die bei mir auch so im Einsatz ist.

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.80.11
broadcast 192.168.80.255
netmask 255.255.255.0
gateway 192.168.80.247
ucarp-vid 1 ucarp-vip 192.168.x.x ucarp-password sicherespw
ucarp-advskew 10
ucarp-advbase 1
ucarp-master yes
ucarp-upscript /usr/share/ucarp/vip-up
ucarp-downscript /usr/share/ucarp/vip-down

Die ucarp-vid stelt die interne Verwaltungsnummer der verbindung da. Diese muss eindeutig für diese Verbindung sein, wollte ich mehrere Verbindungen auf dem Server absichern so muss für jedes Interface eine eigene VID eingerichtet sein. Mit ucarp-vip wird die virtuelle IP angegeben über die später kommuniziert werden soll. ucarp-password wird genutzt damit die Verbindung unter den Mitgliedern sicher hergestellt werden kann. Die Daten werden jedoch nicht verschlüsselt, es dient rein der authentifizierung der Clients untereinander. Durch ucarp-advskew wird der Master bestimmt. Je niedriger der Wert desto ehr wird das System der Master. Vor allem bei mehreren Slaves ist dies wichtig. Der Wert bei ucarp-advbase gibt die Zeit in Sekunden vor wie oft die Slaves den Master fragen ob er noch erreichbar ist. Hier also jede Sekunde. Durch ucarp-master geben wir hier den Master direkt vor. Die Scripte werden ausgeführt wenn der Status des Interfaces sich ändert. Das Upscript wird ausgeführt wenn der Server Master wird und das downscript wenn der master degradiert wird.

Nun müssen wir noch ein virtuelles Interface anlegen. Damit wir dieses auch ansprechen können. Durch ucarp wird dieses Interface nur aktiv wenn der Master ausfällt!!!

iface eth0:virt inet static
address 192.168.x.x
netmask 255.255.255.255

Damit ist der Master eingerichtet. Nun ist der Slaverechner dran. Hier gehen wir analog vor und müssen auch hier ucarp erst installieren und dann ein virtuelles Interface erstellen. Hier wieder eine Beispielkonfig von mir.

auto lo
iface lo inet loopback

# The primary network interface
auto eth0
iface eth0 inet static
address 192.168.x.12
broadcast 192.168.x.255
netmask 255.255.255.0
gateway 192.168.x.x
ucarp-vid 1
ucarp-vip 192.168.x.x
ucarp-password sicherespw
ucarp-advskew 11
ucarp-advbase 1
ucarp-master no ucarp-upscript /usr/share/ucarp/vip-up
ucarp-downscript /usr/share/ucarp/vip-down

Die wichtigsten Änderungen habe ich fett markiert. Der Slave muss eine eindeutige eigene IP haben. Die VID, VIP und das Passwort müssen auf beiden Systemen gleich sein. Den skew setze ich hier hör und gebe manuell bekannt das dieses System kein Master ist!!! Auch hier muss wieder das virtuelle Interface erstellt werden wie oben:

iface eth0:virt inet static
address 192.168.x.x
netmask 255.255.255.255

Nach einen Neustart solltet ihr das System in Aktion sehen … Durch den aufruf von

ifconfig

solltet ihr etwas in der Art hier sehen:

eth0:ucarp Link encap:Ethernet Hardware Adresse 00:0d:29:25:34:c9
 inet Adresse:192.168.x.x Bcast:192.168.x.x Maske:255.255.255.255
 UP BROADCAST RUNNING MULTICAST MTU:1500 Metrik:1

Kurzer Tipp noch von mir, damit das ganze auch unter VMWARE Gästen läuft müsst ihr auf dem Switch die Änderung der IP Adresse und den Promiscous Modus erlauben!!! Sonst erlaubt die VMWARE bzw. die ESXi Umgebung die Änderung der Mac nicht!!!

 

2 Gedanken zu “CARP unter Ubuntu Linux

  1. Vielen Dank für diesen guten Einstieg ins Thema.
    Nach zwei theoretischen Artikeln, kam dein Hands-On-Beitrag sehr gelegen. Ich werde das heute auf meinem KVM-Host umsetzen.
    CARP scheint ein interessantes Konzept zu sein, von dem ich bisher noch nichts wusste.

Schreib einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *