Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

Keepalived + VRRP: wysoka dostępność na VPS

Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / High Availability

Keepalived to demon implementujący protokół VRRP, który pozwala przypisać jeden wirtualny adres IP do dwóch lub więcej serwerów. Gdy aktywny węzeł (master) przestaje odpowiadać, backup automatycznie przejmuje adres IP — bez ingerencji administratora, w ciągu zaledwie kilku sekund. To fundament każdej architektury high availability na VPS.

Jak działa VRRP i floating IP

VRRP (Virtual Router Redundancy Protocol) definiuje grupę serwerów współdzielących jeden wirtualny adres IP. Tylko jeden serwer w grupie (master) aktywnie obsługuje ten adres — pozostałe (backup) nasłuchują heartbeatów. Jeśli heartbeat nie dotrze przez określony czas, backup przejmuje adres i rozsyła gratuitous ARP, informując przełączniki sieciowe o zmianie przypisania MAC → IP.

Floating IP (nazywany też wirtualnym IP lub VIP) to adres przypisywany przez dostawcę VPS jako dodatkowy adres, który można przepinać między węzłami. Dostawcy tacy jak Hetzner czy Contabo oferują floating IP jako osobny zasób — płacisz za IP niezależnie od serwera, a routing można zmieniać przez API lub przez VRRP.

Instalacja Keepalived

Keepalived instalujesz na obu węzłach — zarówno na masterze jak i na backupie. Przed instalacją upewnij się, że kernel ma załadowany moduł ip_vs (LVS — Linux Virtual Server), jeśli planujesz load balancing warstwy 4.

# Ubuntu / Debian
apt update && apt install -y keepalived

# CentOS / RHEL / AlmaLinux
dnf install -y keepalived

# Sprawdź wersję
keepalived --version

# Włącz i uruchom
systemctl enable keepalived
systemctl start keepalived

Konfiguracja mastera i backupa

Główny plik konfiguracyjny to /etc/keepalived/keepalived.conf. Poniżej przykład dla dwóch węzłów z wirtualnym IP 192.168.1.100 na interfejsie eth0.

Węzeł MASTER (serwer 1, IP: 192.168.1.10):

vrrp_script chk_nginx {
    script "/usr/bin/systemctl is-active nginx"
    interval 2
    weight -20
    fall 3
    rise 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass secretpassword123
    }

    virtual_ipaddress {
        192.168.1.100/24
    }

    track_script {
        chk_nginx
    }

    notify_master "/etc/keepalived/notify.sh MASTER"
    notify_backup "/etc/keepalived/notify.sh BACKUP"
    notify_fault  "/etc/keepalived/notify.sh FAULT"
}

Węzeł BACKUP (serwer 2, IP: 192.168.1.11):

vrrp_script chk_nginx {
    script "/usr/bin/systemctl is-active nginx"
    interval 2
    weight -20
    fall 3
    rise 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 90
    advert_int 1

    authentication {
        auth_type PASS
        auth_pass secretpassword123
    }

    virtual_ipaddress {
        192.168.1.100/24
    }

    track_script {
        chk_nginx
    }

    notify_master "/etc/keepalived/notify.sh MASTER"
    notify_backup "/etc/keepalived/notify.sh BACKUP"
    notify_fault  "/etc/keepalived/notify.sh FAULT"
}

Kluczowe parametry: priority (wyższa wartość = master, różnica minimum 10), virtual_router_id (musi być identyczny na obu węzłach, 1–255), auth_pass (wspólne hasło uwierzytelniające VRRP — zapobiega fałszywym masterom w sieci).

Health checks — monitorowanie usługi

Blok vrrp_script definiuje sprawdzenie zdrowia usługi. Gdy skrypt zwróci kod niezerowy przez fall kolejnych sprawdzeń, Keepalived obniża priorytet węzła o wartość weight. Jeśli priorytet mastera spadnie poniżej priorytetu backupa, następuje failover.

Możesz sprawdzać port HTTP zamiast statusu systemd — to bardziej precyzyjne:

# Skrypt health check: /etc/keepalived/check_http.sh
#!/bin/bash
# Sprawdza czy Nginx odpowiada na HTTP
HTTP_CODE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 3 http://127.0.0.1/health)

if [ "$HTTP_CODE" = "200" ]; then
    exit 0
else
    exit 1
fi

# Nadaj uprawnienia wykonania
chmod +x /etc/keepalived/check_http.sh

Następnie w konfiguracji zmień script na:

vrrp_script chk_http {
    script "/etc/keepalived/check_http.sh"
    interval 3
    timeout 5
    weight -30
    fall 2
    rise 3
}

Skrypt notify — powiadomienia o failover

Dyrektywy notify_master, notify_backup i notify_fault wywołują skrypt przy każdej zmianie stanu. Możesz wysyłać alerty na email lub Telegram, a także synchronizować dane (np. reload PHP-FPM po przejęciu IP).

