High Availability: Corosync & Pacemaker (Artikel 055)
Aufbau von hochverfügbaren Clustern unter Linux. Architektur von Corosync und Pacemaker, Konfiguration von Ressourcen-Agents und Implementierung von Fencing.
# High Availability Deep Dive: Clustering mit Corosync & Pacemaker
TL;DR / Management Summary Hochverfügbarkeit (HA) ist kein Luxus, sondern eine Notwendigkeit für Business-Critical Services. In der Linux-Welt ist die Kombination aus Corosync (Kommunikation) und Pacemaker (Cluster Resource Manager) der Goldstandard. Sie sorgt dafür, dass Dienste (IPs, Datenbanken, Webserver) automatisch auf einen gesunden Node schwenken, wenn der primäre Node ausfällt. Wichtigster Punkt: Ein HA-Cluster ohne STONITH (Fencing) ist kein Cluster, sondern eine Gefahr für die Datenintegrität (Split-Brain).
# 1. Einführung & Architektur
Die Rollenverteilung im Cluster.
- Corosync: Der Funkspruch. Er stellt sicher, dass alle Nodes wissen, wer online ist (Membership & Quorum).
- Pacemaker: Der Dirigent. Er entscheidet, welcher Dienst auf welchem Node läuft.
- Resource Agents (RA): Die Skripte, die Pacemaker nutzt, um Dienste zu starten/stoppen (z.B. OCF Skripte).
graph TD
subgraph "Node 1 (Primary)"
A[Pacemaker CRM] --- B[Corosync]
A --> C[VIP: 10.0.0.100]
A --> D[Service: Nginx]
end
subgraph "Node 2 (Standby)"
E[Pacemaker CRM] --- F[Corosync]
end
B <-->|Heartbeat / UDP 5405| F
G[External Storage / Fencing] --- Node1
G --- Node2
# 2. Grundkonfiguration
Ein 2-Node Cluster aufbauen.
# Pakete installieren
sudo apt update
sudo apt install pacemaker corosync pcs
# Passwort für den Cluster-User setzen
sudo passwd hacluster
# Cluster initialisieren (via pcs)
# Auf einem Node ausführen
sudo pcs cluster auth node1 node2 -u hacluster -p password
sudo pcs cluster setup --name my_cluster node1 node2
sudo pcs cluster start --all
sudo pcs cluster enable --all
# 3. Ressourcen-Management
Dienste hochverfügbar machen.
# Beispiel: Eine Virtual IP (VIP) erstellen
Dies ist die Adresse, über die Clients den Dienst erreichen.
sudo pcs resource create virtual_ip ocf:heartbeat:IPaddr2 \
ip=192.168.1.100 cidr_netmask=24 op monitor interval=30s
# Ressourcen bündeln (Colocation)
Stellen Sie sicher, dass die IP und der Webserver immer auf dem gleichen Node laufen.
sudo pcs constraint colocation add nginx_service with virtual_ip score=INFINITY
# 4. STONITH (Fencing): Überlebenswichtig
Shoot The Other Node In The Head.
Wenn Node 1 nicht mehr antwortet, muss Node 2 sicherstellen, dass Node 1 wirklich “tot” ist, bevor er dessen IP übernimmt. Sonst schreiben beide gleichzeitig auf den Storage (Split-Brain -> Datenverlust!).
# Fencing-Methoden
- Proxmox:
fence_pve(schaltet die VM via API aus). - Bare Metal: IPMI, iLO, DRAC oder steuerbare PDU-Steckdosen.
# STONITH aktivieren (Beispiel IPMI)
sudo pcs stonith create my_fence fence_ipmilan ipaddr="10.0.0.50" login="admin" passwd="password"
Gefahr: In Testumgebungen wird STONITH oft deaktiviert (pcs property set stonith-enabled=false). Tun Sie dies niemals in der Produktion!
# 5. Troubleshooting & “War Stories”
Wenn der Cluster Amok läuft.
# Story 1: “Der hängende Dienst”
Symptom: Pacemaker meldet “FAILED” für eine Ressource und versucht sie ständig neu zu starten, was die CPU-Last in die Höhe treibt.
Ursache: Der Resource Agent kann den Dienst nicht stoppen (Timeout).
Lösung: Bereinigen Sie den Status manuell: pcs resource cleanup <resource_name>. Prüfen Sie, warum der Dienst hängt (Logs!).
# Story 2: “Quorum-Verlust in 2-Node Clustern”
Symptom: Ein Node fällt aus, der zweite Node stoppt alle Dienste, obwohl er gesund ist.
Ursache: Ein Cluster braucht die Mehrheit (>50%), um Entscheidungen zu treffen. Bei 2 Nodes führt der Ausfall von einem Node zu 50% -> Quorum weg.
Lösung: Setzen Sie no-quorum-policy=ignore für 2-Node Cluster oder nutzen Sie einen QDevice (einen dritten Beobachter ohne Dienste).
# 6. Fazit & Empfehlung
- Design: Halten Sie den Cluster einfach. Zu viele Abhängigkeiten machen das System unvorhersehbar.
- Tests: Führen Sie regelmäßige Failover-Tests durch (
pcs node standby <name>). - Monitoring: Überwachen Sie den Cluster-Status mit dem
pcs statusBefehl und Prometheus Exportern.
# Anhang: Cheatsheet
| Aufgabe | Befehl |
|---|---|
| Status anzeigen | sudo pcs status |
| Node in Wartungsmodus | sudo pcs node standby <name> |
| Wartungsmodus beenden | sudo pcs node unstandby <name> |
| Ressourcen-Fehler löschen | sudo pcs resource cleanup |
| Gesamte Cluster-Config sehen | sudo pcs config |
| Logs einsehen | journalctl -u pacemaker -u corosync |