Das Hochverfügbarkeits-Tango: Warum sich die Mühe machen?

Stellen Sie sich vor: Es ist 3 Uhr morgens und Ihr primärer Server beschließt, dass es genug ist und fällt schneller aus als ein Bleiballon. Ohne eine ordentliche HA-Einrichtung stehen Sie vor einem großen Problem. Hier kommt unser dynamisches Duo ins Spiel:

  • Keepalived: Der wachsame Wächter, der unsere virtuelle IP verwaltet.
  • Nginx: Unser zuverlässiger Load Balancer und Reverse Proxy.

Zusammen sorgen sie dafür, dass selbst wenn ein Server ausfällt, ein anderer nahtlos einspringt. Es ist, als hätte Ihr Server ein Stunt-Double - die Show muss weitergehen!

Vorbereitung: Was Sie benötigen

Bevor wir ins Detail gehen, stellen wir sicher, dass wir alles Nötige haben:

  • Zwei oder mehr Server (nennen wir sie node1 und node2)
  • Eine virtuelle IP-Adresse (VIP), die zwischen unseren Servern wechselt
  • Root-Zugriff (weil wir hier ernsthafte Dinge tun)
  • Grundlegendes Verständnis von Linux und Netzwerken (wenn Sie IP buchstabieren können, sind Sie schon halbwegs da)

Schritt 1: Installation unserer Hauptakteure

Zuallererst installieren wir Nginx und Keepalived auf beiden Knoten. Wir gehen davon aus, dass Sie ein Debian-basiertes System verwenden, weil wir irgendwo anfangen müssen.


sudo apt update
sudo apt install nginx keepalived

Einfacher geht's nicht. Jetzt haben wir die Werkzeuge, lassen Sie uns sie einsetzen!

Schritt 2: Konfiguration von Nginx - Der Load Balancing Maestro

Nginx wird unser Frontkämpfer sein, der eingehende Anfragen verteilt und für reibungslosen Ablauf sorgt. Lassen Sie uns es als Load Balancer einrichten:


http {
    upstream backend {
        server 192.168.1.10:8080;
        server 192.168.1.11:8080;
    }

    server {
        listen 80;
        server_name example.com;

        location / {
            proxy_pass http://backend;
            proxy_set_header Host $host;
            proxy_set_header X-Real-IP $remote_addr;
        }
    }
}

Diese Konfiguration weist Nginx an, den Datenverkehr zwischen unseren beiden Backend-Servern zu verteilen. Vergessen Sie nicht, die IP-Adressen durch Ihre tatsächlichen Server-IPs zu ersetzen!

Schritt 3: Keepalived-Konfiguration - Der Hochverfügbarkeits-Puppenmeister

Jetzt kommt die eigentliche Magie - Keepalived. Dieses Tool verwaltet unsere virtuelle IP und stellt sicher, dass sie immer auf einen gesunden Server zeigt. Lassen Sie uns es auf beiden Knoten konfigurieren:

Auf node1 (dem Master):


vrrp_script chk_nginx {
    script "pidof nginx"
    interval 2
}

vrrp_instance VI_1 {
    state MASTER
    interface eth0
    virtual_router_id 51
    priority 101
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass supersecretpassword
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        chk_nginx
    }
}

Auf node2 (dem Backup):


vrrp_script chk_nginx {
    script "pidof nginx"
    interval 2
}

vrrp_instance VI_1 {
    state BACKUP
    interface eth0
    virtual_router_id 51
    priority 100
    advert_int 1
    authentication {
        auth_type PASS
        auth_pass supersecretpassword
    }
    virtual_ipaddress {
        192.168.1.100
    }
    track_script {
        chk_nginx
    }
}

Die Hauptunterschiede hier sind die state und priority Einstellungen. Node1 ist als MASTER mit höherer Priorität eingestellt, während node2 das BACKUP mit niedrigerer Priorität ist.

Schritt 4: Die Show starten

Es ist Zeit, unsere Kreation zum Leben zu erwecken! Führen Sie auf beiden Knoten aus:


sudo systemctl start nginx
sudo systemctl start keepalived

Wenn alles gut geht, sollten Sie jetzt eine funktionierende Hochverfügbarkeits-Einrichtung haben. Die virtuelle IP (192.168.1.100 in unserem Beispiel) wird dem Master-Knoten zugewiesen.

Schritt 5: Testen - Vertrauen ist gut, Kontrolle ist besser

Jetzt der Moment der Wahrheit. Lassen Sie uns sicherstellen, dass unsere Einrichtung einen Serverausfall verkraften kann:

  1. Überprüfen Sie die IP-Zuweisung erneut - sie sollte auf den anderen Knoten gewechselt sein!

Stoppen Sie auf dem aktiven Knoten Nginx:

sudo systemctl stop nginx

Überprüfen Sie, welcher Knoten derzeit die virtuelle IP hält:

ip addr show eth0

Wenn alles wie erwartet funktioniert hat, herzlichen Glückwunsch! Sie haben gerade ein einfaches, aber effektives Hochverfügbarkeits-Cluster eingerichtet.