#!/bin/bash
# /etc/keepalived/notify.sh
STATE=$1
HOSTNAME=$(hostname)
TIMESTAMP=$(date '+%Y-%m-%d %H:%M:%S')

case $STATE in
    MASTER)
        echo "[$TIMESTAMP] $HOSTNAME przeszedl w tryb MASTER" >> /var/log/keepalived-events.log
        # Opcjonalnie: wyslij alert na Telegram / email
        # curl -s "https://api.telegram.org/bot$TOKEN/sendMessage" \
        #   -d "chat_id=$CHAT_ID&text=KEEPALIVED: $HOSTNAME jest teraz MASTER"
        ;;
    BACKUP)
        echo "[$TIMESTAMP] $HOSTNAME przeszedl w tryb BACKUP" >> /var/log/keepalived-events.log
        ;;
    FAULT)
        echo "[$TIMESTAMP] $HOSTNAME: FAULT — sprawdz usluge" >> /var/log/keepalived-events.log
        ;;
esac

chmod +x /etc/keepalived/notify.sh

Weryfikacja i testowanie failover

Po uruchomieniu Keepalived na obu węzłach sprawdź, który przejął floating IP. Następnie zasymuluj awarię mastera i obserwuj czas przejęcia.

# Sprawdz czy floating IP jest przypisany (na masterze)
ip addr show eth0 | grep 192.168.1.100

# Sprawdz status Keepalived
systemctl status keepalived

# Logi w czasie rzeczywistym
journalctl -fu keepalived

# Symulacja awarii — zatrzymaj Keepalived na masterze
systemctl stop keepalived

# Na backupie — sprawdz czy przejal IP (powinno pojawic sie w ciagu 3-5s)
ip addr show eth0 | grep 192.168.1.100

# Symulacja awarii uslugi (nginx)
systemctl stop nginx
# Keepalived wykryje po fall*interval sekundach i obniy priorytet

Parametry konfiguracji — tabela referencyjna

Parametr Domyślna wartość Opis
priority 100 Priorytet węzła (1–254). Węzeł z najwyższym priorytetem zostaje masterem.
advert_int 1s Interwał heartbeat VRRP. Niższy = szybszy failover, wyższy ruch sieciowy.
weight 0 Zmiana priorytetu gdy skrypt zawiedzie (ujemna = obniżenie).
fall 3 Ile razy skrypt musi zawiść z rzędu, żeby zmienić stan.
rise 2 Ile razy skrypt musi się powieść z rzędu, żeby uznać usługę za zdrową.
virtual_router_id ID grupy VRRP (1–255). Musi być identyczny na wszystkich węzłach grupy.

Najczęstsze pytania

Co to jest Keepalived i do czego służy? +
Keepalived to demon linuksowy implementujący protokół VRRP (Virtual Router Redundancy Protocol). Pozwala przypisać wirtualny adres IP (floating IP) do jednego z kilku serwerów tak, że gdy aktywny węzeł (master) przestaje odpowiadać, backup automatycznie przejmuje adres IP w ciągu kilku sekund. Stosowany do budowania klastrów HA (high availability) dla serwerów webowych, baz danych i load balancerów bez konieczności zakupu drogich sprzętowych load balancerów.
Jak szybko Keepalived przełącza się z mastera na backup? +
Domyślny czas failover to około 3–10 sekund. Zależy od parametru advert_int (interwał heartbeat, domyślnie 1 sekunda) oraz liczby utraconych pakietów przed uznaniem mastera za martwy (3 × advert_int). Przy agresywniejszej konfiguracji advert_int 0.5 możesz zejść do 1.5–2 sekund. Czas failover obejmuje: wykrycie awarii + przejęcie IP + ARP gratuitous broadcast do przełączników sieciowych.
Czy Keepalived działa na hostingach VPS? +
Keepalived z floating IP wymaga wsparcia dostawcy — VPS musi mieć możliwość przypisania dodatkowego IP, a sieć musi obsługiwać gratuitous ARP lub API do zmiany routing IP. Contabo i Hetzner obsługują floating IP. Mikrus (OpenVZ/LXC) może wymagać konfiguracji po stronie dostawcy. Na hostingach współdzielonych Keepalived nie jest dostępny — potrzebny jest VPS z dostępem root i kontrolą sieci.
Czym różni się VRRP od UCARP i HAProxy? +
VRRP (Keepalived) operuje na warstwie sieci (L3) — przełącza wirtualny IP między węzłami. UCARP to implementacja CARP (Common Address Redundancy Protocol) z BSD, działa podobnie do VRRP ale jest rzadziej spotykany na Linuksie. HAProxy to load balancer warstwy aplikacji (L4/L7) — sam nie obsługuje failover IP, ale można go połączyć z Keepalived: Keepalived zarządza floating IP, HAProxy rozdziela ruch. To popularne połączenie w produkcyjnych klastrach.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.