ZFS-Streifen über Hardware-RAID 6. Was könnte möglicherweise schief gehen?

9

Ich habe 36 * 4 TB HDD SAN Rack. Der RAID-Controller unterstützte RAID60 nicht und nicht mehr als 16 Festplatten in einer RAID-Gruppe. Also habe ich beschlossen, 2 RAID6-Gruppen mit 16HDD oder 4 von 8 HDDs zu erstellen. Ich möchte den gesamten Speicher als eine Partition erhalten.

Was könnte also schief gehen, wenn ich zfs pool auf Hardware-RAID6 verwende? Ja, ich weiß, dass es dringend empfohlen wird, native Festplatten oder den Pass-Through-Modus zu verwenden. Aber ich habe diese Option nicht.

Oder sollte ich mich in dieser Situation von ZFS und Software-Raids fernhalten? (Ich interessiere mich hauptsächlich für Komprimierung und Schnappschüsse)

Severgun
quelle
2
Wenn Sie ZFS verwenden möchten, können Sie dann alle Festplatten einzeln verfügbar machen (manchmal auch als HBA-Modus bezeichnet) und ZFS damit umgehen lassen - es ist das, was es am besten kann. Wir haben eine Reihe von echten Experten (zunächst ewwhite), die Ihnen dabei helfen werden - welchen genauen Festplattencontroller verwenden Sie?
Chopper3
1
Mit dieser Methode werden Sie viele ZFS-Funktionen untergraben, aber insgesamt wird es nichts schaden, dies auf diese Weise zu tun. Die Prüfsumme ist in dieser Konfiguration etwas nutzloser, da der RAID-Controller alle Festplattendetails abstrahiert. Mich interessiert mehr, warum Sie sagen, dass Sie JBOD nicht verwenden können. Assuredsan 3530 sind JBOD-fähige Einheiten.
Spooler
2
Ich würde auf ewwhite warten - er ist in Zentral-USA, schläft also, aber er kennt ZFS besser als jeder andere, den ich kenne
Chopper3
1
@Severgun Auch 4 Festplatten bleiben unbrauchbar, da kein Hotspare erforderlich ist. Glauben Sie wirklich, dass es für ein RAID-Array mit einem ausgefallenen Laufwerk besser ist, im herabgesetzten Modus zu humpeln, als automatisch ein Ersatzlaufwerk aufzunehmen, es neu zu erstellen und wieder vollständig zu installieren? Funktionsstatus?
Andrew Henle
1
@ Chopper3 Ich antworte ... widerwillig.
ewwhite

Antworten:

5

Also habe ich beschlossen, 2 RAID6-Gruppen mit 16HDD oder 4 von 8 HDDs zu erstellen.

Das ist nicht der beste Weg, Dinge zu tun. Es funktioniert möglicherweise gut genug, hängt jedoch möglicherweise nicht von Ihren Leistungsanforderungen ab.

Die ideale Größe für ein RAID5 / 6-Array ist so, dass ein genaues Vielfaches der Datenmenge, die das Array "überspannt", mit der Blockgröße des darauf aufgebauten Dateisystems übereinstimmt.

RAID5 / 6-Arrays arbeiten als Blockgeräte - ein einzelner Datenblock überspannt die Festplatten im Array, und dieser Block enthält auch Paritätsdaten. Die meisten RAID-Controller schreiben einen Datenblock mit einer Größe von zwei auf jede Festplatte im Array, deren genauer Wert in besseren RAID-Systemen konfiguriert werden kann, und Ihre Dot Hill-Einheit ist eines dieser "besseren RAID-Systeme". Das ist wichtig.

Es dauert also N x (Datenmenge, die pro Plattenblock gespeichert ist), um das Array zu überspannen, wobei N die Anzahl der Datenplatten ist. Ein RAID5-Array mit 5 Festplatten verfügt über 4 "Daten" -Datenträger, und ein RAID6-Array mit 10 Laufwerken verfügt über 8 Datenfestplatten.

Denn wenn Daten in ein RAID5 / 6-Array geschrieben werden und der Datenblock so groß ist, dass er das gesamte Array umfasst, wird die Parität für diese Daten berechnet - normalerweise im Speicher des Controllers - und dann wird der gesamte Streifen in das RAID5 / 6-Array geschrieben Platte. Einfach und schnell.

Was muss der RAID-Controller tun, um die neuen Paritätsdaten zu berechnen, wenn der zu schreibende Datenblock nicht groß genug ist, um das gesamte Array zu überspannen? Denken Sie darüber nach - es werden alle Daten im gesamten Streifen benötigt, um die neuen Paritätsdaten neu zu berechnen.

Wenn Sie also ein RAID6-Array mit 16 Laufwerken mit dem Standardblock pro Festplatte von 512 KB erstellen, bedeutet dies, dass 7 MB erforderlich sind, um das Array zu "überspannen".

