Konfigurieren von Cache in Ihrem ZFS -Pool
Wenn Sie unsere vorherigen Beiträge zu ZFS -Grundlagen durchlaufen haben, wissen Sie inzwischen, dass dies ein robustes Dateisystem ist. Es führt Prüfsummen über jeden Datenblock aus, der auf der Festplatte geschrieben wird, und wichtige Metadaten, wie die Prüfsummen selbst, sind an mehreren verschiedenen Orten geschrieben. ZFS könnte Ihre Daten verlieren, aber es wird Ihnen garantiert nie wieder falsche Daten geben, als wäre es der richtige.
Der größte Teil der Redundanz für einen ZFS -Pool stammt aus den zugrunde liegenden VDEVs. Gleiches gilt für die Leistung des Speicherpools. Sowohl die Lese- als auch die Schreibleistung können sich erheblich durch die Zugabe von Hochgeschwindigkeits -SSDs oder NVME -Geräten verbessern. Wenn Sie Hybridscheiben verwendet haben, bei denen eine SSD und eine Spinnscheibe als einzelnes Stück Hardware gebündelt sind, wissen Sie, wie schlimm die Caching -Mechanismen auf Hardwareebene sind. ZFS ist aufgrund verschiedener Faktoren, die wir hier untersuchen, nichts dergleichen.
Es gibt zwei verschiedene Caches, die ein Pool verwenden kann:
Synchron gegen asynchronen Schreibungen
ZFS versucht wie die meisten anderen Dateisysteme, einen Schreibvorgänge im Speicher zu verwalten und ihn dann auf die Festplatten zu schreiben, anstatt ihn direkt an die Festplatten zu schreiben. Dies ist bekannt als als asynchron Schreiben Sie und es gibt anständige Leistungssteigerungen für Anwendungen, die fehlertolerant sind oder bei denen Datenverlust nicht viel Schaden anrichten. Das Betriebssystem speichert die Daten lediglich im Speicher und teilt der Anwendung mit, die das Schreiben angefordert hat, dass das Schreiben abgeschlossen ist. Dies ist das Standardverhalten vieler Betriebssysteme, auch wenn ZFS ausgeführt wird.
Es bleibt jedoch die Tatsache, dass im Falle eines Systemausfalls oder des Stromverlusts alle gepufferten im Hauptspeicher verloren gehen. Anwendungen, die eine Konsistenz über die Leistung wünschen, können Dateien in Dateien öffnen synchron Modus und dann werden die Daten nur als geschrieben angesehen, sobald sie sich tatsächlich auf der Festplatte befinden. Die meisten Datenbanken und Anwendungen wie NFS verlassen sich ständig auf synchrone Schreibvorgänge.
Sie können die Flagge einstellen: synchronisieren = immer Um synchron zu machen, schreibt das Standardverhalten für einen bestimmten Datensatz.
$ zfs set sync = immer mypool/dataset1Natürlich möchten Sie eine gute Leistung haben, unabhängig davon, ob die Dateien im synchronen Modus sind oder nicht. Hier kommt Zil ins Bild.
ZFS Intent Log (ZIL) und Slog -Geräte
ZFS Intent Log bezieht sich auf einen Teil Ihres Speicherpool.
Standardmäßig wird immer eine kleine Menge Speicher aus dem Pool herausgearbeitet, um wie Zil zu verhalten, auch wenn Sie nur ein paar Spinnscheiben für Ihren Speicher verwenden. Sie können es jedoch besser machen, wenn Sie eine kleine NVME oder eine andere Art von SSD zur Verfügung haben.
Der kleine und schnelle Speicher kann als separates Absichtsprotokoll (oder Slog) verwendet werden, wobei die neu angekommenen Daten vorübergehend gespeichert werden. So fügen Sie ein Slog -Gerät hinzu, führen Sie den Befehl aus:
$ zpool Tankprotokoll ADA3 hinzufügenWo Panzer ist der Name Ihres Pools, Protokoll ist das Schlüsselwort, das ZFS zum Behandeln des Geräts sagt ADA3 als Slog -Gerät. Der Geräteknoten Ihres SSD ist möglicherweise nicht unbedingt ADA3, Verwenden Sie den richtigen Knotennamen.
Jetzt können Sie die Geräte in Ihrem Pool wie unten gezeigt überprüfen:
Möglicherweise befürchten Sie immer noch, dass die Daten in einem nichtflüchtigen Speicher fehlschlagen würden, wenn die SSD fehlschlägt. In diesem Fall können Sie mehrere SSDs verwenden, die sich gegenseitig oder in einer RAIDZ -Konfiguration widerspiegeln.
$ zpool hinzufügen Tankprotokollspiegel ADA3 ADA4Für die meisten Anwendungsfälle sind die kleinen 16 GB bis 64 GB wirklich schnellen und langlebigen Blitzspeicher die am besten geeigneten Kandidaten für ein Slog -Gerät.
Adaptiver Ersatzcache (ARC) und L2ARC
Beim Versuch, die Lesevorgänge zu lehren, ändert sich unsere objektiv. Anstatt sicherzustellen, dass wir eine gute Leistung sowie zuverlässige Transaktionen erzielen, verlagert sich das Motiv von ZFS jetzt zur Vorhersage der Zukunft. Dies bedeutet, dass die Informationen, die eine Anwendung in naher Zukunft erfordern würde.
Dazu wird ein Teil des Hauptspeichers zum Zwischenspeichern von Daten verwendet, die entweder kürzlich verwendet wurden, oder auf die Daten werden am häufigsten zugegriffen. Hier stammt der Begriff adaptiver Ersatzcache (ARC). Zusätzlich zu dem herkömmlichen Lesen, bei dem nur die zuletzt verwendeten Objekte zwischengespeichert werden, achtet der Bogen auch darauf, wie oft die Daten zugegriffen wurden.
L2ARC oder Stufe 2 Bogen ist eine Erweiterung des Bogens. Wenn Sie über ein dediziertes Speichergerät als L2ARC fungieren, speichern Sie alle Daten, die nicht zu wichtig sind, um im Bogen zu bleiben, aber gleichzeitig sind Daten nützlich genug, um einen Ort im langsameren als Memory zu verdienen NVME -Gerät.
So fügen Sie Ihrem ZFS -Pool ein Gerät als L2ARC hinzu. Führen Sie den Befehl aus:
$ zpool add panzer cache ada3Wo Panzer ist der Name Ihres Pools und ADA3 ist der Geräteknotenname für Ihren L2ARC -Speicher.
Um eine lange Geschichte zu verkürzen, puffern ein Betriebssystem häufig Schreibvorgänge im Hauptspeicher, wenn die Dateien im asynchronen Modus geöffnet werden. Dies ist nicht zu verwechseln mit ZFS 'tatsächlichem Schreibcache, Zil.
ZIL ist standardmäßig Teil der nichtflüchtigen Speicherung des Pools. Wenn Sie eine SSD als dediziertes ZIL -Gerät verwenden, wird sie als Slog bezeichnet. Wie bei jedem VDEV kann der Slog in der Spiegel- oder Raidz -Konfiguration sein.
Lesen Sie Cache, das im Hauptspeicher gespeichert ist, als ARC bekannt. Aufgrund der begrenzten RAM -Größe können Sie jedoch immer eine SSD als L2ARC hinzufügen, bei der Dinge, die nicht in den RAM passen, zwischengespeichert werden.