# Proxmox Heartbeat: Corosync & Node-Health im Detail
TL;DR / Management Summary In einem Proxmox-Cluster ist der Heartbeat die lebenswichtige Kommunikation, die jedem Knoten mitteilt: “Ich bin noch da”. Dieser Dienst wird von Corosync übernommen. Wenn die Latenz im Heartbeat-Netzwerk zu hoch wird, verliert der Cluster sein Quorum, was zu unkontrollierten Reboots (Fencing) führen kann. Ein Senior Admin konfiguriert Corosync über dedizierte Netzwerk-Links und überwacht die Latenz (RTT) mit Millisekunden-Präzision.
# 1. Wie Corosync arbeitet
Das Token-Ring Prinzip.
Corosync schickt ein kleines Datenpaket (Token) im Kreis durch alle Cluster-Knoten.
- Timeout: Erhält ein Knoten das Token nicht innerhalb der definierten Zeit (Standard: ~2 Sekunden), gilt der Absender als tot.
- Multicast/Unicast: Standardmäßig nutzt Corosync Multicast (UDP 5405). In modernen Netzen wird oft auf Unicast gewechselt, um Probleme mit Switch-Konfigurationen zu vermeiden.
# 2. Heartbeat Redundanz konfigurieren
Nicht nur ein Kabel.
Betreiben Sie Corosync niemals über nur ein physikalisches Interface.
Datacenter -> Cluster -> Edit Config (via Shell /etc/pve/corosync.conf).
totem {
interface {
linknumber: 0
ringnumber: 0
}
interface {
linknumber: 1
ringnumber: 1
}
}
- Link 0: Ihre primäre Management-Bridge.
- Link 1: Eine dedizierte Netzwerkkarte (Back-to-Back) oder ein separates VLAN auf einem anderen Switch.
# 3. Deep Dive: Latenz & Jitter
Der Feind der Stabilität.
Corosync ist extrem empfindlich gegenüber Latenzspitzen.
- KPI: Die RTT (Round Trip Time) zwischen den Knoten sollte < 2ms sein.
- Gefahr: Wenn Sie Corosync über das gleiche Kabel wie Backup-Traffic schicken, verursachen die großen Pakete des Backups kleine Pausen im Heartbeat (Jitter). Dies führt zu “Node lost quorum” Fehlern.
# 4. Day-2 Operations: Health Checks
Den Puls fühlen.
Prüfen Sie regelmäßig den Status der Corosync-Ringe:
# Zeigt den Status aller konfigurierten Ringe/Links
corosync-cfgtool -s
- Erwartung:
status: OKauf allen Links. Wenn ein Link aufFAULTYsteht, hat die Hardware oder Verkabelung ein Problem.
# 5. Troubleshooting & “War Stories”
Wenn der Rhythmus stolpert.
# Top 3 Fehlerbilder
-
Symptom: “Corosync nodes not communicating”.
- Ursache: Firewall blockiert UDP 5404/5405 oder IGMP-Snooping am Switch ist aktiv, aber kein Querier vorhanden.
- Lösung: Multicast-Test mit
ompingdurchführen.
-
Symptom: Host rebootet plötzlich ohne Fehlermeldung.
- Ursache: Heartbeat-Timeout hat den Hardware-Watchdog (Artikel 692) ausgelöst.
- Lösung: Latenz-Spikes im Netzwerk suchen (z.B. Backup-Jobs prüfen).
-
Symptom: “Token lost” Meldungen im Syslog.
- Fix: CPU-Priorität für Corosync erhöhen (Proxmox macht dies standardmäßig via Realtime-Scheduling).
# “War Story”: Der “Software-RAID” Killer
Ein Admin installierte einen neuen Proxmox-Knoten und nutzte Software-RAID ohne dedizierte Cache-Controller. Das Ergebnis: Während eines intensiven ZFS-Scrub-Vorgangs war die CPU so mit I/O-Wait beschäftigt, dass der Corosync-Dienst für 3 Sekunden keine CPU-Zeit bekam. Die Folge: Der Knoten konnte sein Heartbeat-Paket nicht rechtzeitig senden. Die anderen 4 Knoten dachten, er sei tot, und lösten einen Failover-Sturm aus. Der Host selbst bemerkte das fehlende Quorum und führte einen Not-Reboot durch. Lehre: Heartbeat-Stabilität erfordert nicht nur ein gutes Netzwerk, sondern auch garantierte CPU-Zyklen.
# 6. Monitoring & Reporting
Statistiken der Erreichbarkeit.
# Corosync Quorum Check (CLI)
# Zeigt die Anzahl der Stimmen (Votes) im Cluster
pvecm status
- KPI:
Total votesvs.Expected votes. Diese Werte müssen übereinstimmen.
# 7. Fazit & Empfehlung
Corosync ist das Nervensystem Ihres Datacenters.
- Empfehlung: Nutzen Sie für Corosync immer zwei physisch getrennte Netzwerke.
- Wichtig: Verwenden Sie für Cluster mit mehr als 5 Knoten zwingend Unicast, um die Komplexität auf der Switch-Ebene (IGMP) zu reduzieren.
# Anhang: Cheatsheet (Corosync Diagnose)
| Aufgabe | Befehl |
|---|---|
| Status Ringe | corosync-cfgtool -s |
| Quorum Info | pvecm q |
| Live Traffic | tcpdump -i any udp port 5405 |
| Log Monitoring | journalctl -u corosync -f |