ZFS arbeitet im Allgemeinen in 128-KB-Blöcken.

ZFS schreibt also einen 128-KB-Block - in ein RAID6-Array mit 16 Laufwerken. In der von Ihnen vorgeschlagenen Konfiguration bedeutet dies, dass der RAID-Controller fast 7 MB aus dem Array lesen und die Parität über diese 7 MB neu berechnen muss. Schreiben Sie dann die gesamten 7 MB zurück auf die Festplatte.

Wenn Sie Glück haben, befindet sich alles im Cache und Sie erzielen keinen großen Leistungseinbruch. (Dies ist ein Hauptgrund, warum die Position "RAID5 / 6 nicht verwenden" eine solche Anhängerschaft hat - RAID1 [0] leidet nicht darunter.)

Wenn Sie Pech haben und Ihre Dateisystempartitionen nicht richtig ausgerichtet haben, umfasst dieser 128-KB-Block zwei RAID-Streifen, die sich nicht im Cache befinden, und der Controller muss 14 MB lesen, die Parität neu berechnen und dann 14 MB schreiben. Alle, um einen 128-KB-Block zu schreiben.

Das muss logisch geschehen . Es gibt viele Optimierungen, die gute RAID-Controller vornehmen können, um die E / A und die Rechenlast solcher E / A-Muster zu reduzieren. Daher ist dies möglicherweise nicht so schlimm.

Unter der hohen Last, 128-KB-Blöcke an zufällige Speicherorte zu schreiben, besteht jedoch eine gute Chance, dass die Leistung eines RAID6-Arrays mit 16 Laufwerken und einer Stripe-Größe von 7 MB absolut schrecklich ist.

Für ZFS hätten die "idealen" zugrunde liegenden RAID5 / 6-LUNs für ein Allzweck-Dateisystem, bei dem die meisten Zugriffe effektiv zufällig sind, eine Stripe-Größe, die einen geraden Teiler von 128 KB aufweist, z. B. 32 KB, 64 KB oder 128 KB. In diesem Fall wird die Anzahl der Datenfestplatten in einem RAID5 / 6-Array auf 1 begrenzt (was unsinnig ist - auch wenn die Konfiguration möglich ist, ist es besser, nur RAID1 [0] zu verwenden), 2, 4 oder 8. Beste Leistung Im besten Fall wäre es, eine Stripe-Größe von 128 KB für die RAID5 / 6-Arrays zu verwenden. Im besten Fall kommt dies jedoch nicht häufig in Allzweck-Dateisystemen vor - häufig, weil Dateisysteme keine Metadaten wie diese speichern Dateidaten speichern.

Ich würde empfehlen, entweder RAID5-Arrays mit 5 Festplatten oder RAID6-Arrays mit 10 Festplatten einzurichten, wobei die Blockgröße pro Festplatte so klein eingestellt ist, dass die Datenmenge für einen gesamten Array-Streifen 64 KB beträgt (ja, ich habe dies getan vorher für ZFS - viele Male). Dies bedeutet, dass für ein RAID-Array mit 4 Datenfestplatten die Blockgröße pro Festplatte 16 KB betragen sollte, während für ein RAID-Array mit 8 Datenfestplatten die Blockgröße pro Festplatte 8 KB betragen sollte.

Dann lassen Sie ZFS die verwenden gesamte Array - Sie nicht partitionieren. ZFS richtet sich ordnungsgemäß an einem gesamten Laufwerk aus, unabhängig davon, ob es sich bei dem Laufwerk um eine einfache einzelne Festplatte oder ein RAID-Array handelt, das von einem RAID-Controller bereitgestellt wird.

In diesem Fall und ohne Kenntnis Ihrer genauen Speicherplatz- und Leistungsanforderungen würde ich empfehlen, drei RAID6-Arrays mit 10 Laufwerken oder sechs RAID5-Arrays mit 5 Laufwerken und einer Streifengröße von 64 KB einzurichten, ein paar Hotspares zu konfigurieren und vier Ihrer Ersatzteile zu speichern Festplatten für alles, was in Zukunft auftaucht. Weil etwas wird.

Ich würde dieses Festplattensystem mit Sicherheit nicht im JBOD-Modus verwenden - es ist ein vollständig NEBS Level 3-kompatibles Gerät , das einen erheblichen Zuverlässigkeits- und Verfügbarkeitsschutz bietet, der direkt in die Hardware integriert ist. Werfen Sie das nicht weg, nur weil "ZFS !!!!". Wenn es sich um ein billiges Stück Hardware handelt, das Sie aus Teilen zusammengesetzt haben? Ja, der JBOD-Modus mit ZFS, der das RAID handhabt, ist am besten - aber das ist NICHT die Hardware, die Sie haben. NUTZEN Sie die Funktionen der Hardware.

