Linux High Availability with Keepalived and VRRP

By | 28/04/2025

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 mypassmypass, 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.


Dobrovolný dar

Ahoj čtenáři, rád bych tě poprosil aby ses zamyslel, co je vše potřeba ke vzniku článku.
Jakožto amatérský softwarový kutil musím:

1) Nejdříve vše nastudovat v cizích jazycích.
2) Vše následně prakticky vyzkoušet.
3) Svoje poznatky a zkušenosti napsat do článku který si právě přečetl v jazyku kterému rozumíš.
4) Dát článku hlavu a patu a publikovat.

Každý článek zabere několik hodin práce, za kterou mi nikdo neplatí.
Prosím zvaž, kolik času jsem ti právě ušetřil.
Pokud ti to stojí aspoň za cenu jedné kávy, tak mi ji kup.
Předem moc děkuji.

Příspěvek tak můžeš provést zasláním libovolné částky na mé číslo účtu 1558701011/3030 Nebo můžeš dar poslat kliknutím na tento odkaz Podpořit tento WEB , který tě přesměruje na mou platební bránu Revolut.

Dar je také možné poslat ve formě Bitcoinu na BTC peněženku bc1qqdf5fp42a7srwwhh2rut8zr9x4jm5c8fqc9qw6

Veškeré peněžní prostředky budu také používat na zlepšení kvality své webové tvorby a na psaní nových technických návodů. Za každý dar předem děkuji.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *