VRRP pomocí keepalived
VRRP se používá zejména pro routery pro zajištění větší spolehlivosti sítě, kdy jedna IP je obsluhována několika uzly (typicky routery, ale nejen) a pokud jeden z uzlů vypadne, další uzel dle priority IP převezme na sebe. Někteří poskytovatelé připojení používají proprietální protokol HSRP. VRRP je též podporován i v Mikrotik ROS.
V linuxu slouží pro ovládání protokolu vrrp služba keepalived, umí toho ale daleko víc.
Dneska si jen v rychlosti ukážeme, jak využít vrrp pro velmi jednoduchý HA mezi dvěma uzly. Cílem není tady vystavět komplexní služby ale jen představit další kus software, který se může někomu hodit.
Vyzkoušejte sami
Pro jednoduchý test nám stačí dva stroje (třeba virtuálky). Na oba stroje nainstalujeme
pochopitelně keepalived
a vedle něj třeba nginx
. Stačí nám jen
jednoduchá statická stránka. (Návod je platný pro Debian.)
apt install keepalived nginx-light
Na prvním serveru třeba:
echo "node1" > /var/www/html/index.nginx-debian.html
Na druhém třeba:
echo "node2" > /var/www/html/index.nginx-debian.html
Jde nám jen o to, jak poznat, zda se klient připojit sice na stejnou IP, ale ta se přehodila z jednoho stroje na druhý. V praxi pochopitelně budeme mít všechny stoje v clusteru stejné.
Konfigurace keepalived
V souboru
/etc/keepalived/keepalived.conf
budeme definovat jednotlivé skupiny routerů pro virtuální IP, zatím nám postačí
jedna jediná:
vrrp_instance VI_1 {
state MASTER
interface eth0
virtual_router_id 51
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass <password>
}
virtual_ipaddress {
192.168.42.42
}
}
Kde:
interface
je jméno siťovky, na které budeme virtální ip provozovatvirtual_router_id
je id této skupiny vrrp. Na jedné síti bychom měli dbát- na to, aby ruzné skupiny nepoužívaly stejné id.
priority
priorita určuje, který stroj dostane přidělenu virtuální ip. Pokud stroj s vyšší prioritou umře, virtuální ip přebírá stroj s nejvyšší prioritou (v případě stejných prio se mezi stroji hlasuje o to, kdo ip získá).advert_int
jak často se má stroj ohlašovat, že žije. V sekundách.auth
heslo pro komunikaci routerů mezi sebou.
a konečně:
virtual_ipaddress
zde se nastavuje seznam ip, které mají být sdílené. IP může být víc, my máme jen jednu.
Výše uvedený konfigurák umístíme na oba stroje. Jediná změna v konfigu je
priority
, tou si můžeme určit, na kterém stoji má daná virtální ip přednostně
být. Pochopitelně také upravíme iface, pokud oba stroje mají ruzné jméno
síťovky. Zbytek nastavení musí být shodný.
A tím je hotovo.
Službu keepalived nastartujeme.
systemctl start keepalived
A klidně ji můžeme nastartovat nejprve na stroji s nižší prioritou. IP by se měla přiřadit. Potom na stroji s vyšší prioritou, ip by se měla přehodit.
Pokud si do prohlížeče zadáme http://192.168.42.42 (a třeba autorefresh po 1s), můžeme sledovat, že stránka je dostupná z obou strojů a jen se mění uvedený text v případě, že aktivní uzel vypneme nebo restartujeme.
Využití
Ideální je použití pro bezstavové protokoly, tam, kde nepotřebujeme směrovat klienta na konkrétní stroj. K tomu potom slouží proxy servery. VRRP se hodí pro služby, které nepotřebují uchovávat stav klienta (tedy zrovna třeba statický web). Takovou službou je i NFS.
Máme-li na obou uzlech exportována stejná data (glusterfs, cephfs), mužeme nastavit na obou uzlech NFS server a klienty připojit na virtuální IP.
GlusterFS exportuje NFS na každém svém uzlu. Můžeme mít jednu virtuální IP nastavenou přes všechny nody glusteru a při výpadku uzlu jeho úlohu převezme uzel jiný. Při zajištění redundace dat NFS klienti běží dál.
Lze mít i lepší setup, pokud například máme 6 glusterfs strojů, každému z nich lze přiřadit jeho vlastní virtuální ip (mít 6 virtuálních ip celkem), a dalších 5 strojů nastavit jako jeho vrrp backup. Pokud vypadne libovolný ze strojů, tak některý další převezme jeho IP. Pro klienta se ovšem nic nemění, ten běží dál (NFS to umí). Takto se každý klient může připojit na jinou IP, címž se zajistí lepší rozložení provozu po síti na jednotlivé uzly.
Ale o GlusterFS zase někdy jindy.