
Linux a keepalived
Keepalived
Je open-source nástroj pro zajištění HA (High Availability, vysoké dostupnosti) a jako failover. Používá se tam kde je třeba zajistit nepřetržitý síťový provoz. třeba routry , SIP, load balancery, databáze. Funguje na principu Virtual Router Redundancy Protocolu (VRRP), což umožňuje automatický přechod mezi primárním a záložním zařízením v případě selhání.
Nasazení na Rocky Linux 9
Pro nasazením na Rocky Linux 9 potřebujeme nainstalovat balíček keepalived. Pak dva servery třeba virtualní na testy. Každý server bude mít svoji IP třeba SRV_MASTER 192.168.0.98 a SRV_BACKUP 192.168.0.99. Nad nimi bude virtuální IP 192.168.0.100 pro keepalived se kterou budou komunikovat aplikace, Normální IP zůstanou přístupné pro přístup nebo aplikace které nevyužívají aplikace běžící na keepalived. IP adresy si dejte jak potřebujete.
sudo dnf install -y keepalived
Po nainstalování se sám nespustí je třeba upravit nebo vytvořit nový keepalived.conf, který najdeme nebo dáme do /etc/keepalived/
global_defs {
router_id SIPBRIDGE_HA
vrrp_garp_interval 0.5
vrrp_gna_interval 1
}
vrrp_script chk_sipbridge {
script "/etc/keepalived/scripts/chk_sipbridge.sh"
interval 1
weight -20
fall 2
rise 2
}
vrrp_instance VI_SIPBRIDGE {
# pro zalozni BACKUP
state MASTER
interface eth0
virtual_router_id 51
# pro zalozni priorita 90
priority 100
advert_int 1
authentication {
auth_type PASS
auth_pass sippass
}
virtual_ipaddress {
192.168.0.100
}
track_script {
chk_sipbridge
}
}
router_id SIPBRIDGE_HA
Identifikátor tohoto routeru/uzlu v rámci HA clusteru. Používá se například v logu a při identifikaci VRRP instance.vrrp_garp_interval 0.5
Interval v sekundách mezi opakovanými GARP (Gratuitous ARP) pakety, které oznamují změnu MAC adresy u VIP. Zrychluje přechod klientů na nový master.vrrp_gna_interval 1
Interval mezi GNA (Gratuitous NA – Neighbor Advertisement) pro IPv6, podobně jako GARP u IPv4.
script
Spouští skript pro kontrolu služby (chk_sipbridge.sh
). Očekává se návratová hodnota0
(OK) nebo1
(chyba).interval 0.5
Spouští skript každých 0,5 sekundy. Velmi častá kontrola – hodí se pro rychlé přepínání.weight -20
Pokud skript vrátí chybu, sníží prioritu instance o 20 bodů.fall 2
Stačí dvě selhání kontroly, aby se instance považovala za nefunkční.rise 2
Musí následovat dvě úspěšné kontroly, aby byla instance považována za funkční.
state MASTER
Výchozí stav této instance. I jako BACKUP se může stát MASTER, pokud je druhý uzel mimo.interface eth0
Síťové rozhraní, na kterém bude Keepalived komunikovat a odpovídat ARP dotazům.virtual_router_id 51
ID VRRP skupiny. Musí být stejné na všech uzlech, které sdílí VIP.priority 100
Priorita této instance. Vyšší číslo znamená větší šanci být MASTER. MASTER musí mít nejvyšší prioritu.advert_int 1
Interval mezi VRRP pakety (v sekundách). Čím kratší, tím rychleji se zjistí výpadek.auth_type PASS
Používá jednoduché sdílené heslo pro ověření VRRP paketů.
virtual_adress
Tato IP adresa bude virtuální IP (VIP). Aktivní uzel (MASTER) ji bude držet a odpovídat na ní.
track_script
Pokud skriptchk_sipbridge
selže, priorita se sníží, což může způsobit přepnutí MASTER role.
Skript chk_sipbridge.sh uložte do adresaře /etc/keepalived/scripts/ a dejtemu prva na spouštění.Tento je pro Kamailio
sudo chmod +x /etc/keepalived/scripts/chk_sipbridge.sh
Skript
#!/bin/bash
if systemctl is-active --quiet kamailio; then
exit 0 # OK – služba běží
else
exit 1 # FAIL – služba neběží
fi
SELinux může zablokovat spouštění skriptu proto nastavíme pro ten skript oprávnění.
semanage fcontext -a -t keepalived_script_exec_t \ '/etc/keepalived/scripts/chk_sipbridge\.sh'
restorecon -v /etc/keepalived/scripts/chk_sipbridge.sh
A nezapomeneme na firewallu povolit port pro vrrp. Síťovou kartu eth0 si změn podle sebe.
sudo firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 --in-interface eth0 --protocol vrrp -j ACCEPT
sudo firewall-cmd --reload
A nakonec si povolíme službu keepalived a spustíme. Na druhem serveru uděláme to samé a nesmíme zapomenout změnit MASTER na BACKUP a priority 100 na 90, zbytek musí zůstat stejný aby to dobře fungovalo!!
sudo systemctl enable keepalived.service
sudo systemctl start keepalived.service