31.13. Common Address Redundancy Protocol (CARP)
Terug | Hoofdstuk 31. Geavanceerde netwerken | Volgende

## 31.13. 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, De FreeBSD-kernel instellen 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.

### 31.13.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)

Terug | Omhoog | Volgende
31.12. Asynchronous Transfer Mode (ATM) | Begin | Deel V. Appendix