31.13. A Közös cím redundancia protokoll (CARP)

Írta: Tom Rhodes.

A Közös cím redundancia protokoll (Common Address Redundancy Protocol, avagy CARP) segítségével több gép képes egyazon IP-címen osztozni. Bizonyos konfigurációkban ez a terhelés elosztására (terhelés-kiegyenlítésre) vagy a rendelkezésre állás növelésére (hibatűrésre) alkalmazható. A benne szereplő gépek akár eltérő IP-címmel is rendelkezhetnek, ahogy azt majd a példában is láthatjuk.

A CARP támogatásának engedélyezéséhez a FreeBSD rendszermagját a következő beállítással kell újrafordítanunk:

device	carp

A CARP által biztosított lehetőségek ezután már elérhetőek, és számos sysctl változón keresztül állíthatóak:

VáltozóLeírás
net.inet.carp.allowA beérkező CARP csomagok elfogadása. Alapértelmezés szerint engedélyezett.
net.inet.carp.preemptEzzel a beállítással az adott gépen az összes CARP felület leáll, ha közülük bármelyik is működésképtelenné válik. Alapértelmezés szerint tiltott.
net.inet.carp.logA 0 értékkel kikapcsoljuk a naplózást. Az 1 értékkel a rossz CARP csomagok naplózását engedélyezzük. Az ettől nagyobb értékek esetén pedig a CARP felületek változásait naplózzuk. Az alapértelmezett értéke az 1.
net.inet.carp.arpbalanceAz ARP protokoll segítségével próbálja meg a helyi hálózati forgalmat mentesíteni a terheléstől. Alapértelmezés szerint tiltott.
net.inet.carp.suppress_preemptEz a változó írásvédett, és a megszakítás elnyomásának állapotát mutatja. A megszakítás elnyomható, ha a felület egyik linkje nem működik. A 0 érték arra utal, hogy a megszakítást nem nyomták el. Minden probléma növeli ennek a változónak az értékét.

A CARP eszközök maguk az ifconfig paranccsal készíthetőek el:

# ifconfig carp0 create

Egy valós környezetben az ilyen felületeknek egy VHID néven ismert egyedi azonosítóval kell rendelkezniük. Ez a VHID vagy más néven a virtuális gépazonosító (azaz Virtual Host Identification) fogja a gépünket a hálózat többi elemétől megkülönböztetni.

31.13.1. A CARP felhasználása a rendelkezésre állás javításában

A CARP használatának egyik módja, ahogy arra már korábban is utaltunk, a szerverek rendelkezésre állásának feljavítása. Ebben a példában három géppel fogunk hibatűrést biztosítani, melyik mindegyike egyedi IP-címmel rendelkezik és ugyanazt a webes tartalmat szolgáltatják. A gépeket egy Round Robin rendszerű (körbejáró) névfeloldással együtt használjuk. A tartalék gépünknek lesz még további két CARP felülete, külön a szerver IP-címeihez tartozó egyes webes tartalmakhoz. Amikor valami meghibásodik, a tartalék szerver átveszi a meghibásodott gép IP-címét. Ilyenkor a hiba teljesen észrevétlen marad a felhasználók számára. A tartalék szerveren a többi szerverrel egyező tartalomnak és szolgáltatásoknak kell megjelennie, hogy bármikor át tudja tőlük venni a forgalmat.

A hálózati neveiktől és a virtuális azonosítóiktól eltekintve a két gépet ugyanúgy kell beállítani. Ebben a példában a gépeket most az a-gep.minta.org és b-gep.minta.org nevekkel láttuk el. Először is a CARP beállításához el kell helyeznünk a megfelelő hivatkozásokat az rc.conf állományban. Az a-gep.minta.org esetében az rc.conf állomány a következő sorokat tartalmazza:

hostname="a-gep.minta.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"

Miközben a b-gep.minta.org az rc.conf állományában ezeket adjuk meg:

hostname="b-gep.minta.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"

Megjegyzés: Nagyon fontos, hogy az ifconfig parancs pass paraméterével megadott jelszavak megegyezzenek. A carp eszközök csak a megfelelő jelszót birtokló gépeket fogadják el. A virtuális gépazonosítónak azonban minden esetben el kell térnie.

A harmadik, szolgaltato.minta.org címmel rendelkező gépet fogjuk felkészíteni az előbbi gépek meghibásodására felkészíteni. Ennek a gépnek két carp eszközre lesz szüksége, melyek az egyes gépeket kezelik. Az ehhez illeszkedő sorok valahogy így fognak kinézni az rc.conf állományban:

hostname="szolgaltato.minta.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"

Két carp eszköz használatával a szolgaltato.minta.org képes észlelni és átvenni bármelyik olyan gép IP-címét, amely nem válaszol.

Megjegyzés: Az alap FreeBSD rendszermag használata esetén előfordulhat, hogy a megszakítás (a “preemption” opció) engedélyezett. Amennyiben így lenne, a szolgaltato.minta.org nem fogja minden esetben fogja rendesen visszaadni az IP-címet az eredeti tulajdonosának. Ilyenkor a rendszergazdának kell ezt manuálisan megtennie. Tehát a következő parancsot kell kiadnia a szolgaltato.minta.org gépen:

# ifconfig carp0 down && ifconfig carp0 up

Ezt az adott géphez tartozó carp felülettel kell megcsinálni.

Innentől a CARP már teljesen engedélyezhető és készen áll a tesztelésre. A teszteléshez vagy a hálózati rendszert kell újraindítani, vagy a gépeket.

További információkat a carp(4) man oldalán találhatunk.

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <freebsd-questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.