32.12. CARP - Common Address Redundancy Protocol

Beigetragen von Tom Rhodes.
Aktualisiert von Allan Jude.

Das Common Address Redundancy Protocol (CARP) erlaubt es, mehreren Rechnern die gleiche IP-Adresse zuzuweisen und Hochverfügbarkeit bereitzustellen. Das bedeutet, dass ein oder mehrere Rechner ausfallen können und die anderen Rechner transparent einspringen, ohne das der Benutzer etwas von einem Ausfall mitbekommt. Neben der gemeinsamen IP-Adresse, haben die jeweiligen Rechner auch eine eindeutige IP-Adresse zur Verwaltung und Konfiguration, wie in den folgenden Beispielen zu sehen ist.

32.12.1. Hochverfügbarkeit mit CARP

CARP wird häufig verwendet, um einen oder mehrere Dienste hochverfügbar zu machen. Dieses Beispiel konfiguriert eine Failover-Unterstützung mit drei Servern (mit jeweils eigener, eindeutiger IP-Adresse), die alle den gleichen Web-Inhalt anbieten. Die Lastverteilung dieser Maschinen wird dabei über Round Robin DNS konfiguriert. Mit Ausnahme des Hostnamens und der IP-Management-Adresse sind Master- und Backup-Maschinen identisch konfiguriert. Die Server müssen die gleiche Konfiguration und die gleichen Dienste aktiviert haben. Tritt ein Failover auf, können Anfragen an den Dienst mit der gemeinsam genutzten IP-Adresse nur dann richtig beantwortet werden, wenn der Backup-Server Zugriff auf denselben Inhalt hat. Die Backup-Maschine verfügt über zwei zusätzliche CARP-Schnittstellen, eine für jede IP-Adresse des Master-Content-Servers. Sobald ein Fehler auftritt, übernimmt der Backup-Server die IP-Adresse des ausgefallenen Master-Servers. Die Benutzer werden einen Dienstausfall überhaupt nicht bemerken.

Dieses Beispiel benutzt zwei verschiedene Master namens hosta.example.org und hostb.example.org mit einem gemeinsamen Backup namens hostc.example.org.

Jede virtuelle IP-Adresse hat eine eindeutige Identifikationsnummer, die als Virtual Host Identification (VHID) bekannt ist. Alle Maschinen, die sich eine IP-Adresse teilen, verwenden die gleiche VHID. Die VHID für jede einzelne IP-Adresse muss, entsprechend der Broadcast-Domäne der Netzwerkschnittstelle, eindeutig sein.

32.12.2. CARP mit FreeBSD 10 (und neuer) benutzen

Unterstützung für CARP erhalten Sie durch das Laden des Kernelmoduls carp.ko in /boot/loader.conf:

carp_load="YES"

Das CARP-Modul kann auch, wie in Kapitel 9, Konfiguration des FreeBSD-Kernels beschrieben, direkt in den FreeBSD Kernel eingebunden werden:

device  carp

Hostname, IP-Management-Adresse, Subnetzmaske, gemeinsame IP-Adresse und VHID werden durch das Hinzufügen in /etc/rc.conf gesetzt. Dieses Beispiel ist für hosta.example.org:

hostname="hosta.example.org"
ifconfig_em0="inet 192.168.1.3 netmask 255.255.255.0"
ifconfig_em0_alias0="vhid 1 pass testpass alias 192.168.1.50/32"

Beispiel für hostb.example.org:

hostname="hostb.example.org"
ifconfig_em0="inet 192.168.1.4 netmask 255.255.255.0"
ifconfig_em0_alias0="vhid 2 pass testpass alias 192.168.1.51/32"

Anmerkung:

Achten Sie unbedingt darauf, dass die durch die Option pass an ifconfig(8) übergebenen Passwörter auf beiden Systemen identisch sind, da carp-Geräte nur mit Systemen kommunizieren können, die über ein korrektes Passwort verfügen.

Die dritte Maschine, hostc.example.org ist so konfiguriert, das sie aktiviert wird, wenn eines der beiden zuvor konfigurierten Systeme ausfällt. Diese Maschine ist mit zwei CARP VHIDs konfiguriert, eine für jede virtuelle IP-Adresse der beiden Master-Server. Die Option advskew (CARP advertising skew) wird gesetzt, um sicherzustellen, dass sich der Backup-Server später ankündigt wie der Master-Server. advskew steuert die Rangfolge für den Fall das mehrere Backup-Server zur Verfügung stehen. Passen Sie die Konfiguration in /etc/rc.conf an:

