Wie ist die Leistung von zfs-E / A-Vorgängen mit ungleich großen Festplatten?

506
satch_boogie

Ich habe (ZOL) ZFS-Pool (kein Spiegel und Raidz) benannt primaryPool

# zfs list NAME USED AVAIL REFER MOUNTPOINT primaryPool 54.5G 41.9G 96K / primaryPool/ROOT 20.0G 41.9G 96K none primaryPool/ROOT/main_root 1.98G 59.9G 1.98G / primaryPool/application 1.26G 60.6G 1.26G /opt primaryPool/boot 96K 41.9G 96K /boot primaryPool/storage 275M 41.9G 275M /opt/movies primaryPool/swap 4.25G 43.4G 2.71G - 

Ich habe eine freie Festplatte mit 1 TB / dev / sdb. Ist es in Ordnung, sie einfach in den Pool hinzuzufügen oder einen anderen Pool hinzuzufügen und die gesamte Festplatte diesem zuzuweisen? Wenn Sie Best Practices von ZFS auf Raidz- oder Mirror-Setups lesen, wird die Verwendung von Datenträgern unterschiedlicher Größe nicht empfohlen. Gibt es negative oder positive Auswirkungen der Verwendung ungleicher Datenträgergrößen in einem Pool mit einem einzelnen vdev (Einzeldatenträger)?

1
Dies wird nicht empfohlen, weil Sie Kapazität verschwenden ... Was möchten Sie erreichen, indem Sie die 1-TB-Festplatte zu einer ~ 100-GB-Festplatte hinzufügen? Hoffen Sie, es als Spiegel hinzuzufügen? Attie vor 6 Jahren 0
@Attie meine Absicht ist nur, die Festplatten zu überspannen (keine Spiegelung) satch_boogie vor 6 Jahren 0
Du kannst es schaffen ... aber ich würde davon abraten. Migrieren Sie diesen Pool entweder auf die neue 1-TB-Festplatte oder führen Sie sie als zwei separate Pools aus. Ich vermute, aufgrund der Größe, die "primaryPool" auf einer SSD ist? Wenn es sich um eine SSD handelt, können Sie sowieso etwas als Cache für die 1-TB-Platte verwenden. Attie vor 6 Jahren 0
Danke, @Attie. Ich sehe, dass es nicht ratsam ist, Festplatten unterschiedlicher Größe in einem Pool hier zu verwenden. http://nex7.blogspot.com/2013/03/readme1st.html, aber ich kann die Erklärung nicht finden satch_boogie vor 6 Jahren 0

1 Antwort auf die Frage

2
Dan

Basierend auf Ihrer Frage und den Kommentaren unten fragen Sie, ob es eine gute Idee ist, einen Pool zwischen zwei ungleich großen Festplatten zu installieren. Die kurze Antwort lautet: Es gibt nichts inhärentes Problem, wenn:

  • Ihre Arbeitslast ist nicht leistungskritisch. Wenn dies der Fall ist, verwenden Sie einen einheitlichen Festplattentyp für den gesamten Pool. Andernfalls könnten die Festplatten unterschiedliche Leistungsmerkmale aufweisen, was zu sehr subtilen Leistungsproblemen führen kann, die schwer aufzuspüren sind. (Nehmen wir zum Beispiel an, Sie haben im selben Jahr zwei 10K-RPM-Festplatten vom selben Hersteller, eine mit 1 TB und eine mit 2 TB. Kein Problem, oder? Nein, eine davon wird ~ bekommen doppelter Durchsatz, obwohl max IOPS zwischen den Laufwerken gleich ist.)
  • Sie sind in Ordnung ohne zusätzliche Redundanz. Beachten Sie, dass Sie in einer Striping-Situation die Wahrscheinlichkeit erhöhen, alle Ihre Daten zu verlieren, weil Sie von der Wahrscheinlichkeit eines Ausfalls einer Festplatte auf die Wahrscheinlichkeit eines Ausfalls von Laufwerk A oder von Laufwerk B (oder beiden) übergegangen sind. Selbst wenn ZFS mehrere Metadatenkopien enthält und eine zufällige Hälfte der Daten fehlt, haben Sie Schwierigkeiten, viele vollständige / verwendbare Dateien aus Ihrem Pool wiederherzustellen.

