Welche Auswirkungen hat das Ausführen von VMs auf einem ZFS-Host auf die Leistung?

11

Ich erwäge die Migration von ext3 zu ZFS zur Datenspeicherung auf meinem Debian Linux-Host unter Verwendung von ZFS unter Linux . Ein Killer-Feature von ZFS, das ich wirklich möchte, ist die Garantie der Datenintegrität. Ich würde mich auch darauf freuen, den Speicherplatz mit zunehmendem Speicherbedarf trivial erweitern zu können.

Ich führe jedoch auch einige VMs auf demselben Host aus. (Normalerweise wird in meinem Fall immer nur eine VM auf dem Host ausgeführt.)

In Anbetracht der Datenüberprüfungssumme und des Copy-on-Write-Verhaltens von ZFS sowie der Tatsache, dass die VM-Disk-Images vergleichsweise große Dateien sind (die Disk-Image-Datei meiner Haupt-VM hat derzeit eine Größe von 31 GB), welche Auswirkungen hat dies auf die Leistung des VM-Gasts? eine Migration? Welche Schritte kann ich unternehmen, um die möglichen negativen Auswirkungen auf die Leistung zu verringern?

Ich kann bei Bedarf mit weniger Datenintegritätsgarantien auf den VM-Disk-Images leben (ich mache in keiner der VMs etwas wirklich Kritisches) und kann sie leicht vom Rest des Dateisystems trennen, aber es wäre schön, wenn ich sie nicht anziehe Ich muss (sogar selektiv) nicht so ziemlich die Funktion deaktivieren, die mich am meisten dazu bringt, auf ein anderes Dateisystem zu migrieren.

Die Hardware ist für ein System der Workstation-Klasse ziemlich leistungsfähig, hält aber für einen High-End-Server keine große Rolle (32 GB RAM mit selten> 10 GB im Einsatz, 6-Kern-3,3-GHz-CPU, derzeit 2,6 TB verwendbar Speicherplatz gemäß dfund insgesamt ca. 1,1 TB frei; die Migration auf ZFS wird wahrscheinlich mehr freien Speicherplatz hinzufügen ) und ich plane nicht, die Datendeduplizierung auszuführen (da das Aktivieren von Dedup in meiner Situation einfach nicht viel hinzufügen würde). Der Plan ist, mit einer JBOD-Konfiguration zu beginnen (offensichtlich mit guten Backups), aber ich kann eventuell zu einem Zwei-Wege-Spiegel-Setup wechseln, wenn die Bedingungen dies erfordern.

ein CVn
quelle
Beachten Sie auch, dass ZFS in Bezug auf IOPS eine bessere Leistung als herkömmliches RAID5 aufweist . RAIDZ-Schreibvorgänge werden mit der Geschwindigkeit einer einzelnen Festplatte ausgeführt, da sie nicht unter den E / A-Leistungseinbußen leiden, die bei herkömmlichem RAID5 / 6 auftreten.
Stefan Lasiewski
1
Vielen Dank an alle, die für Ihre Erkenntnisse geantwortet haben ! Ich werde auf jeden Fall später auf diese Frage zurückkommen.
Ein CVn
Stefans Kommentar ist ... nun, es ist einfach falsch. Die Leistung von ZFS RAIDZ ist aus IOPS-Sicht (mit der Sie normalerweise Probleme mit VMs haben) erheblich schlechter als herkömmliche RAID5-Arrays. Bitte gehen Sie nicht von einer Verbesserung der Schreibleistung aus, wenn Sie zu ZFS wechseln. Das ist selten der Fall. Die Lese-Leistungssteigerung hängt vom RAM ab, der dem ARC zur Verfügung steht, sowie von der Größe und dem Delta Ihres Arbeitssatzes. Normalerweise hilft ZFS ARC bei VMs bei der Leseleistung im Vergleich zu Alternativen. Schriften leiden normalerweise, sogar auf Spiegeln, IMMER unter Raidz.
Nex7
@ Nex7 Wie sind Schreibvorgänge ohne RAID von ZFS, aber mit nur einem Speichergerät, das zB von einigen mdraid bereitgestellt wird? Ist ZFS vergleichbar mit anderen Dateisystemen, da kein ausgefallenes RAID-Material verwendet wird?
Thorsten Schöning

