Proxmox Cluster mit VM's auf NFS Share

Skyfay

Member
Oct 8, 2023
85
11
8
Hallo zusammen

Ich bin sehr neu im Thema Proxmox und wäre froh über eure Hilfe. Mein aktuelles Setup besteht aus einem Synology Nas DS1821+ mit ca. 100TB HDD Speicher im Raid (7 Festplatten aktuell). Dazu habe ich zwei Kleiner Server (i9/i7, 64GB Ram jeweils, 1TB SSD) auf welchen Proxmox installiert und als Cluster zusammengeschaltet ist.
Mein Netzwerk läuft aktuelle auf 1Gbit/s wird aber die nächsten Wochen komplett auf 10Gbit/s erweitert.

Nun habe ich Proxmox bisschen getestet und festgestellt, dass ich ja alle VM's und Container auf dem NFS Share laufen lassen kann. Somit kann ich eine einfache Live Migration machen und da ich sowieso auf dem Nas genug Speicher habe schien das Sinnvoll zu sein. Allerdings ist mir auch die Performance wichtig!

Bei den VM's die ich bis jetzt am laufen habe schien das auch relativ gut zu laufen. Nun möchte ich aber auch einen Game Server mit Pterodactyl betreiben. Falls Ihr das nicht kennt, das ist eine Manage Software zum erstellen von Game Server als Docker Container. Diese Server können relativ groß werden ja ich ein paar größere Minecraft sowie ARK Server hoste.

Nun mein Ziel ist es die Virtuellen Disks so klein wie möglich zu halten, denn je grösser die sind desto länger dauert ein Backup da ja immer das ganze Image gesichert werden muss?
Also habe ich mir gedacht, ich mache auf meinem Nas einen weiteren Ordner welchen ich dann über NFS direkt in die VM mounte und worauf die Spieldaten liegen. So kann die VM so 25GB groß bleiben und ich brauch keine Angst zu haben dass die Game Server plötzlich grösser werden und die VM voll läuft.

Das scheint zu funktionieren allerdings ist die Performance nicht die beste. Wenn man durch die Minecraft Welt fliegt dann kommt der Server mit dem laden nicht hinterher. Wenn ich vorab einmal die Chunks auf dem Server laden lasse, dann funktioniert es relativ gut. Lokal noch immer deutlich schneller wie über NFS aber das ist auch in Ordnung.

Als weiteres habe ich einen Plex Server. Die Daten liegen auf dem Nas und werden per NFS in die VM eingebunden. Sowohl bei Plex als auch bei der Pterodactyl VM musste ich nach einer Live Migrations bereits feststellen dass irgendwas nicht mehr funktioniert. Die Plex VM ist gar nicht mehr hoch gekommen und der Minecraft Server musste neu starten. Ist es möglich, dass Live Migrationen schief gehen, wenn man in der VM ein NFS Share gemountet hat? Manchmal scheint es zu funktionieren und dann plötzlich wieder nicht.

Und was haltet Ihr davon, die VM's auf einem NFS Share zu hosten und des weiteren auch noch NFS Share in die VM's für die jeweiligen Daten zu machen?

Ich freue mich auf eure Rückmeldung.
 
Nun mein Ziel ist es die Virtuellen Disks so klein wie möglich zu halten, denn je grösser die sind desto länger dauert ein Backup da ja immer das ganze Image gesichert werden muss?
Nur wenn du LXCs oder VZDump benutzt. VMs mit snapshot-mode Backups können inkrementell zum PBS gesichert werden ohne dass da die volle vDisk gelesen oder übertragen werden muss.

Allerdings ist mir auch die Performance wichtig!
Die wird natürlich schlechter sein als bei lokalem Storage da dann NFS Overhead und die Latenz siwue Bandbreitenbeschränkung vom Netzwerk draufkommt. Besonders da es eher so klingt, als wenn da dein NAS auf HDDs läuft.
 
Last edited:
Nur wenn du LXCs oder VZDump benutzt. VMs mit snapshot-mode Backups können nkrementell zum PBS gesichert werden ohne dass da die volle vDisk gelesen oder übertragen werden muss.
Aber Snapshots können ja nicht geplant werden sondern nur manuell ausgeführt oder?

