Proxmox HA-Cluster: Split-Brain verhindern und Quorum richtig konfigurieren
Ein Server-Ausfall ist für jedes IT-Team ein Albtraum – besonders wenn man keine High Availability (HA) eingerichtet hat. Ich habe in den letzten Jahren Dutzende Cluster gesehen, die „einfach mal schnell“ ohne richtige Planung deployed wurden. Das Ergebnis? Datenverlust, stundenlange Debug-Sessions oder das gefürchtete Split-Brain. In diesem Artikel zeige ich Ihnen Schritt für Schritt, wie Sie einen robusten Proxmox HA-Cluster aufbauen, wie Corosync und Quorum zusammenwirken und welche Fallstricke es zu vermeiden gilt.
Grundlagen von HA-Clustern unter Proxmox
Was ist ein HA-Cluster?
Ein HA-Cluster (High Availability) gruppiert mehrere Proxmox-Knoten so, dass Virtual Machines (VMs) und Container bei einem Ausfall eines Knotens automatisch auf einen anderen Node verschoben werden – ohne manuelles Eingreifen. Die Grundidee: Ein zentrales Koordinierungssystem überwacht die Gesundheit der Nodes und entscheidet, welcher Knoten eine VM übernehmen darf.
Beispiel: Eine Webserver-VM läuft auf Node A. Node A fällt aus. Innerhalb Sekunden startet dieselbe VM auf Node B, die gleiche IP-Adresse bleibt erhalten und die Anwendung steht weiter zur Verfügung.
Die Rolle von Corosync und PVE Manager
Die Herzstück-Software für die Cluster-Kommunikation ist Corosync (bzw. cman in älteren Versionen). Es übermittelt Herzschlagsnachrichten („I’m alive“) zwischen allen Knoten. Der Proxmox VE Manager (pve-manager) nutzt diese Informationen, um HA-Ressourcen zu orchestrieren. Wird ein Knoten nicht mehr erreicht, leitet Corosync eine Neuwahl ein – der Überlebende übernimmt.
Persönliche Einschätzung: Viele Admins denken, ein HA-Cluster sei nur ein „Failover“. Doch erst die korrekte Konfiguration des Quorums und die Trennung von Storage- und Heartbeat-Netzwerken machen ihn wirklich stabil.
Split-Brain verstehen – warum er passiert
Definition und Auswirkungen
Split-Brain beschreibt einen Zustand, in dem sich zwei oder mehr Teilsysteme gegenseitig als „tot“ betrachten und daher unabhängig agieren. Beide Seiten denken, sie sind die einzigen, die noch laufen – und versuchen gleichzeitig, dieselben Ressourcen (z.B. VMs, IPs) zu beanspruchen. Dies führt unweigerlich zu Datenkorruption, doppelten Starts oder Netzwerk-Konflikten.
In einem Proxmox-Kontext kann Split-Brain entstehen, wenn:
- Die Heartbeat-Kommunikation zwischen Knoten unterbrochen wird (Netzwerkproblem, Firewall, Switch-Fehler).
- Corosync-Protokoll-Nachrichten verloren gehen oder verspätet ankommen.
- Zwei Knoten gleichzeitig versuchen, das Quorum zu erlangen (häufig bei gerader Knotenzahl ohne tiebreaker-Stimme).
Lebendiges Beispiel: Stellen Sie sich zwei Straßenbahnen vor, die sich beide sicher sein, dass die Gegenfahrbahn gesperrt ist. Sie fahren los – prallen frontal zusammen. Das Ergebnis ist katastrophal. Genauso verhält es sich mit VMs, die auf zwei Knoten gestartet werden und denselben Speicherplatz nutzen.
Wie Corosync Entscheidungen trifft
Corosync verwendet ein Mehrheitsvoting-System. Jeder Knoten erhält eine Stimme (default = 1). Um eine Entscheidung zu treffen – z.B. ob ein Knoten als tot markiert wird – braucht es eine Mehrheit (Quorum). Bei drei Knoten bedeutet das: mindestens zwei Stimmen müssen zustimmen. Wenn nur noch ein Knoten online ist, hat er nur eine Stimme – kein Quorum – und fährt vorsorglich herunter, um Dateninkonsistenzen zu vermeiden.
Beispielkonfiguration (/etc/pve/corosync.conf):
corosync {
...
quorum {
provider: corosync_votequorum
two_node: 1 # Nur für Zweiknoten-Setups nötig
}
}
Hier aktiviert two_node: 1 einen speziellen Modus, bei dem einer der beiden Knoten automatisch abstimmt, falls die Verbindung abreißt. Ohne diese Einstellung würden beide Knoten denken, sie hätten das Sagen – klassischer Split-Brain.
Quorum richtig konfigurieren
Die Grundregel: Immer ungerade Anzahl an Stimmen
Um eine klare Mehrheit zu garantieren, sollte die Gesamtzahl der Stimmen im Cluster immer ungerade sein. Das lässt sich erreichen durch:
- Eine ungerade Anzahl physischer Knoten (3, 5, …)
- Einbindung eines externen QDevice (QNetd), das als neutrale Stimme fungiert
- Manuelle Anpassung der Stimmengewichtung pro Knoten (nicht empfohlen, erhöht Komplexität)
Drei-Knoten-Setup – der Goldstandard
Mit drei Proxmox-Knoten haben Sie bereits ein resilienten Setup: Auch wenn ein Knoten ausfällt, bleiben zwei übrig – genug für ein Quorum. Die Standardkonfiguration genügt hier meist:
# Prüfen der aktuellen Stimmen
pvecm status
Ausgabe:
Version: 8.2.3
Config Version: 4
Transport: knet
Members: 3
Nodeid: 1
Ringid: 160492
Quorate: Yes
Expected votes: 3
Total votes: 3
Solange Quorate: Yes, läuft alles glatt. Fällt ein Node aus (Members: 2), bleibt das Quorum erhalten, solange zwei Nodes erreichbar sind.
Zweiknoten-Cluster mit QDevice
Viele Homelabs oder kleine Produktivumgebungen bestehen nur aus zwei Knoten – perfekt für Failover, aber problematisch für Quorum. Die Lösung: ein QDevice (früher als „ arbitrator “ bekannt). Dieses externe Tool (oft ein einfacher Linux-Server oder sogar ein Raspberry Pi) nimmt an Abstimmungen teil und bricht Pattsituationen auf.
Installation und Einrichtung
- Auf einem dritten Host (oder separat)
corosync-qnetdinstallieren:
apt update && apt install corosync-qnetd -y
systemctl enable --now qnetd
- Im Proxmox-Cluster das QDevice hinzufügen (von einem beliebigen Knoten):
pvecm qdevice setup --address <qnetd-ip> --port 5403
- Erneut Status prüfen:
pvecm status
# Erwartet: Expected votes: 3 (2 Nodes + 1 QDevice)
Damit haben Sie wieder eine ungerade Stimmenanzahl und vermeiden Split-Brain auch bei vollständiger Trennung beider Proxmox-Knoten voneinander (sofern mind. einer mit dem QDevice verbunden bleibt).
Persönliche Einschätzung: Das QDevice macht einen echten Unterschied. Aber vergessen Sie nie: Es muss selbst hochverfügbar sein! Ein ausgefallener QDevice-Host eliminiert Ihren Schutzmechanismus sofort.
Praktische Beispiele & Best Practices
Beispiel 1: Netzwerk-Trennung simulieren
Testen Sie Ihr Failover, indem Sie das Heartbeat-Netzwerk eines Knotens temporär trennen (z.B. ip link set down dev bond0). Beobachten Sie über pvecm status und pcs status (falls Pacemaker genutzt wird), ob der andere Knoten das Quorum behält und die VMs übernimmt. Nach Wiederanbindung sollte alles nahtlos zurückkehren.
Beispiel 2: Monitoring mit Alerting
Richten Sie Benachrichtigungen für Cluster-Ereignisse ein. Proxmox bietet Integrationen für E-Mail, SNMP und Webhooks. Aktivieren Sie im Web-Interface unter „Datacenter → Permissions → Roles“ die Benachrichtigung für HA-Ereignisse oder nutzen Sie Tools wie Prometheus + Alertmanager, um den Gesundheitszustand von Corosync zu tracken.
Beispiel 3: Dedicated Heartbeat Interface
Verwenden Sie niemals dasselbe physische Interface für Storage- und Management-Traffic. Bilden Sie stattdessen einen separaten Bond (z.B. LACP) ausschließlich für Corosync-Herzschläge. Das reduziert drastisch das Risiko, dass Paketverluste durch Storage-Last fälschlicherweise einen Knoten als tot markieren.
Konfigurationsschnipsel (/etc/network/interfaces):
auto bond-ha
iface bond-ha inet manual
slave eno1
slave eno2
bond-mode 4
bond-miimon 100
mtu 9000
Und dann in /etc/pve/corosync.conf:
totem {
interface {
ringnumber: 0
bindnetaddr: 10.0.10.0 # Netz des Heartbeat-Bonds
}
}
Häufige Fehler und ihre Vermeidung
| Fehler | Ursache | Konsequenz | Vermeidung |
|---|---|---|---|
| Keine dedizierten Heartbeat-Netze | Shared Interfaces | Paketverlust → falsches Tod-Markieren | Separates Bonding, evtl. separates VLAN |
| Gerade Knotenzahl ohne QDevice | 2-Knoten-Cluster, keine externe Stimme | Split-Brain möglich | QDevice einbinden |
| Firewalls blockieren UDP-Ports | Ports 5404–5405 (knet) blockiert | Kein Cluster-Join | Ports öffnen, iptables/nftables anpassen |
| Zeitabweichung > 0.5 s | NTP falsch konfiguriert | Protokollfehler, Quorum-Probleme | Alle Nodes mit exaktem NTP synchronisieren |
| Fehlendes Shared Storage | Lokale Festplatten statt Ceph/ iSCSI | VM kann nicht migriert werden | ZFS-over-Network oder Ceph einsetzen |
Besonders heikel ist die Kombination aus Zeitversatz und Netzwerkproblemen: Corosync validiert Timestamps; bei großen Abweichungen können Nachrichten verworfen werden.
Fazit und Ihr nächster Schritt
Ein korrekt konfiguriertes Proxmox HA-Cluster-Setup ist unverzichtbar für jede Umgebung, die Ausfälle minimieren möchte. Der Schlüssel liegt in drei Dingen:
- Unbedingt ungerade Stimmenzahl – egal ob über dritte Knoten oder QDevice.
- Separate Netzwerke für Management, Storage und Heartbeat.
- Regelmäßige Tests des Failovers – auch unter simulierten Netzwerkunterbrechungen.
Ihr konkreter nächster Schritt: Prüfen Sie morgen früh auf allen Proxmox-Knoten die Ausgabe von pvecm status. Falls „Expected votes“ gerade ist oder „Quorate: No“, handeln Sie sofort – binden Sie ein QDevice ein oder erweitern Sie den Cluster um einen dritten Knoten. Warten Sie nicht bis zum ersten echten Ausfall – dann bereuen Sie jede vertane Stunde Optimierung.
Ich freue mich darauf, in den Kommentaren zu lesen, wie Ihr actuales Cluster-Design aussieht und welche Erfahrungen Sie mit Split-Brain gemacht haben.
Top comments (0)