Tiefer eintauchen: Feinabstimmung und fortgeschrittene Konzepte

Jetzt, da wir eine funktionierende Einrichtung haben, lassen Sie uns einige Möglichkeiten erkunden, um sie noch besser zu machen:

1. Anpassung der Gesundheitsprüfungen

Anstatt nur zu überprüfen, ob Nginx läuft, können wir anspruchsvollere Gesundheitsprüfungen erstellen:


#!/bin/bash
# /etc/keepalived/check_nginx.sh

if [ $(ps -ef | grep -v grep | grep nginx | wc -l) -eq 0 ]; then
    exit 1
else
    curl -s -o /dev/null http://localhost
    if [ $? -eq 0 ]; then
        exit 0
    else
        exit 1
    fi
fi

Aktualisieren Sie Ihre Keepalived-Konfiguration, um dieses Skript zu verwenden:


vrrp_script chk_nginx {
    script "/etc/keepalived/check_nginx.sh"
    interval 2
    weight 2
}

2. Implementierung von Benachrichtigungsskripten

Möchten Sie wissen, wann ein Failover auftritt? Fügen wir ein Benachrichtigungsskript hinzu:


#!/bin/bash
# /etc/keepalived/notify.sh

case $1 in
    "MASTER")
        echo "$(date) - Wurde MASTER" >> /var/log/keepalived.log
        # Fügen Sie hier Ihre Benachrichtigungslogik hinzu (z.B. eine E-Mail oder Slack-Nachricht senden)
        ;;
    "BACKUP")
        echo "$(date) - Wurde BACKUP" >> /var/log/keepalived.log
        ;;
    "FAULT")
        echo "$(date) - In FAULT-Zustand eingetreten" >> /var/log/keepalived.log
        ;;
esac

Fügen Sie dies zu Ihrer Keepalived-Konfiguration hinzu:


vrrp_instance VI_1 {
    ...
    notify /etc/keepalived/notify.sh
    ...
}

3. Mehrere virtuelle IPs

Müssen Sie mehrere Dienste verwalten? Sie können mehrere virtuelle IPs einrichten:


vrrp_instance VI_1 {
    ...
    virtual_ipaddress {
        192.168.1.100
        192.168.1.101
        192.168.1.102
    }
    ...
}

Häufige Fallstricke und wie man sie vermeidet

Selbst die besten Pläne können schiefgehen. Hier sind einige häufige Probleme und wie man sie angeht:

1. Das Split-Brain-Syndrom

Wenn Ihre Knoten nicht kommunizieren können, könnten sie beide denken, dass sie der Master sind. Um dies zu verhindern:

  • Verwenden Sie ein dediziertes Netzwerk für die Keepalived-Kommunikation
  • Implementieren Sie Fencing-Mechanismen (wie STONITH - Shoot The Other Node In The Head)

2. Inkonsistente Konfigurationen

Stellen Sie sicher, dass Ihre Keepalived- und Nginx-Konfigurationen auf allen Knoten identisch sind. Erwägen Sie die Verwendung von Konfigurationsmanagement-Tools wie Ansible, um die Konsistenz zu gewährleisten.

3. Firewall-Probleme

Stellen Sie sicher, dass Ihre Firewall VRRP-Verkehr (Protokoll 112) zwischen Ihren Knoten zulässt:


sudo iptables -A INPUT -p vrrp -j ACCEPT

Auf die nächste Stufe: Container-Orchestrierung

Bereit für die große Liga? Erwägen Sie, Ihre HA-Einrichtung mit Container-Orchestrierungssystemen wie Kubernetes zu integrieren. Während Kubernetes eigene HA-Mechanismen hat, kann Keepalived dennoch eine Rolle bei der Verwaltung des externen Zugriffs auf Ihr Cluster spielen.

Zusammenfassung: Der Weg zu fünf Neunen

Herzlichen Glückwunsch! Sie haben einen bedeutenden Schritt in Richtung der begehrten "fünf Neunen" der Betriebszeit gemacht. Denken Sie daran, dass Hochverfügbarkeit keine Lösung ist, die man einmal einrichtet und dann vergisst. Regelmäßige Tests, Überwachung und Wartung sind entscheidend, um sicherzustellen, dass Ihre Einrichtung robust bleibt.

Einige wichtige Erkenntnisse:

  • Testen Sie Ihre Failover-Mechanismen regelmäßig
  • Überwachen Sie Ihre Keepalived- und Nginx-Protokolle auf Anomalien
  • Halten Sie Ihre Konfigurationen in der Versionskontrolle
  • Dokumentieren Sie Ihre Einrichtung und Failover-Verfahren für Ihr Team

Mit Keepalived und Nginx in Ihrem Arsenal sind Sie gut gerüstet, um die Herausforderungen der Hochverfügbarkeit zu meistern. Süße Träume, und mögen Ihre Server niemals schlafen!

"Der beste Weg, um Misserfolg zu vermeiden, ist, ständig zu scheitern." - Netflix

Gehen Sie nun voran und erobern Sie diese Betriebszeit-Metriken! Und denken Sie daran, in der Welt der Hochverfügbarkeit ist Paranoia nur gute Planung.