Es gibt jedoch immer noch unkluge Wege, um dies einzurichten. Wenn eine der Festplatten eine SSD ist und die andere eine HDD ist, zerstört Striping die Leistungsgewinne, die Sie durch die Verwendung einer SSD erzielt haben, und macht Sie wahrscheinlich ziemlich traurig. In dieser Situation würde ich empfehlen:

  1. Verwenden Sie die größere Festplatte als "Hauptdatenfestplatte" und teilen Sie die SSD anschließend in zwei Partitionen auf: Eine große Partition, die als L2ARC ( cache) - Gerät zum Beschleunigen des Lesens häufig gelesener Daten verwendet wird, und eine kleine Partition, die als ZIL verwendet wird ( log) Gerät zur Beschleunigung synchroner Schreiblatenzen. Diese Lösung ist nett, da sie automatisch die vorteilhaftesten Daten auf der SSD zwischenspeichert, sodass Sie sich nicht allzu sehr darüber Gedanken machen müssen. Außerdem verlieren Sie alle Ihre Daten, wenn Sie in diesem Fall die Festplatte verlieren (Sie könnten bis zu ein paar Sekunden Schreibzugriffe verlieren, wenn die SSD stirbt. Das ist jedoch viel besser als alle Ihre Daten, wie im oben genannten gestreiften Fall.) .
  2. Erstellen Sie einen separaten Pool für jede Festplatte, und behalten Sie manuell Dinge, die schnell sein sollen (Betriebssystem, ausführbare Dateien, Bibliotheken, Swap usw.) auf der SSD und auf langsame Weise (Filme, Fotoalben usw.) auf der Festplatte. Dies ist am besten, wenn der Computer häufig neu gestartet wird, da in der L2ARC zwischengespeicherte Daten nicht zwischen Neustarts bestehen bleiben. (Dies ist eine große Schwachstelle in der aktuellen L2ARC-Geschichte für Personal Computer IMO, aber derzeit wird daran gearbeitet.) Aus Sicht der Redundanz verlieren Sie offensichtlich nur das, was auf der Festplatte fehlgeschlagen ist.

- Bearbeiten, da diese Festplatten virtualisiert sind -

Da es sich hierbei um eine virtuelle Maschine handelt, sollten Sie, sofern Sie keine speziellen Parameter für die Leistung der Festplatten festgelegt haben, Sie nicht daran hindern, den Pool mit zwei nicht übereinstimmenden Festplattengrößen zu erstellen. Es ist jedoch viel einfacher zu verwalten, wenn Sie die Größe der Originalfestplatte nur über die Virtualisierungsplattform auf die Summe der vorgeschlagenen Festplattengrößen einstellen. Um diesen zusätzlichen Speicherplatz innerhalb des Gastsystems zu nutzen, müssen Sie ausführen zpool online -e <pool> <disk>, und da dies ZoL ist, müssen Sie möglicherweise zuerst Ihre Partitionstabelle reparieren, wie in den Anweisungen hier beschrieben .

Aufgrund der einfachen Verwaltung sollten Sie diesen Ansatz unbedingt vorziehen. Ein kleiner Nachteil ist jedoch, dass ZFS die Größe des Metaslab nicht ändern kann. Metaslabs sind eine interne Datenstruktur, die für die Plattenspeicherzuordnung verwendet wird. Bis vor kurzem erstellte ZFS unabhängig von der Festplattengröße immer 200 Stück pro Platte (dies ist noch nicht abgeschlossen). Wenn Sie also die Festplattengröße von sehr klein auf sehr groß vergrößern, kann dies zu einer sehr hohen Anzahl von Metaslabs führen, die etwas mehr RAM und etwas mehr Speicherplatz benötigen. Dies ist nicht wahrnehmbar, es sei denn, die Festplattengröße ändert sich dramatisch (z. B. 10G -> 1T) und auch nur dann, wenn Sie Ihre Maschine an die Leistungsgrenze bringen. Die Auswirkungen auf die Leistung können Sie normalerweise umgehen, indem Sie Ihrer VM etwas mehr Arbeitsspeicher zuweisen.

Der Server befindet sich in einer virtualisierten Umgebung (VMware), also denke ich, dass die zugrunde liegende E / A für beide Festplatten gleich wäre satch_boogie vor 6 Jahren 0
Ja, in diesem Fall sollte die Leistung zwischen den Festplatten gleich sein, vorausgesetzt, die beiden Festplatten werden in VMware mit den gleichen Parametern erstellt. Eine andere Lösung: Sie können das vorhandene Gerät wahrscheinlich erweitern, da Sie es sowieso virtualisieren. Nachdem Sie die Größe in VMware vergrößert haben, müssen Sie ZFS mitteilen, dass es die Festplatte um zpool online -e erweitert im Inneren des Gastes Da es sich um ZoL handelt, müssen Sie möglicherweise auch zuerst Ihr Partitionierungsschema festlegen, wie in dieser Anleitung beschrieben: https://www.madboa.com/blog/2017/05/16/vm-expand-zfs/ Dan vor 6 Jahren 0
Gute Antwort, aber ich würde stärker auf den ungleichen Workload-Faktor drängen - vor allem, wenn SSDs verwendet werden und vor allem, wenn eine Festplatte ~ 10x größer ist als die andere. In dieser Situation erhält die (schnelle) SSD ca. 9% der E / A, während die (viel langsamere) HDD ca. 91% der I / O-Leistung zerstört. Attie vor 6 Jahren 0
Wenn die Umgebung von OP virtualisiert ist, sollten beide "_disks_" tatsächlich ein Speichergerät / einen Pool gemeinsam nutzen. Dann wäre es unendlich besser, die ursprüngliche virtuelle Festplatte zu erweitern, anstatt eine zweite virtuelle Festplatte hinzuzufügen. Attie vor 6 Jahren 0