Die wird natürlich schlechter sein als bei lokalem Storage da dann NFS Overhead und die Latenz siwue Bandbreitenbeschränkung vom Netzwerk draufkommt. Besonders da es eher so klingt, als wenn da dein NAS auf HDDs läuft.
Ist diese Methode denn überhaupt Sinnvoll und wenn ja wann? Bin ich der einzige der Shared Storage auf diese Weise verwendet? Ja, mein Nas läuft mit HDDS. Würde es einen Unterschied machen, wenn ich ein zweites Nas kaufen würde welches mit SSD's läuft und worauf dann die VM's laufen?
Was mir bei NFS aufgefallen ist, natürlich wird mein Netzwerk deutlich mehr ausgelastet. Bei einem Backup werden die Daten zuerst vom Nas auf die Proxmox Maschine geladen und dann als Backup zurück auf mein Nas. Das ist irgendwie etwas unsinnig oder?

Wie würdest du denn mein Problem mit dem spiele Server lösen? Ich müsste da halt wirklich 400GB+ Vm's machen und der Speicher kann halt sehr schnell mehrere hundert GB steigen. Ich finde meine Lösung mit NFS da eigentlich gar nicht so schlecht weil alle zwei Wochen die VM zu erweitern ist irgendwie auch nicht das wahre.

Und auf meinem Nas kann ich halt auch direkt Snapshots machen wenn mal was sein sollte das ist halt auch ein Vorteil.
 
Aber Snapshots können ja nicht geplant werden sondern nur manuell ausgeführt oder?
Nicht Snapshots sondern richtige snapshot-mode Backups. Und doch, auch Snapshots kannst du mit zusätzlichen Skripten wie "cv4pve-autosnap" automatisieren und geplant ausführen.

Ist diese Methode denn überhaupt Sinnvoll und wenn ja wann? Bin ich der einzige der Shared Storage auf diese Weise verwendet?
Machen viele so. Dann aber mit SSDs für die VMs und mit ordentlicher Netzwerkanbindung. Selbst die geplanten 10Gbit sind nicht wirklich schnell. Professionell würde man da heute für sowas eher zu 100Gbit oder ähnliches greifen.

Was mir bei NFS aufgefallen ist, natürlich wird mein Netzwerk deutlich mehr ausgelastet. Bei einem Backup werden die Daten zuerst vom Nas auf die Proxmox Maschine geladen und dann als Backup zurück auf mein Nas. Das ist irgendwie etwas unsinnig oder?
Für sowas will man üblicherweise auch mehrere getrennt Netzwerke. Also Backups über eigene NIC, Gastverkehr über eine eigene NIC, Corosync über eigene NIC, Storage über eigene NIC, ...dass da deine VMs nicht einbrechen oder gar ein PVE Node neustartet, weil die Netzwerkverbindung gesättigt ist.

Wie würdest du denn mein Problem mit dem spiele Server lösen? Ich müsste da halt wirklich 400GB+ Vm's machen und der Speicher kann halt sehr schnell mehrere hundert GB steigen. Ich finde meine Lösung mit NFS da eigentlich gar nicht so schlecht weil alle zwei Wochen die VM zu erweitern ist irgendwie auch nicht das wahre.
Mit nur 2 Nodes und keine kritischen Dienste würde ich lokalen Storage nutzen. Also Enterprise SSDs im ZFS Mirror oder Striped Mirror und dann Replikation benutzen, dass da die beiden lokalen ZFS Pool synchron gehalten werden. Dann kannst du auch in Sekunden zwischen den Nodes migrieren, bist den Single-Point-of-Failure vom NFS los und hast flotte Performance weil es ja lokaler Storage ist. Und Speicher erweitern ist da jetzt auch echt nicht das Problem. Dann kauft man halt 4 neue Enterprise SSDs und erweitert die ZFS Pools der beiden PVE Nodes um einen neuen Mirror.
Nur 2 PVE Nodes sollte man übrigens nicht betreiben. Du brauchst immer Minimum 3 Rechner für einen Cluster. Da solltest du also wenigstens auf dem NAS eine VM als Qdevice einrichten oder dir einen kleinen Raspi/Thin-Client als dritten Voter hinstellen.
 
