Last Updated on 28/04/2025 by administrator
Linux High Availability with Keepalived and VRRP
Linux High Availability with Keepalived and VRRP
Motivace:
Keepalived je open-source software určený k zajištění vysoké dostupnosti (High Availability) a failover mechanismů v IT infrastruktuře. Primárně se používá na Linuxových systémech a jeho hlavní funkcí je implementace protokolu VRRP (Virtual Router Redundancy Protocol), který umožňuje redundanci síťových služeb.
Použití Keepalived:
-
Síťová infrastruktura: Zajišťuje redundanci routerů, firewallů nebo jiných síťových zařízení.
-
Load balancery: Udržuje dostupnost a distribuci zátěže mezi servery.
-
Databázové servery: Zajišťuje přepnutí na záložní databázový server při selhání hlavního.
Keepalived pracuje na principu VRRP:
-
Vytváří virtuální IP adresu, kterou sdílí skupina serverů.
-
Servery jsou rozděleny na primární (master) a záložní (backup), přičemž při selhání primárního serveru záložní automaticky převezme jeho roli.
-
Priorita serverů určuje, který z nich bude aktivní. Vyšší priorita znamená přednost při přidělení virtuální IP adresy.
OS:
Implementace Linux High Availability with Keepalived and VRRP byla prakticky prováděna na Ubuntu 24.04 LTS, ale také na na open-source platformě Proxmox verze 8.3-1 s Ubuntu 24.04 LTS.
Implementace – Linux High Availability with Keepalived and VRRP:
Nainstalovat na každém nodu Keepalived pro VRRP (Virtual Router Redundancy Protocol):
apt update && apt install -y keepalived
Přejít do konfigurace keepalived.conf ve složce /etc/keepalived/
vi /etc/keepalived/keepalived.conf:
Nastavení pro primární (MASTER) node:
vrrp_instance VI_1 { state MASTER interface eth0 virtual_router_id 10 priority 200 advert_int 1 authentication { auth_type PASS auth_pass mypass } virtual_ipaddress { 192.168.0.10 } }
Nastavení pro sekundární (BACKUP) node:
vrrp_instance VI_1 { state BACKUP interface eth0 virtual_router_id 10 priority 100 advert_int 1 authentication { auth_type PASS auth_pass mypass } virtual_ipaddress { 192.168.0.10 } }
Legenda:
- vrrp_instance VI_1 – definice jedné instance VRRP (je možné zvolit libovolný název)
- state MASTER – definice primárního serveru
- interface eth0 – síťové rozhraní, na kterém bude Keepalived poslouchat VRRP provoz a přidělovat virtuální IP
- virtual_router_id 10 – identifikátor VRRP skupiny, ten musí být stejný na všech uzlech, které sdílí stejnou virtuální IP (číslo je možné volit od 1-255)
- priority 200 – vyšší číslo = vyšší priorita nodu. MASTER má obvykle vyšší prioritu než BACKUP. Pokud dojde k výpadku MASTERa, node s druhou nejvyšší prioritou se stane novým MASTERem.
- advert_int 1 – interval v sekundách, jak často MASTER vysílá VRRP advertisement pakety, standardní hodnota je 1 sec
- authentication – jednoduchá VRRP komunikace mezi uzly
- auth_type PASS – PASS je jednoduchý typ autentizace (není šifrované)
- auth_pass mypass – mypass, je sdílené heslo, které musí být stejné na všech uzlech ve skupině (max 8 znaků)
- virtual_ipaddress – virtuální IP adresa, kterou MASTER přiřazuje na své rozhraní. Tuto IP adresu používají klienti ke komunikaci.
Aby služba keepalived běžela automaticky po startu systému, aplikovat příkaz níže na obou nodech:
systemctl enable keepalived
Na obou nodech provést restart keepalived pro aplikaci změn:
systemctl restart keepalived
Pi-hole bude nyní dostupná na virtuální IP adrese (VIP) 192.168.0.10, která se při výpadku přesune na druhý node.
Ověření:
Kontrola stavu služby keepalived:
systemctl status keepalived
Výpis příkazu systemctl status keepalived ukazuje, že služba keepalived je aktivní:
* keepalived.service - Keepalive Daemon (LVS and VRRP) Loaded: loaded (/usr/lib/systemd/system/keepalived.service; enabled; preset: enabled) Active: active (running) since Sun 2025-04-06 15:10:42 CEST; 24min ago Docs: man:keepalived(8) man:keepalived.conf(5) man:genhash(1) https://keepalived.org Main PID: 276 (keepalived) Tasks: 2 (limit: 9237) Memory: 5.0M (peak: 5.2M) CPU: 835ms CGroup: /system.slice/keepalived.service |-276 /usr/sbin/keepalived --dont-fork `-287 /usr/sbin/keepalived --dont-fork
Kontrola stavu VRRP:
cat /var/log/syslog | grep Keepalived
Výpis příkazu ukazuje, cat /var/log/syslog | grep Keepalived, že primární node přešel do režimu MASTER a získal virtuální IP adresu (VIP):
2025-04-06T15:10:42.034788+02:00 pihole1 Keepalived[276]: Command line: '/usr/sbin/keepalived' '--dont-fork' 2025-04-06T15:10:42.035209+02:00 pihole1 Keepalived[276]: Configuration file /etc/keepalived/keepalived.conf 2025-04-06T15:10:42.036261+02:00 pihole1 Keepalived[276]: NOTICE: setting config option max_auto_priority should result in better keepalived performance 2025-04-06T15:10:42.036318+02:00 pihole1 Keepalived[276]: Starting VRRP child process, pid=287 2025-04-06T15:10:42.039259+02:00 pihole1 Keepalived_vrrp[287]: (/etc/keepalived/keepalived.conf: Line 9) Truncating auth_pass to 8 characters 2025-04-06T15:10:42.041526+02:00 pihole1 Keepalived_vrrp[287]: (VI_1) Entering BACKUP STATE (init) 2025-04-06T15:10:42.042524+02:00 pihole1 Keepalived[276]: Startup complete 2025-04-06T15:10:42.503953+02:00 pihole1 Keepalived_vrrp[287]: (VI_1) Entering MASTER STATE
Ověření, že virtuální IP adresa (VIP) je správně přiřazena aktivnímu serveru:
ip a
Výpis příkazu ip a ukazuje, že virtuální IP adresa (VIP) 192.168.0.10 správně přiřazena aktivnímu serveru:
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: eth0@if348: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether bc:24:11:97:1d:ee brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 192.168.0.11/24 brd 192.168.0.255 scope global eth0 valid_lft forever preferred_lft forever inet 192.168.0.10/32 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::be24:11ff:fe97:1dee/64 scope link valid_lft forever preferred_lft forever
Simulace selhání primárního nodu:
Stav logů služby Keepalived pro VRRP je možné sledovat v reálném čase. Aplikovat příkaz níže na sekundárním node.
journalctl -u keepalived -f
Simulovat selhání hlavního serveru (MASTER) zastavením služby Keepalived. Aplikovat příkaz níže na primárním node.
sudo systemctl stop keepalived
Výpis příkazu journalctl -u keepalived -f ukazuje, že sekundárním node se přešel do režimu MASTER
Apr 06 15:49:25 pihole2 Keepalived_vrrp[290]: (VI_1) Entering MASTER STATE
Ověřit, zda sekundárním node převzal virtuální IP adresu (VIP):
ip a
Výpis příkazu ip a ukazuje, že sekundárním node úspešně převzal i virtuální IP adresu (VIP):
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host noprefixroute valid_lft forever preferred_lft forever 2: eth0@if352: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000 link/ether bc:24:11:60:aa:72 brd ff:ff:ff:ff:ff:ff link-netnsid 0 inet 192.168.0.12/24 brd 192.168.0.255 scope global eth0 valid_lft forever preferred_lft forever inet 192.168.0.10/32 scope global eth0 valid_lft forever preferred_lft forever inet6 fe80::be24:11ff:fe60:aa72/64 scope link valid_lft forever preferred_lft forever
Věřím, že Vám článek Linux High Availability with Keepalived and VRRP pomohl.