Antworten:

4

Da ZFS auf Blockebene arbeitet, spielt die Größe der Dateien keine Rolle. ZFS benötigt mehr Speicher und CPU, ist jedoch als Dateisystem von Natur aus nicht wesentlich langsamer. Sie müssen sich jedoch bewusst sein, dass RAIDZ in seiner Geschwindigkeit nicht RAID5 entspricht. RAID10 ist in Ordnung, wenn Geschwindigkeit Priorität hat.

James Ryan
quelle
4

ZFS auf anständiger (dh Buff-) Hardware ist wahrscheinlich schneller als andere Dateisysteme. Sie möchten wahrscheinlich eine ZIL auf einem schnellen (dh SSD-) Speicherort erstellen. Dies ist im Wesentlichen ein Speicherort zum Zwischenspeichern von Schreibvorgängen (eher wie ein Journal in ext3 / 4). Auf diese Weise kann die Box bestätigen, dass sie auf die Festplatte geschrieben wird, bevor die eigentlichen Spindeln die Daten haben.

Sie können auch einen L2-ARC auf einer SSD für den Lese-Cache erstellen. Dies ist fantastisch in einer VM-Umgebung, in der Sie physische Festplatten in die Knie zwingen können, indem Sie mehrere VMs gleichzeitig starten.

Laufwerke gehen in VDEVs, VDEVs gehen in Zpools (bitte verwenden Sie jeweils ganze Festplatten). Wenn dies ein kleineres System ist, möchten Sie möglicherweise einen einzelnen Zpool und (wenn Sie nicht zu besorgt über Datenverlust sind) einen einzelnen VDEV. In VDEVs wählen Sie den RAID-Level aus (obwohl Sie auch VDEVs SPIEGELN können, wenn Sie über genügend Festplatten verfügen). Die langsamste Festplatte in einer VDEV bestimmt, wie schnell die gesamte VDEV ist.

Bei ZFS dreht sich alles um Datenintegrität. Der Grund, warum viele der herkömmlichen Tools für die Dateisystemwartung nicht vorhanden sind (wie fsck), ist das Problem, das sie in einem ZFS-Dateisystem nicht lösen können.

IMO ist der größte Nachteil von ZFS, dass wenn Ihre Dateisysteme sich voll nähern (sagen wir 75% +), es SEHR langsam wird. Geh einfach nicht dorthin.

TheFiddlerWins
quelle
2

31 GB sind wirklich überhaupt nicht groß ...

Abhängig vom aktuell verwendeten Dateisystem kann es sein, dass ZFS etwas langsamer ist, aber angesichts Ihrer Hardwarespezifikationen möglicherweise vernachlässigbar ist.

Offensichtlich verwendet ZFS einen guten Teil des Arbeitsspeichers für das Caching, wodurch Ihre VMs im allgemeinen Gebrauch möglicherweise schneller erscheinen (wenn Sie nicht viel lesen oder schreiben). Ich bin mir nicht sicher, wie ZFS unter Linux optimiert ist, aber Sie müssen möglicherweise den ARC einschränken, wenn dies möglich ist, um zu verhindern, dass ZFS mit Ihrem gesamten RAM davonläuft (da Sie einen anständigen Teil für Ihr Hostsystem und möchten VMs).

Ich würde die Komprimierung aktivieren (heutzutage wird empfohlen, sie einzuschalten, es sei denn, Sie haben einen guten Grund, dies nicht zu tun). Denken Sie daran, dass dies erfolgen muss, bevor Daten in das Dateisystem gestellt werden. Die meisten Leute sind überrascht, dass es tatsächlich schneller geht, da die Komprimierungsalgorithmen im Allgemeinen schneller ausgeführt werden als Festplatten-E / A. Ich bezweifle, dass dies bei Ihrem 6-Kern-Prozessor zu erheblichen Leistungsproblemen führen wird. Ich hatte nicht erwartet, dass VMs viel komprimieren würden, aber ich habe es geschafft, ~ 470 GB VM-Daten nur mit der Standardkomprimierungseinstellung in 304 GB umzuwandeln.

