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.allow | A beérkező CARP csomagok elfogadása. Alapértelmezés szerint engedélyezett. |
net.inet.carp.preempt | Ezzel 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.log | A 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.arpbalance | Az 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_preempt | Ez 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.
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"
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.
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):
<questions@FreeBSD.org>.
Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon:
<gabor@FreeBSD.org>.