Andrew Henle
quelle
Dies bedeutet, dass für ein RAID-Array mit 4 Datenfestplatten die Blockgröße pro Festplatte 16 KB betragen sollte, während für ein RAID-Array mit 8 Datenfestplatten die Blockgröße pro Festplatte 32 KB betragen sollte. Ich bin ein bisschen verwirrt mit dieser Mathematik. Warum 8 Festplatten - 32kB Chunk? Korrigieren Sie mich, wenn ich falsch liege: 128 kB (ZFS-Block) / 3 (RAID-Arrays) = 43 kB pro RAID-Array. RAID6 von 10 Festplatten 43 KB / 8 = 5 KB (nicht verfügbare Blockgröße) Die nächstgelegene 8 KB-Blockgröße ist auch von der Hardware nicht verfügbar. Also, beste Leistung nicht zugänglich?
Severgun
@Severgun Ich habe die Chunk-Größen rückwärts gestellt. Das Problem beim Streben nach der absolut besten Leistung unter RAID5 / 6 besteht darin, dass dies nur dann der Fall ist, wenn fast alle E / A-Vorgänge perfekt mit der Stripe-Größe des RAID-Arrays übereinstimmen. Eine erhebliche Anzahl von E / A-Vorgängen, die kleiner als die Streifengröße sind, kann die Leistung erheblich beeinträchtigen. Wenn Sie eine kleinere Blockgröße wählen, können Sie die Auswirkungen zufälliger Schreibvorgänge mit kleinen Blöcken begrenzen. Nach meiner Erfahrung ist es besser, 1-2% der möglichen maximalen Leistung aufzugeben, um den Worst-Case-Abfall zu begrenzen. Allzweck-Dateisysteme weisen in der Regel eine gute Anzahl kleiner Schreibvorgänge auf.
Andrew Henle
(Forts.) 8 Datenfestplatten in einem RAID5 / 6-Array mit einer Blockgröße von 16 KB pro Festplatte ergeben eine Streifengröße von 128 KB im gesamten Array. Ebenso 32-KB-Blöcke für ein 4-Daten-Festplatten-Array. ZFS schreibt einen 128-KB-Dateidatenblock auf ein einzelnes Gerät - er ist nicht auf alle zdevs aufgeteilt. Für ein Allzweck-Dateisystem wird es jedoch wieder viele Schreibvorgänge unter 128 KB geben, sodass eine kleinere Stripe-Größe (64 KB) Leistungseinbußen bei hoher Schreiblast besser vermeidet, jedoch im besten Fall zu geringen Kosten. Fallleistung.
Andrew Henle
4

Okay, ich werde beißen ...

Dies ist die falsche Hardware für die Anwendung. Das DotHill-Setup unterliegt denselben Einschränkungen wie ein HP StorageWorks MSA2000 / P2000, da nur 16 Laufwerke in einer einzelnen Array-Gruppierung verwendet werden können.

ZFS auf Hardware-RAID oder einer exportierten SAN-LUN ist nicht unbedingt ein Problem.

Das Striping von ZFS-LUNs über unbekannte Verbindungen über das Erweiterungsgehäuse kann jedoch ein gewisses Risiko mit sich bringen.

  • Führen Sie beispielsweise Multipath-SAS in einer Ringtopologie mit zwei Controllern aus?
  • Haben Sie eine redundante Verkabelung zum Server?
  • Haben Sie Laufwerke vertikal über Gehäuse verteilt, um den Ausfall eines einzelnen Gehäuses / Kabels / Controllers zu verringern und zu verhindern, dass ein Teil Ihres RAID0-Streifens zerstört wird?

Im Ernst, es kann sich lohnen zu prüfen, ob Sie den gesamten Speicher in einem einzigen Namespace benötigen ...

Wenn Sie diese Art von Kapazität in einer einzigen Halterung benötigen, sollten Sie ein dediziertes HBA-angeschlossenes JBOD-Gehäuse und möglicherweise mehrere Headunits mit stabiler Verkabelung und einem intelligenteren Layout verwenden.

ewwhite
quelle
1

Sie sollten alle Laufwerke DIREKT an eine Box anschließen, auf der ZFS ausgeführt wird. Holen Sie sich einen SAS-HBA und verbinden Sie die Laufwerke mit der ZFS-fähigen Box (z. B. mit OmniOS oder SmartOS). Sie können den Speicherplatz dann über NFS, SMB, iScsi ...