Kümmern Sie sich nicht um Deduplizierung, es wird Sie später nur noch verfolgen und Sie werden Wochen damit verbringen, Daten zu mischen, um sie loszuwerden.

Wenn Sie auf Leistungsprobleme stoßen, besteht die offensichtliche Antwort darin, eine SSD als ZIL / L2ARC oder sogar beides hinzuzufügen. Es ist nicht ideal, ein Gerät für beide zu verwenden, aber es wird höchstwahrscheinlich immer noch die Leistung in einem Pool verbessern, der eine kleine Anzahl von Festplatten / vdevs enthält.

Hinzufügen: Ich würde wirklich versuchen, wenn möglich mit einer redundanten Konfiguration zu beginnen (idealerweise Spiegel) oder so schnell wie möglich von einem Streifen in Spiegel umzuwandeln. Während ZFS alle Daten prüft und Fehler im laufenden Betrieb (oder während eines Scrubs) erkennt, kann es nichts dagegen tun (ohne Kopien = 2 zu verwenden, wodurch die Festplattennutzung verdoppelt wird). Sie werden nur darauf hingewiesen, dass es Fehler in Dateien gibt (wahrscheinlich in Ihren VM-Disk-Images), gegen die Sie nicht viel tun können, ohne diese Dateien zu löschen und neu zu erstellen.

USD Matt
quelle
"Sie werden nur damit belassen, dass es Fehler in Dateien gibt ... gegen die Sie nicht viel tun können." Das ist eine gute Meinung, und ich weiß das zu schätzen. Das heißt, hier kommen meine nächtlichen Backups ins Spiel. Da nichts zwischen mir und stiller Datenbeschädigung steht, weigert sich ZFS einfach, die Datei oder einen Teil davon zu lesen, bis ich sie aus dem (bekannten Gut) wiederherstelle ) Backup, das ist eine enorme Verbesserung der Datenintegritätssicherung.
ein CVn
Was die Dateigröße angeht, nein, 31 GB sind nicht gerade objektiv riesig (obwohl sie immer noch ~ 1,2% meiner gesamten Systemspeicherkapazität ausmachen), aber meine Sorge war eher so, dass COW das System all diese Daten kopieren lassen würde ununterbrochen hin und her, ein Missverständnis, das James Ryan schnell korrigierte .
Ein CVn
1

Abhängig von Ihren Anwendungsfällen und VMs würde ich Folgendes berücksichtigen. Lassen Sie das Host-Betriebssystem sich um die Dateien kümmern, die Sie auf den ZFS-Volumes speichern.

Erstellen Sie nach Möglichkeit nur eine LUN für jede VM, die nur das Betriebssystem und die erforderlichen Binärdateien enthält. Und präsentieren Sie Storage Stace für einzelne Daten als Freigaben über NFS, Samba oder iSCSI (oder zvols, wie in den Kommentaren erwähnt). ZFS ist in der Lage, jede Datei mit Prüfsumme und Zugriffszeiten ect zu verfolgen. Wenn die Geschwindigkeit nicht so wichtig ist, können Sie natürlich auch die Komprimierung für einige Datenspeicher aktivieren. Der Vorteil wäre eine fehlende Schicht eines anderen Dateisystems. Wenn Sie eine LUN für die zweite virtuelle Festplatte erstellen und darüber ein NTFS-Dateisystem erstellen möchten, muss ZFS einen großen Binär-Blob verarbeiten und kennt keinen der Inhalte oder Dateien und kann daher den ZIL- oder ARC-Cache nicht nutzen genauso wie die Flugzeugdateien.

Durch die Erwähnung von ACLs kann ZFS ACLs über NFSv4 oder Samba verwenden (falls aktiviert). Ich muss zugeben, dass ich ZFS unter FreeBSD verwende und nicht sicherstellen kann, wie Sambas-ACLs aktiviert werden, die sich auf ZFS-Volumes verbinden. Aber ich bin sicher, dass dies keine große Sache sein sollte.