Hey, vielen Dank für deine erneute Antwort.
Nicht Snapshots sondern richtige snapshot-mode Backups. Und doch, auch Snapshots kannst du mit zusätzlichen Skripten wie "cv4pve-autosnap" automatisieren und geplant ausführen.
Achso, danke für die Aufklärung. Ich versuche eigentlich mein Setup so weit es geht auf GUI Basis zu halten.
Machen viele so. Dann aber mit SSDs für die VMs und mit ordentlicher Netzwerkanbindung. Selbst die geplanten 10Gbit sind nicht wirklich schnell. Professionell würde man da heute für sowas eher zu 100Gbit oder ähnliches greifen.
Habe vorhin gesehen dass mein einer Test auch mit SSD (SSD NFS Share) gemacht wurde. Ich denke aber gerade in diesem Fall haben vermutlich wenige Leute die gleiche Voraussetzungen wie ich.
Für sowas will man üblicherweise auch mehrere getrennt Netzwerke. Also Backups über eigene NIC, Gastverkehr über eine eigene NIC, Corosync über eigene NIC, Storage über eigene NIC, ...dass da deine VMs nicht einbrechen oder gar ein PVE Node neustartet, weil die Netzwerkverbindung gesättigt ist.
Achso. Das macht natürlich Sinn. Nunja in meinem Fall bin ich eine Privatperson die einfach Spaß an dem ganzen hat und kein Unternehmen welches sich darauf spezialisiert. Es ist schon schwer genug gewesen geeignete Hardware für ein 10G Netzwerk zu finden. Da ich mehr oder weniger im Consumer Bereich unterwegs bin und auch wenig Platz und kein Rack zur Verfügung habe ist es schon etwas schwierig gewesen.

Meine Server haben jedoch alle neben einem 10G Anschluss einen weiteren 2.5G Anschluss. Somit könnte ich theoretisch ein zweites 2.5G Netzwerk zwischen meinen Servern und meinem Nas aufbauen. Ich denke aber für den Anfang werde ich das nicht machen und mal schauen wo die Reise hin geht.

Mit nur 2 Nodes und keine kritischen Dienste würde ich lokalen Storage nutzen. Also Enterprise SSDs im ZFS Mirror oder Striped Mirror und dann Replikation benutzen, dass da die beiden lokalen ZFS Pool synchron gehalten werden. Dann kannst du auch in Sekunden zwischen den Nodes migrieren, bist den Single-Point-of-Failure vom NFS los und hast flotte Performance weil es ja lokaler Storage ist. Und Speicher erweitern ist da jetzt auch echt nicht das Problem. Dann kauft man halt 4 neue Enterprise SSDs und erweitert die ZFS Pools der beiden PVE Nodes um einen neuen Mirror.
Nur 2 PVE Nodes sollte man übrigens nicht betreiben. Du brauchst immer Minimum 3 Rechner für einen Cluster. Da solltest du also wenigstens auf dem NAS eine VM als Qdevice einrichten oder dir einen kleinen Raspi/Thin-Client als dritten Voter hinstellen.
Okay, also du empfiehlst mir lokal zu arbeiten. Da müsste ich dann zunächst jeweils zwei NVME SSD's pro System kaufen. Aktuell laufen beide Server nur mit einer NVME SSD ohne Raid. Da ich ja Backups mache und eigentlich von einem Setup mit NFS ausgegangen bin, wäre das für mich auch kein Problem gewesen wenn mal ein Server ausfallen würde.

Bezüglich dem ZFS Pool Synchron, da wird ja alles nur alle 15 Minuten synchronisiert. Bedeutet wenn ein System ausfallen würde, dann wäre der Stand von 15 Minuten weg richtig? Inkludiert die Synchronisation auch die Ram Daten weil wenn diese Weg wären, dann gäbe es ja eine Inkonsistenz der Daten.

Aktuell ist leider nicht genug Platz da für ein drittes System. Dann hätte ich mir nämlich auch Ceph angeschaut.

Wie würdest du das aber nun mit meinen Spieleservern machen? Einfach eine große VM wo dann halt das Backup bisschen länger geht und auch mehr Backup Speicher in Anspruch nimmt? Mein einer Minecraft Server alleine liegt halt bei 200GB. Ich hatte die Performance Probleme in diesem Spiel übrigens auch auf einer lokalen Disk. Wenn man die Chunks vorerst lädt dann funktioniert alles sehr gut. Aber wenn man das nicht macht und schnell unterwegs ist kann es halt Probleme geben. Dies ist das einzige Spiel was ich bis jetzt getestet habe. Wie es sich mit anderen spielen verhält weiß ich noch nicht.
 