Tobi Oetiker
quelle
Sie sollten alle Laufwerke DIREKT an eine Box anschließen, auf der ZFS ausgeführt wird. Nicht unbedingt - das Ersetzen fehlerhafter Laufwerke in einem Hardware- Array auf einigen Controllern ist einfach : Ziehen Sie die Festplatte heraus, während die Fehleranzeige leuchtet, und legen Sie eine neue ein. Es ist kein Systemadministrator erforderlich, um ZFS-Befehle auszuführen, um das Laufwerk zu ersetzen. In einem Unternehmens-Setup mit Hunderten oder Tausenden von Servern und möglicherweise Zehntausenden von Festplatten, die auf mehrere Rechenzentren verteilt sind, ist dies ein Problem. Laufwerke versagen viel mehr als Bit Rot.
Andrew Henle
@Tobi Oetiker sagen mir, wie man 36 3,5 "Festplatten in 2U Fall
legt
Wir haben sie einfach in eine zusätzliche Box gelegt ... verwenden Sie einen Sas Extender ... wie bei großen Bereitstellungen, fragen Sie vielleicht, wie fröhlich es ist, damit umzugehen.
Tobi Oetiker
@AndrewHenle Um fair zu sein, ist es möglich, mit ZFS und den richtigen HBAs das gleiche einfache Austauschverfahren und die gleichen Status-LEDs zu erzielen (kann einige kleinere Skripte erfordern, wenn keine vorgefertigte Lösung verwendet wird).
user121391
0

Der Grund, warum ZFS über logischen HW-RAID-Volumes liegt, ist eine SEHR SCHLECHTE Idee, da ZFS Zugriff auf Blockebene benötigt, um tatsächlich ordnungsgemäß zu funktionieren. Ja, es kann verwendet werden, aber die Funktionalität ist erst dann vollständig, wenn Sie Laufwerke über einen HBA oder direkte SATA-Verbindungen direkt an das Betriebssystem anschließen. Ein Beispiel ist, dass ZFS in der von Ihnen vorgeschlagenen Konfiguration Ihre Daten nicht angemessen vor Änderungen der folgenden Daten (auf der anderen Seite des HW-RAID-Controllers) schützen kann und daher die Sicherheit Ihrer Daten nicht gewährleisten kann . Dies ist einer der Hauptgründe, warum ZFS verwendet wird, und es ist außerdem superschnell.

ZFS ist eine großartige Technologie, und ich kann sie nur empfehlen. Sie müssen Ihre Struktur hier jedoch erneut überprüfen, um sie korrekt verwenden zu können. ZFS muss nämlich die logischen Volumes (vdevs) direkt von den Festplatten erstellen.

Es hört sich so an, als müssten Sie noch viel mehr über die Funktionsweise von ZFS lesen, bevor Sie genau verstehen können, was Sie vorgeschlagen haben, im Gegensatz zu dem, was stattdessen wirklich getan werden sollte.

BloodyIron
quelle
Ja ja und ja. Ich verstehe, wie ZFS so gut wie möglich funktioniert. Es gibt jedoch einige Komplikationen: 1) Ich habe bereits ein SAN-Gehäuse und muss es verwenden. Ich baue keinen Speicher von Grund auf neu. 2) Dies ist nicht mein Heim-NAS, auf dem ich Dinge kaufen und wegwerfen kann. 3) Das Budget für die Neuerstellung der Speicherkonfiguration ist gleich Null . Aus dem Speicher benötige ich die maximal verfügbare Schreibgeschwindigkeit mit einem Speicherplatz von ca. 100 TB. Ich schaue auf ZFS hauptsächlich wegen Komprimierung und Schnappschüssen. Ich kann btrfs ausprobieren, aber es ist experimentell. Hmm kann ZoL auch instabil sein? Ich weiß nicht.
Severgun
@Severgun Solange Sie wissen, was die Nachteile sind, werden Sie meiner Meinung nach in Ordnung sein. ZFS hat viele nette Funktionen (wie Schnappschüsse), die unabhängig von anderen funktionieren. Die meisten Ratschläge im Internet betonen die Bedeutung von Best Practices in allen Bereichen, aber es handelt sich um Empfehlungen, nicht um strenge Anforderungen. Dieser Punkt wird in Zukunft an Bedeutung verlieren, da immer mehr LInux-Distributionen auf ZFS umgestellt werden und die meisten Linux-Systeme virtualisiert ausgeführt werden, sodass sie genau Ihrer Situation entsprechen.
user121391
1
Der Grund, warum ZFS über logischen HW-RAID-Volumes liegt, ist eine SEHR SCHLECHTE Idee, da ZFS Zugriff auf Blockebene benötigt, um tatsächlich ordnungsgemäß zu funktionieren. Das ist so schlimm, dass es nicht einmal gut genug ist, um falsch genannt zu werden. Sie haben anscheinend keine Ahnung, was eine NEBS 3-kompatible Hardware bedeutet, oder? Außerdem ist es superschnell. ZFS ist viele gute Dinge. "super duper fast" ist NICHT einer von ihnen. Dies ist ein schnelles Dateisystem. So ist das auch . In Dateisystemen ist ZFS nicht schnell.
Andrew Henle