Die Deduplizierung in Kombination mit einem Lese-Cache ist ein großer Vorteil, wenn es darum geht, Platz zu sparen und massive Lesevorgänge zu verbessern (Boot Storm), da alle VMs beginnen, dieselben Blöcke zu lesen.

Gleiches gilt für ZFS-Snapshots für die VMs und die Datenspeicher. Sie können ein einfaches Shell-Skript erstellen, um die VM einzufrieren, einen Snapshot der VM und des Datenspeichers zu erstellen und weiter zu arbeiten, oder nur den Datenspeicher allein, und die VM klonen, um den Snapshot des ursprünglichen zu präsentieren und einige Dinge zu testen.

Die Möglichkeiten mit ZFS sind endlos;)

EDIT: Hoffentlich habe ich es jetzt ein bisschen besser erklärt

EDIT2: Persönliche Meinung: Erwägen Sie die Verwendung eines RAIDZ2 (RAID6), da Sie einem Ausfall der doppelten Festplatte standhalten können! Wenn Sie nur noch eine Ersatzfestplatte haben, wird dies niemals falsch sein, aber zwei Festplattenfehler sollten für eine schnelle Reaktion ausreichen. Ich poste gerade mein Skript zur Überwachung des Festplattenstatus hier

Daywalker
quelle
Ich bin mir nicht sicher, ob ich es verstehe. Wollen Sie damit sagen, dass ich die von den VMs verwendeten Dateien als separate Dateien im ZFS-Dateisystem und nicht als Disk-Image speichern soll? Was ist mit Partitionen, Bootsektoren, Attributen, die ZFS nicht kennt, Windows-ACLs in einem Linux-Kontext, ...? Ich verstehe dich entweder falsch oder du antwortest auf etwas anderes als das, was ich frage. Können Sie die Frage bitte erneut lesen und Ihre Antwort bearbeiten, um zu klären, wie mein Problem mit der Speicherleistung behoben wird?
Ein CVn
In Bezug auf Snapshots: Es ist möglicherweise nicht erforderlich, die VM tatsächlich einzufrieren. ZFS verwendet Copy-on-Write (COW). Dies bedeutet, dass Snapshots sofort erstellt werden und Sie ein vollständiges Disk-Image erhalten. Einige Administratoren verwenden dies für MySQL- und PostGRES-Datenbanken, ohne ihre Datenbanken einzufrieren (z. B. keine Ausfallzeiten), während andere die Tabellen zuerst leeren. Wenn Sie die VM einfrieren müssen, sollte die Erstellung des ZFS-Snapshots nur einige Sekunden dauern.
Stefan Lasiewski
Michael Ich denke, Daywalker bezieht sich auf zvols, wo Sie eine Datei erstellen können, die sich wie ein Blockgerät verhält. Ich würde NFS nicht einzelne zvols für VMs verwenden (in diesem Fall sieht es so aus, als ob alles lokal ist, also nur Dateien in den Dateisystemen). Ja, zvols können cool sein, aber sie sind eine zusätzliche Komplikationsebene. Und die ZFS-Snapshots sind per Definition konsistent. Dies bedeutet nicht, dass das Betriebssystem der VM weiß, dass die Daten auf die Festplatte übertragen werden müssen, aber Sie erhalten eine Dateisystemkonsistenz auf demselben Niveau, als hätten Sie die VM nicht mehr mit Strom versorgt.
TheFiddlerWins
Dedup ist sehr ressourcenintensiv. Die Verwendung der Komprimierung ist nicht möglich und (für VMs) wird Ihnen wahrscheinlich aufgrund von Leerzeichen in den VM-Dateisystemen viel Speicherplatz zurückgeben.
TheFiddlerWins
@ MichaelKjörling Bearbeiten Sie einfach meinen Beitrag, in der Hoffnung auf ein besseres Verständnis (auch mit den Kommentaren von TheFiddlerWins und Stefan Lasiewski
Daywalker