Das FreeBSD-Handbuch
Zurück | Kapitel 31. Weiterführende Netzwerkthemen | Weiter

# 31.13. CARP - Common Address Redundancy Protocol

Beigetragen von Tom Rhodes.

Das Common Address Redundancy Protocol (CARP) erlaubt es, mehreren Rechnern die gleiche IP-Adresse zuzuweisen. Durch ein solches Vorgehen läßt sich beispielsweise die Verfügbarkeit bestimmter Dienste verbessern oder die Last zwischen einzelnen Systemen besser verteilen. Den auf diese Art und Weise konfigurierten Systemen kann zusätzlich eine eigene (im Netzwerk eindeutige) IP-Adresse zugewiesen werden (wie dies auch im folgenden Beispiel erfolgt).

Um CARP zu aktivieren, müssen Sie die FreeBSD-Kernelkonfigurationsdatei um die folgende Option erweitern und danach den FreeBSD-Kernel neu bauen:

    device carp

Danach ist CARP auf Ihrem System verfügbar und kann über verschiedene `sysctl`-Optionen (OIDs) gesteuert werden.

OID | Beschreibung
--- | ---
`net.inet.carp.allow` | Akzeptiert ankommende CARP-Pakete. In der Voreinstellung aktiviert.
`net.inet.carp.preempt` | Diese Option deaktiviert alle CARP-Geräte, sobald eines von ihnen ausfällt. In der Voreinstellung deaktiviert.
`net.inet.carp.log` | Hat diese Variable den Wert `0`, wird kein Protokoll generiert, während mit dem Wert `1` nur inkorrekte CARP-Pakete protokolliert werden. Hat die Variable einen Wert größer `1`, werden nur die Statuswechsel von CARP-Geräten protokolliert. In der Voreinstellung hat diese Variable den Wert `1`.
`net.inet.carp.arpbalance` | Gleicht die Netzwerklast im lokalen Netzwerk durch den Einsatz von ARP aus. In der Voreinstellung deaktiviert.
`net.inet.carp.suppress_preempt` | Eine nur lesbare OID, die den Preemption Suppression-Status anzeigt. Preemption kann verhindert werden. Dies auch dann, wenn ein Gerät ausfällt. Hat die Variable den Wert `0`, bedeutet dies, dass Preemption nicht verhindert wird. Tritt ein Problem auf, wird der Wert dieser OID um `1` erhöht.

Das CARP-Gerät selbst erzeugen Sie mit dem `ifconfig`-Befehl:

    # ifconfig carp0 create

Damit Sie dieses Protokoll in Ihrem Netzwerk einsetzen können, muss jede Netzkarte eine eindeutige Identifikationsnummer, die sogenannte VHID (Virtual Host Identification), besitzen, da sich ansonsten die Rechner Ihres Netzwerks nicht voneinander unterscheiden lassen.

## 31.13.1. Die Serververfügbarkeit mit CARP verbessern

Wie bereits weiter oben erwähnt wurde, können Sie CARP dazu verwenden, die Verfübarkeit Ihrer Server zu verbessern. Im folgenden Bespiel werden insgesamt drei Server (mit jeweils eigener, eindeutiger IP-Adresse), die alle den gleichen Inhalt anbieten, in einer Round Robin DNS-Konfiguration eingerichtet. Der Backup-Server verfügt über zwei CARP-Schnittstellen (für die beiden IP-Adressen der Content-Server). Tritt bei einem Content-Server ein Problem auf, übernimmt der Backup-Server die IP-Adresse des ausgefallenen Servers. Dadurch sollte die Auswahl eines Servers vom Anwender nicht bemerkt werden. Der Backup-Server muss identisch konfiguriert sein und die gleichen Daten und Dienste anbieten wie das System, das er ersetzen soll.

Die beiden Content-Server werden (abgesehen von ihren jeweiligen Hostnamen und VHIDs) identisch konfiguriert und heißen in unserem Beispiel `hosta.example.org` beziehungsweise `hostb.example.org`. Damit Sie CARP einsetzen können, müssen Sie als Erstes die Datei `rc.conf` auf beiden Systemen anpassen. Für das System `hosta.example.org` nehmen Sie dazu folgende Zeilen in `rc.conf` auf:

    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"

Für das System `hostb.example.org` benötigen Sie zusätzlich folgende Zeilen in `rc.conf`:

    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: Achten Sie unbedingt darauf, dass die durch die Option `pass` an `ifconfig` ü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. Beachten Sie weiters, dass sich die VHIDs der beiden Systeme unterscheiden müssen.

Nun richten Sie noch das dritte System, `provider.example.org`, ein, das aktiviert wird, wenn eines der beiden zuvor konfigurierten Systeme ausfällt. Dieses dritte System benötigt zwei `carp`-Geräte, um bei Bedarf eines der beiden anderen Systeme ersetzen zu können. Dazu konfigurieren Sie `rc.conf` analog zur folgenden Beispielkonfiguration:

    hostname="provider.example.org"
    ifconfig_fxp0="inet 192.168.1.5 netmask 255.255.255.0"
    cloned_interfaces="carp0 carp1"
    ifconfig_carp0="vhid 1 advskew 100 pass testpass 192.168.1.50/24"
    ifconfig_carp1="vhid 2 advskew 100 pass testpass 192.168.1.51/24"

Durch die beiden `carp`-Geräte ist es `provider.example.org` möglich, festzustellen, ob eines der beiden anderen Systeme nicht mehr reagiert. In diesem Fall übernimmt `provider.example.org` die IP-Adresse des betroffenen Systems.

> Anmerkung: Ist im installierten FreeBSD-Kernel die Option "preemption" aktiviert, kann es sein, dass `provider.example.org` die übernommene IP-Adresse nicht mehr an den Content-Server zurückgibt (wenn dieser wieder funktioniert). In diesem Fall muss ein Administrator die entsprechende Schnittstelle dazu zwingen, dies zu tun. Dazu gibt er auf dem Rechner `provider.example.org` den folgenden Befehl ein:

>     # ifconfig carp0 down && ifconfig carp0 up

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

Damit ist CARP vollständig konfiguriert und der Testbetrieb kann beginnen. Zuvor müssen Sie allerdings noch alle Systeme neu starten (beziehungsweise die Netzwerkkonfiguration auf allen Systemen neu einlesen), um die Einstelllungen zu übernehmen.

Für weitere Informtionen lesen Sie bitte die Manualpage carp(4).

Zurück | Zum Anfang | Weiter
ATM - Asynchronous Transfer Mode | Nach oben | Anhang

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>.