Last edited:
Bezüglich dem ZFS Pool Synchron, da wird ja alles nur alle 15 Minuten synchronisiert.
Kannst du bis auf 1 Minute senken.
Bedeutet wenn ein System ausfallen würde, dann wäre der Stand von 15 Minuten weg richtig?
Genau. Ist nie perfekt synchron da kein echter Shared Storage, aber dafür dann halt auch schneller, weil nicht erst lange übers langsame Netzwerk auf das ACK gewartet werden muss.

Inkludiert die Synchronisation auch die Ram Daten weil wenn diese Weg wären, dann gäbe es ja eine Inkonsistenz der Daten.
Nein, RAM ist nie enthalten. Der wäre aber auch beim NFS weg, wenn dir ein Server abschmiert und sich per HA dann die VM auf dem anderen Node neustarten soll. Da muss deine Software dann entsprechend mit umgehen können (was Minecraft ja z.B. nicht toll kann...da sollte man dann z.B. den Intervall für das automatische Speichern der Welt vom RAM auf Disk entsprechend senken, dass da nicht zu viel Weltfortschritt weg ist).

Ich hatte die Performance Probleme in diesem Spiel übrigens auch auf einer lokalen Disk. Wenn man die Chunks vorerst lädt dann funktioniert alles sehr gut. Aber wenn man das nicht macht und schnell unterwegs ist kann es halt Probleme geben. Dies ist das einzige Spiel was ich bis jetzt getestet habe.
Minecraft braucht halt schnelle Disks und eine CPU mit schneller Single-Threaded Performance. Das will man dann schon lokal von einer NVMe laufen lassen, ordentlich RAM geben (meine Minecraft VM hat z.B. 22GB bekommen) und am besten alle Maps (auch Nether/End und Co) als eigenen Server laufen lassen, da Minecraft ja weitestgehend nur einen CPU-Kern pro Server nutzt. Hast du nur einen Server mit mehreren Welten müssen dann alle Welten um die Ressourcen vom einen CU-Kern kämpfen. Hast du z.B. 8 Welten und betreibst die als Cluster aus 8 Servern (sieht z.B. "PaperMC" mt "Waterfall") dann werden wenigstens 8 CPU Kerne Sinnvoll benutzt und jede Welt hat ihren eigenen Kern.
Und die meisten Mods kannst du auch mit MySQL betreiben, was es auch noch einmal schneller macht.
Guck am besten mal in Minecraft Admin Foren/Discords ob die Tipps zur Optimierung haben.
 
  • Like
Reactions: Skyfay
Also deine Empfehlung ist ein ZFS-Pool aus zwei Disks (Raid 1) auf beiden Servern und dann ein ZFS Pool Sync. Die Backups dann einmal am Tag über NFS auf mein Nas. Was auch den Vorteil hat, dass zwei Systeme jeweils den relativ gleichen Stand haben, falls was passiert ich dann direkt auf dem zweiten Host starten kann und ich schnelle Nvme Disks für die VM's habe richtig? (Und Live Migration auch ganz schnell geht?)

Was Minecraft angeht. Ich hatte vor Proxmox ein Setup von Ubuntu Server direkt auf dem Host und da dann Minecraft als Docker Container. Hatte da keinen wirklichen Probleme erst jetzt in den VM's (Proxmox Host > VM > Docker Container) hatte ich halt massive Probleme beim laden von Chunks wenn ich mit Elytra durch die Welt flog. Dann ist der Server mit dem Laden nicht hinterher gekommen und man war "Stuck".

Das ganze hatte ich vorher nicht. Ich habe da halt wirklich das Gefühl gehabt dass die VM der Overhead ist. Der Server läuft mit PaperMC. Mehrere Welten zu verteilen auf einzelne Server ist aktuell auch geplant aber auch Nether, End auf der Standard Survival Welt nicht. Ich möchte halt das normale Survival Erlebnis und ich denke das wäre dann nicht umsetzbar mit eigenen Portalen etc. sondern nur customized.

