Linux High Availability with Keepalived and VRRP

By | 28/04/2025

Last Updated on 16/11/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.

Napsat komentář

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