32.14. Common Address Redundancy Protocol (CARP)

Bijgedragen door Tom Rhodes.

Het Common Address Redundancy Protocol, of CARP, staat toe dat meerdere hosts hetzelfde IP-adres gebruiken. In sommige opstellingen wordt dit gebruikt voor beschikbaarheid of loadbalancing. Hosts kunnen ook gescheiden IP-adressen gebruiken, zoals in het voorbeeld dat hier is gegeven.

Om ondersteuning voor CARP aan te zetten, dient de FreeBSD-kernel herbouwd zoals beschreven in Hoofdstuk 9 met de volgende optie:

device	carp

Als alternatief kan de if_carp.ko module geladen worden tijdens het opstarten. Voeg de volgende regel toe aan /boot/loader.conf:

if_carp_load="YES"

De functionaliteit van CARP zou nu beschikbaar moeten zijn en kan met verschillende sysctl-OIDs worden bijgesteld:

OID Beschrijving
net.inet.carp.allow Accepteer inkomende CARP pakketten. Staat standaard aan.
net.inet.carp.preempt Deze optie zet alle CARP interfaces down op de host wanneer er een down gaat. Staat standaard uit.
net.inet.carp.log De waarde 0 zet alle logging uit. De waarde 1 zet het loggen van slechte CARP-pakketten aan. Waardes hoger dan 1 zet het loggen van toestandsveranderingen van de CARP interfaces aan. De standaardwaarde is 1.
net.inet.carp.arpbalance Balanceer lokaal netwerkverkeer met ARP. Staat standaard uit.
net.inet.carp.suppress_preempt Een alleen-lezen OID die de toestand van preëmptie-onderdrukking weergeeft. Preëmptie kan worden onderdrukt wanneer de verbinding op een interface afwezig is. De waarde 0 betekent dat preëmptie niet onderdrukt is. Elk probleem verhoogt deze OID.

De CARP-apparaten zelf kunnen met het commando ifconfig worden aangemaakt:

# ifconfig carp0 create

In een echte omgeving hebben deze interfaces unieke identificatienummers, bekend als een VHID, nodig. Dit VHID of Virtual Host Identification zal worden gebruikt om de hosts op het netwerk te onderscheiden.

32.14.1. CARP gebruiken voor serverbeschikbaarheid

Eén gebruik van CARP, zoals boven aangegeven, is serverbeschikbaarheid. Dit voorbeeld geeft failover-ondersteuning voor drie hosts, met allemaal een uniek IP-adres en dezelfde webinhoud. Deze machines zullen samen met een Round Robin DNS configuratie dienst doen. De failover-machine zal twee aanvullende CARP-interfaces hebben, één voor elk van de IP's van de contentservers. Wanneer er een storing optreedt, zou de failover-server het IP-adres van de falende machine moeten oppikken. Dit betekent dat de storing geheel onmerkbaar zou moeten zijn voor de gebruiker. De failover-server heeft dezelfde inhoud en diensten nodig als de andere contentservers waarvoor het moet invallen.

De twee machines dienen identiek geconfigureerd te worden op de gegeven hostnamen en VHIDs na. Dit voorbeeld noemt deze machines respectievelijk hosta.example.org en hostb.example.org. Ten eerste dienen de benodigde regels voor een CARP-configuratie aan rc.conf te worden toegevoegd. Voor hosta.example.org dient het bestand rc.conf de volgende regels te bevatten:

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"

Op hostb.example.org dienen de volgende regels in rc.conf te staan:

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"

Opmerking: Het is erg belangrijk dat de wachtwoorden die met de optie pass aan ifconfig gegeven zijn, identiek zijn. De carp apparaten zullen alleen luisteren naar en advertenties accepteren van machines met het juiste wachtwoord. Het VHID dient ook verschillend te zijn voor elke machine.

De derde machine, provider.example.org, dient voorbereidt te worden op het afhandelen van failover van beide hosts. Deze machine heeft twee carp apparaten nodig, één om elke host af te handelen. De juiste instelregels voor rc.conf zullen ongeveer gelijk zijn aan de volgende:

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"

Met twee carp apparaten is provider.example.org in staat om het IP-adres van de andere machine op te pikken wanneer de ene niet meer antwoordt.

Opmerking: De standaard FreeBSD-kernel kan preëmptie geactiveerd hebben. In dat geval hoeft provider.example.org het IP-adres niet terug te geven aan de originele contentserver. In dit geval kan het nodig zijn dat een beheerder handmatig het IP terug aan de meester moet geven. Het volgende commando dient op provider.example.org gegeven te worden:

# ifconfig carp0 down && ifconfig carp0 up

Dit dient gedaan te worden op de carp interface die met de juiste host overeenkomt.

Op dit moment dient CARP volledig actief en beschikbaar voor testen te zijn. Voor het testen dienen òfwel het netwerken herstart te worden, òf de machines dienen opnieuw opgestart te worden.

Meer informatie is altijd beschikbaar in de hulppagina carp(4)