hostname="hostc.example.org"
ifconfig_em0="inet 192.168.1.5 netmask 255.255.255.0"
ifconfig_em0_alias0="vhid 1 advskew 100 pass testpass alias 192.168.1.50/32"
ifconfig_em1_alias0="vhid 2 advskew 100 pass testpass alias 192.168.1.51/32"

Durch die zwei konfigurierten CARP VHIDs ist hostc.example.org in der Lage festzustellen, wenn einer der Master-Server nicht mehr reagiert. Wenn der Master-Server sich später ankündigt als der Backup-Server, übernimmt der Backup-Server die gemeinsame IP-Adresse, bis der Master-Server erneut verfügbar ist.

Preemption ist standardmäßig deaktiviert. Wird Preemption aktiviert, kann es vorkommen, dass hostc.example.org die virtuelle IP-Adresse nicht wieder an den Master-Server zurückgibt. Der Administrator kann jedoch den Backup-Server dazu zwingen, die übernommene IP-Adresse wieder an den Master-Server zurückzugeben:

# ifconfig em0 vhid 1 state
backup

An dieser Stelle muss entweder das Netzwerk neu gestartet, oder die Maschine neu gebootet werden, um CARP zu aktivieren.

Die Funktionalität von CARP kann, wie in der Manualpage carp(4) beschrieben, über verschiedene sysctl(8) Parameter kontrolliert werden. Mit dem Einsatz von devd(8) können weitere Aktionen zu CARP-Ereignissen ausgelöst werden.

32.12.3. CARP mit FreeBSD 9 (und älter) benutzen

Unterstützung für CARP erhalten Sie durch das Laden des Kernelmoduls carp.ko in /boot/loader.conf:

if_carp_load="YES"

CARP kann auch direkt in den Kernel eingebunden werden. Diese Prozedur wird in Kapitel 9, Konfiguration des FreeBSD-Kernels beschrieben:

device    carp

Die CARP-Schnittstellen selbst können mittels ifconfig(8) erstellt werden:

# ifconfig carp0
create

Konfigurieren Sie Hostnamen, IP-Management-Adresse, die gemeinsam genutzte IP-Adresse und die VHID, indem Sie die erforderlichen Zeilen in /etc/rc.conf hinzufügen. Hierzu ein Beispiel für hosta.example.org:

hostname="hosta.example.org"
ifconfig_fxp0="inet 192.168.1.3 netmask 255.255.255.0"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 1 pass testpass 192.168.1.50/24"

Beispiel für hostb.example.org:

hostname="hostb.example.org"
ifconfig_fxp0="inet 192.168.1.4 netmask 255.255.255.0"
cloned_interfaces="carp0"
ifconfig_carp0="vhid 2 pass testpass 192.168.1.51/24"

Anmerkung:

Preemption ist im GENERIC FreeBSD Kernel deaktiviert. Haben Sie jedoch Preemption in einem angepassten Kernel aktiviert, dass hostc.example.org die virtuelle IP-Adresse nicht wieder an den Master-Server zurückgibt. Der Administrator kann jedoch den Backup-Server dazu zwingen, die übernommene IP-Adresse wieder an den Master-Server zurückzugeben:

# ifconfig carp0 down && ifconfig carp0 up

Dieser Befehl muss auf dem carp-Gerät ausgeführt werden, dass dem betroffenen System zugeordnet ist.

An dieser Stelle muss entweder das Netzwerk neu gestartet, oder die Maschine neu gebootet werden, um CARP zu aktivieren.

Die Funktionalität von CARP kann, wie in der Manualpage carp(4) beschrieben, über verschiedene sysctl(8) Parameter kontrolliert werden. Mit dem Einsatz von devd(8) können weitere Aktionen zu CARP-Ereignissen ausgelöst werden.

Wenn Sie Fragen zu FreeBSD haben, schicken Sie eine E-Mail an <de-bsd-questions@de.FreeBSD.org>.

Wenn Sie Fragen zu dieser Dokumentation haben, schicken Sie eine E-Mail an <de-bsd-translators@de.FreeBSD.org>.