Proxmox Cluster (auch HA-Cluster)
Selbst wenn man keine Hochverfügbarkeit braucht, kann es sinnvoll sein, zwei oder mehr PVE zu einem Cluster zusammen zu fassen. Sie lassen sich dann über eine Einstiegsseite administrieren, VMs und LXCs können leichter zwischen den Knoten migrieren und auch für Monitoring-Aufgaben kann das Vorteile bieten. Hier beschreibe ich die Einrichtung eines Zwei-Knoten-Clusters, also eines Cluster aus zwei PVE. Neben den beiden PVE wird aber noch ein drittes System gebraucht, um ein Quorum zu schaffen. Ein Quorum bedeutet, dass immer eine Mehrheit der Stimmen benötigt wird, um zu erkennen, ob ein Knoten ausgefallen ist. Bei zwei Stimmen kann ein verbleibender Knoten nicht erkennen, ob der andere ausgefallen ist oder nur die Verbindung zwischen den beiden Knoten. Der andere kann also gleichsam wie Schroedingers Katze ausgefallen sein oder auch nicht. Bei drei oder mehr Stimmen ist klar, wenn alle verbleibenden sagen, der Knoten ist ausgefallen, dann ist er das wohl auch.
Warum ist das trotzdem ein 2-Knoten-Cluster? Nun weil die dritte Stimme nicht einem dritten PVE verliehen wird, sondern irgend einem anderen Server, der nicht Teil des Clusters ist. Das kann irgend ein Server sein, den man vielleicht sowieso irgendwo noch übrig hat. Ich verwende dazu einen Proxmox Backup Server, der diese kleine Zusatzaufgabe spielend mit übernehmen kann.
Storage hinzufügen
Der Speicher, der von den hochverfügbar zu haltenden Ressourcen genutzt wird, muss auf beiden Knoten identisch sein. Die Hochverfügbarkeit wird durch Spiegelung der Ressourcen und Schwenken (Migrieren) von einem auf den anderen Knoten hergestellt. Mit Proxmox-Bordmitteln ohne wildes Skripting funktioniert das nur mit ZFS. Auf dem ersten Knoten wird der Speicher unter Disks/ZFS mit "Erstellen ZFS" generiert. Wenn man mehrere freie Festplatten verfügbar hat, dann kann man verschiedene RAID-Level zur Erhöhung der Ausfallsicherheit und ggf. der Durchsätze einrichten. Das ist ein Kapitel für sich.
Man wählt also die verfügbare(n) Festplatte(n) aus und das RAID-Level. Bei nur einer Platte kann man natürlich nur "Einzelne Disk" auswählen. Kompression und ashift können wie vorgeschlagen übernommen werden. Hier auf dem ersten Knoten muss das Häkchen "Storage hinzufügen" gesetzt sein. Mit Klick auf "Erstellen" wird das ZFS erstellt und direkt als lokaler Storage angebunden.
Beim zweiten Knoten verfährt man genauso. Wichtig ist, dass das ZFS den gleichen Namen erhält und dass jetzt das Häkchen "Storage hinzufügen" nicht gesetzt sein darf.
Einrichtung des Clusters auf dem ersten Knoten
Auf der Weboberfläche des ersten Knotens unter Rechenzentrum/Cluster kann man anklicken "Erstelle Cluster". In dem sich öffnenden Dialog gibt man dem Cluster einen Namen und wählt die zu nutzende Netzwerkkarte aus. Wenn man in dem PVE zwei Netzwerkkarten zu einer ausfallsicheren Netzverbindung gebündelt hat oder ohnehin nur eine hat, dann kann man getrost diese eine nehmen. Empfohlen wird allgemein, den Clusterverkehr (den sogenannten Heartbeat) über eine separate Netzwerkverbindung zu führen. Das muss man aber nicht.
Einen Knoten dem Cluster hinzufügen
Auch das Hinzufügen von PVEs als weitere Knoten zu dem Cluster geht sehr einfach. Nachdem das Cluster erst einmal erstellt wurde, kann man auf dem ersten Knoten die Beitrittsinformationen für das Cluster aufrufen und in die Zwischenablage kopieren.
Wenn hierbei keine Fehler gemacht wurden, dann haben wir ein Cluster, aber noch kein stabiles Quorum.
Q-Device einrichten
Die dritte Stimme soll in meinem Cluster ein Server bekommen, der ansonsten mit dem Cluster nichts zu tun hat. In meinem Fall ist das ein Proxmox Backup Server, der ohnehin in meinem Homelab seinen Dienst versieht. Ich muss dazu einfach auf dem PBS das QNet Daemon-Paket installieren. Ich melde mich dazu auf der SSH-Shell des PBS an und gebe den Befehl
apt install corosync-qnetd
systemctl status corosync-qnetd
active (running)
Konfiguration auf dem Proxmox VE Cluster
Zunächst ist das QDevice Client-Paket auf beiden PVE-Knoten zu installieren.
apt install corosync-qdevice
pvecm qdevice setup {IP-Adresse des QDevices}
pvecm status
Cluster information
-------------------
Name: homelab
Config Version: 3
Transport: knet
Secure auth: on
Quorum information
------------------
Date: Wed Jan 14 20:26:45 2026
Quorum provider: corosync_votequorum
Nodes: 2
Node ID: 0x00000001
Ring ID: 1.ba
Quorate: Yes
Votequorum information
----------------------
Expected votes: 3
Highest expected: 3
Total votes: 3
Quorum: 2
Flags: Quorate Qdevice
Membership information
----------------------
Nodeid Votes Qdevice Name
0x00000001 1 A,V,NMW 192.168.0.145 (local)
0x00000002 1 A,V,NMW 192.168.0.96
0x00000000 1 Qdevice
Hochverfügbarkeit einrichten
Zunächst sollte man prüfen, ob der ZFS-Speicher wirklich für beide Knoten verfügbar ist. Dazu wählt man unter "Rechenzentrum/Storage" auf der Web-GUI des Clusters das entsprechende ZFS aus. Wenn dort nur ein Knoten eingetragen sein sollte, dann lässt sich der andere einfach hinzufügen.
Unter "Rechenzentrum/HA" ist zunächst eine Ressource hinzuzufügen. Hier wählt man eine VM aus und gibt vor, wie viele Neustartversuche und wie viele Verschiebungen maximal erlaubt sind. Hier ist es sinnvoll, jeweils eine 1 stehen zu lassen. Wenn ein Schwenk einmal nicht erfolgreich ist, dann besteht ein größeres Problem, das der Aufmerksamkeit eines beherzten Administrators oder einer beherzten Administratorin bedarf. Die vorgeschlagenen Parameter können daher alle übernommen werden.
Ergänzend kann man noch mit einer Ressourcenaffinitätsregel vorgeben, dass zum Beispiel bestimmte Ressourcen beim Schwenken nicht getrennt oder im Gegenteil nicht zusammen gelegt werden dürfen. Bei einem Cluster mit mehr als zwei Knoten und Gästen, die sich gegenseitig beeinträchtigen könnten oder die möglichst nicht über Knotengrenzen und Firewalls kommunizieren sollen, kann man sich hier sicher sinnvolle Konstellationen ausdenken.
Damit das Schwenken im Bedarfsfall zügig funktioniert, muss noch für jede HA-Ressource eine Replikation eingerichtet werden. Das geschieht unter "Replizierung". Diesen Punkt kann man unter "Rechenzentrum/Replizierung" ansteuern oder bei den Parametern für die Ressource, also hier die VM. Hier wählt man das Replikationsziel aus und das Intervall. Ein kurzes Intervall stellt eine bessere Absicherung dar, kostet aber auch Ressourcen. Wenn man den Netzwerktraffic oder die Platten-Durchsätze schonen will, kann man hier noch eine Drosselung der Übertragungsbandbreite angeben. Das sollte im Normalfall nicht notwendig sein.
Wartungsarbeiten
Wenn man den Schwenk der Ressourcen für geplante Wartungsarbeiten manuell antriggert, dann wird dieser Schwenk zunächst durchgeführt aber auch sofort wieder rückgängig gemacht. In den HA-Knoten-Affinitäten ist ja eine entsprechende Priorität definiert. Nun kann man vor geplanten Arbeiten und bewussten Schwenks diese Parameter manuell ändern. Eleganter ist es, den betroffenen Knoten in Wartung zu versetzen. Das geht leider nicht über die Web-GUI. Man muss die Konsole bemühen und
ha-manager crm-command node-maintenance enable {KNOTENNAME}
ha-manager crm-command node-maintenance disable