Ich werde das ganze auch ganz neu aufgaben aber meine alte Map ca. 1 Jahr alt war dann halt gute 230 GB gross. Und ich möchte keine VM erstellen und dann jede Woche den Speicher erhöhen weil ich mehr brauche aber möchte die VM auch nicht direkt 500 GB gross machen weil es dann halt einfach beim sichern länger dauert. Da dachte ich eben es macht Sinn die Spiele Daten per NFS Share in der VM bereitzustellen weil ich dann nicht auf die Grösse achten muss. Aber das ist ja anscheinend nicht so eine gute Idee ^^
 
@Dunuin Hey
Ich hätte nochmal eine Kurze Frage bezüglich meines Setups.
Folgender Plan habe ich aktuell:
Node A = 2x 4TB Nvme SSD im ZFS Raid 0
Node B = 2x 4TB Nvme SSD im ZFS Raid 0
Die ZFS Pools Synchron halten mit ZFS Mirror.
Zusätzlich einmal täglich ein Backup der VM's auf mein Nas per NFS.

Somit sollte ich ja ca. 8TB Nvme Speicher haben welchen ich für VM's nutzen kann und wenn ein Node ausfällt kann das andere übernehmen.
Dazu bin ich davor geschützt wenn beide Nodes ausfallen würden da die VM Backups auf dem Nas zusätzlich verschlüsselt in die Cloud gesichert werden. Und ich kann von schnellem Nvme Storage für die VM's profitieren.

Klingt das nach einer guten Lösung oder hättest du noch Ideen zur Optimierung?
 
@Dunuin Hey
Ich hätte nochmal eine Kurze Frage bezüglich meines Setups.
Folgender Plan habe ich aktuell:
Node A = 2x 4TB Nvme SSD im ZFS Raid 0
Node B = 2x 4TB Nvme SSD im ZFS Raid 0
Die ZFS Pools Synchron halten mit ZFS Mirror.
Zusätzlich einmal täglich ein Backup der VM's auf mein Nas per NFS.

Somit sollte ich ja ca. 8TB Nvme Speicher haben welchen ich für VM's nutzen kann und wenn ein Node ausfällt kann das andere übernehmen.
Dazu bin ich davor geschützt wenn beide Nodes ausfallen würden da die VM Backups auf dem Nas zusätzlich verschlüsselt in die Cloud gesichert werden. Und ich kann von schnellem Nvme Storage für die VM's profitieren.

Klingt das nach einer guten Lösung oder hättest du noch Ideen zur Optimierung?
Raid0 erhöht immer die Ausfallwahrscheinlichkeit, aber das hast du vermutlich einkalkuliert.
ZFS Mirror gibts nur im Host, ist quasi das Raid1. ZFS Replika ist immer asynchron und die kürzeste Zeit zwischen den sync's ist 1 Minute.
Wenn du mit 1 Minute Verlust leben kannst, dann ist das deine Lösung.

Du hast dann auch keine 8TB nutzbar, denn bei ZFS solltest du nie mehr als 80% belegen, aber wenn du Compression anmachst, sollte das genügend kompensieren.
 
Vielen Dank für deine Antwort.
Raid0 erhöht immer die Ausfallwahrscheinlichkeit, aber das hast du vermutlich einkalkuliert.
Genau ja. Ich brauche für meine VM‘s wenn alles lokal laufen soll mehr als nur 4TB Speicher und das wäre mein Weg. Durch Replication hätte ich ja dann trotzdem mehr oder weniger mein „Raid 1“.

ZFS Replika ist immer asynchron und die kürzeste Zeit zwischen den sync's ist 1 Minute.
Genau. Wie ich gesehen habe laufen die Replikations Tasks immer nacheinander. Gibt es denn da Probleme wenn ich eine VM jede Minute synchronisiere? Weil die wird ja dann eigentlich dauerhaft am kopieren sein.

Du hast dann auch keine 8TB nutzbar, denn bei ZFS solltest du nie mehr als 80% belegen, aber wenn du Compression anmachst, sollte das genügend kompensieren.
Ja dass ich wohl keine vollen 8TB bekomme war mir klar. Wenn die Kompression aktiviere, braucht das dann nicht viel zusätzliche Leistung?
 
Bei meinen Kunden, die ZFS Replica produktiv einsetzen, dauert das pro VM 1-2 Sekunden. Bei VMs mit vielen Änderungen bis zu 5 Sekunden.
Fullsync einer 60GB VM in der Regel unter 1,5 Minuten.
Aktuelle CPUs haben so viel Leistung, dass du Kompression gar nicht merkst. Bringt aber eine Menge.
 
Bei meinen Kunden, die ZFS Replica produktiv einsetzen, dauert das pro VM 1-2 Sekunden. Bei VMs mit vielen Änderungen bis zu 5 Sekunden.
Fullsync einer 60GB VM in der Regel unter 1,5 Minuten.
Aktuelle CPUs haben so viel Leistung, dass du Kompression gar nicht merkst. Bringt aber eine Menge.
Was würdest du denn als Zeit vorschlagen? Also es gibt VM‘s bei welchen ich das auf eine Stunde einstellen kann da diese z.B nur als VPN Server dienen. Aber bei z.B Plex oder dem Pterodactyl Gaming Server sollte das schon sehr aktuell sein.

Was empfiehlst du denn da ungefähr? Jede Minute oder alle 5?

Vielleicht nich eine andere kurze Frage, wenn ich mehrere Disks an einer VM habe, repliziert es dann auch alle Disks?
 
Zuerst, die Replikation ist immer auf VM Basis, also wird alles repliziert, außer du hast eine Disk auf einem nicht ZFS Datastore, dann funktioniert das natürlich nicht.

Die Häufigkeit ist Geschmacksache. Mit HDDs hat man dadurch unter Umständen einen Impact, der unerwünscht ist. Bei SSDs sehe ich keine Probleme mit 1 Minute Rhythmus. Bei Windows mit SQL wird die DB jedes mal konsistent gemacht mit dem VSS Backup Modus. Da muss man selbst gucken ob das bei dir Probleme macht.
 
Ah okay interessant. Wahrscheinlich muss ich auch erstmal bisschen testen und sehe dann wie es so läuft.
Aber ich kläre halt gerne alles ab bevor ich 1.2K für Nvme SSD‘s ausgebe

Ich habe Datenbanken (MySQL) hauptsächlich als Docker Container. Das sollte kein Problem sein da ja SnapShots gemacht werden oder kann es da auch zur Inkonsistenz kommen?
Bei mir läuft alles auf Linux ich werde keine Windows VM‘s nutzen.
 
Achja und was mich auch noch interessieren würde, ob ich ich mit ZFS Pool auch einstellen kann dass die VM nur den Speicher braucht welche sie wirklich benötigt und ob auch Zurückgewinnung des Speichers möglich ist?
 
Achja und was mich auch noch interessieren würde, ob ich ich mit ZFS Pool auch einstellen kann dass die VM nur den Speicher braucht welche sie wirklich benötigt und ob auch Zurückgewinnung des Speichers möglich ist?
ZFS kann Thin-Provisioning, falls du das meinst. Musst du dann aber auch in jeder VM discard/TRIM nutzen, damit gelöschtes auch wieder wirklich Speicher freigibt.
 
ZFS kann Thin-Provisioning, falls du das meinst. Musst du dann aber auch in jeder VM discard/TRIM nutzen, damit gelöschtes auch wieder wirklich Speicher freigibt.
Braucht das viele Resourcen also macht es Sinn das zu aktivieren? Ich habe halt VM‘s welche manchmal mehrere hundert GB Daten haben werden welche dann wieder gelöscht werden.
 
ZFS ist Copy-on-Write, ist also so oder so ineffizient wenn du viel schreibst.
 
Bedeutet was für mich? Muss ich Angst vor der Leistung haben?
Mit NVMe Enterprise SSDs für gemische/schreibintensive Workloads solltest du schon ordentliche Performance haben. Aber ohne ZFS wäre die Performance natürlich noch deutlich besser ;)
 

About

The Proxmox community has been around for many years and offers help and support for Proxmox VE, Proxmox Backup Server, and Proxmox Mail Gateway.
We think our community is one of the best thanks to people like you!

Get your subscription!

The Proxmox team works very hard to make sure you are running the best software and getting stable updates and security enhancements, as well as quick enterprise support. Tens of thousands of happy customers have a Proxmox subscription. Get yours easily in our online shop.

Buy now!