01 Nov 2007, 07:30

RAID Levels

Share

Was bedeutet eigentlich RAID?

Ursprünglich wurde RAID als “Redundant Array on Inexpensive Disks” eingeführt, wobei sich das “Inexpensive” nicht auf die niedere Qualität der einzelnen Platten bezog sondern einfach auf die Tatsache, dass sich mit einem Array von kleineren Platten wesentlich einfacher und günstiger die gewünschte Kapazität erreichen lies als mit einer einzelnen, sehr teuren, Platte.

Später wurde der Begriff in “Redundant Array of Independent Disks” geändert, da sich die Hersteller hiervon Marketingvorteile erhofften.

Wenn man über RAID redet geht man meistens davon aus, dass die Daten gegen den Ausfall einzelner Platten abgesichert sind. Man sollte allerdings nicht vergessen, dass gar nicht jedes RAID-Level zusätzliche Datensicherheit bietet. Um das näher zu Erläutern werde ich auf die einzelnen Level eingehen.

Warum eigentlich RAID?

Jedes Gerät hat eine MTTF, bzw. für jedes Gerät kann eine MTTF, Mean-Time-to-Failure, also die durchschnittliche Zeit bis zu einem Ausfall, ausrechnen. Dieser Wert ist für ein Gerät meistens unveränderlich vorgegeben und nur bedingt maximierbar. Da so ein “Failure” im Normalfall mit dem Verlust der Daten einhergeht versucht man mit eine RAID diese MTTF, bezogen auf das gesamt System, stark zu erhöhen. Dies wird in der Regel realisiert indem man die Redundanz, also die Anzahl der Datenträger auf denen eine “Information” gespeichert ist, erhöht.

Ein weiterer Aspekt ist die Performance, sei es jetzt Read-/Write-Throughput oder Zugriffszeit. Diese ist ebenfalls pro Gerät vorgegeben und auch nur schwer veränderbar (z.B. durch hohe Investitionen). Um den Durchsatz zu erhöhen kann man die Daten auf mehrere Platten verteilen.

RAID 0 - Stripping

Hier werden die Daten über n identische Datenträger verteilt. Je nach Implementierung wird ja 1/n Sektoren auf jede Platte gestiegen. Damit lässt sich die maximale Kapazität aus den Platten rausholen und bei einem guten Controller auch Transferraten von bis zum n-fachen der einzel Platte erreicht werden. Allerdings steigt auch die Ausfallrate, oder MTTDL (Mean Time to Data Loss) von MTTF auf MTTF/n an. Ein kleines Beispiel: Wenn eine einzelne Platte eine MTTF von 5 Jahren hat und ich 10 Platten im System habe ist meine MTTDL nur noch 182.5 Tage oder knapp ein halbes Jahr!

RAID 1 - Mirroring

Dies ist mit die sicherste und einfachste Betriebsart. Es werden einfach alle Daten auf n Platten geschrieben. Damit liegt jeder Sektor n-mal vor und die MTTDL ist etwa MTTFn. Dies wirkt sich sehr positiv auf die Lese-Tranferrate aus die bis zu n(Leserate der Einzelplatte) beträgt, die Schreibrate bleibt allerdings auf die Leserate einer Einzelplatte beschränkt. Intelligente RAID 1 Implementierungen schreiben die Verwaltungsdaten für das RAID an des Ende des Datenträgers, so dass die Daten im Falle eines Falles auch ohne ein RAID fähiges System gelesen werden können. In so einem Fall sollte man natürlich vermeiden auf die Daten schreiben zuzugreifen wenn man es nicht vorher gestet hat, da dies undefinierbare Folgen haben kann.

Dieses Setup wird häufig in Szenarien verwendet wo Verfügbarkeit und ein garantierter Durchsatz wichtiger sind als Effizienz (in Bezug auf den benötigten Speicherplatz).

RAID 2 - ECC, wie bei RAM

In dieser Betriebsart werden die Paritätsdaten wie bei ECC-gesichertem Hauptspeicher gebildet und auf einige zusätzlichen Platten abgelegt. Dadurch bedingt werden bei einer kleinen Anzahl von Platten sehr viele Paritätsplatten benötigt und das System erst ab einer großen Anzahl von Platten effizient. Aus diesem Grund war RAID 2 fast nur bei Großrechnern zu finden und ist heute quasi ohne Bedeutung.

RAID 3 - Bit-interleaved Parity

Bei diesem Verfahren werden die Nutzdaten über alle Platten gleichmäßig verteilt und die Paritätsdaten alle auf eine zusätzliche Platte geschrieben. Dies bringt zwei wichtige Nachteile dieses System. Zum einen muss für jeden Schreibzugriff auf alle Platten, Daten und Parity, zugegriffen werden und für jeden Lesezugriff auf alle Datenplatten. Damit lässt sich zwar ein hoher Durchsatz erzielen, aber für Umgebungen mit vielen Schreib-/Lesezugriffen ist dieses Level weniger geeignet. Die Parity-Disk wird in jedem Fall zum Flaschenhals.

RAID 4 - Block-interleaved Parity

Dieses Level entspricht dem leicht abgewandelten Level 3. Hier werden nicht die Sektoren linear auf die Platten verteilt, sondern in etwas größere Blöcke zusammen gefasst. Dadurch ist es bei einem Schreibzugriff nicht mehr unbedingt notwendig auf jede Platte zuzugreifen. Ansonsten gilt hier das für Level 3 gesagte auch.

RAID 5 - Block-interleaved Distributed Parity

Dies ist die wohl am weitesten Verbreitete RAID Betriebsart da sie den besten Kompromiss aus Effizienz, Platz, Kosten und Sicherheit bietet. Hierbei werden alle Daten, also Nutzdaten und Parity-Daten, linear über alle verfügbaren Datenträger verteilt. Dieses Konzept erlaubt den Ausfall einer einzelnen Platte ohne beeinträchtigung des Gesamtverbundes. Sobald allerdings weiter Platten ausfallen sind alle Daten sofort verloren, da eine Wiederherstellug nicht mehr möglich ist wenn mehr als eine Platte verloren geht. Wer mehr Sicherheit benötigt muss sich RAID 6 anschauen.

Das Konzept von RAID 5 beseitigt den Flaschenhals von Level 3 und 4, da es keine einzelne Platte mehr für die Paritätsdaten gibt.

Für die Paritätsdaten wird eine zusätzliche Platte benötigt. Die Effizienz steigt also mit der Anzahl der Platten im Array deutlich an. Wenn 5 Platten benutzt werden lieft die effektive Kapazität bei 80%, in einem System mit 36 Platte liegt die brutto Kapazität hingeben schon bei 97,2%. Natürlich muss man beachten, dass durch die rechenintensiven Paritätsberechnungen die Performance leiden kann und unbedingt ein leistungsfähiger RAID-Controller benötigt wird.

RAID 6 - Block-interleaved Distributed Parity

Dieses Level ist die logische weiterentwicklung von RAID 5. Hier wird die Datensicherheit mit zwei, versetzten Partitätscodes erhöht, so dass bis zu zwei Platten gleichzeitig ausfallen können. Das Problem hierbei ist hauptsächlich, dass die notwendige Rechenleistung durch die doppelten Paritätscodes stark ansteigt.

Beiden Levels, also 5 & 6, ist, dass sie eher ungeeignet für viele, kleine, Schreibvorgänge sind, da hier ständig auf alle Platten zugegriffen werden muss um die Paritätsdaten zu aktualisieren.

RAID 10 - Hierachical RAID (RAID 0 über RAID 1 Subarrays)

Wie bei allen “zweistelligen” RAID Leveln handelt es sich hierbei um eine Kombination von zwei Subarrays. Die Notation RAID XY steht im allgemeinen dafür, dass zunächst ein RAID X über die einzelnen Subsets von Platten gebildet wird und dann über die gesamten Subarrys ein großen Array mit Level Y. Allerdings muss man ein wenig aufpassen, da einige Hersteller die Notation einfach umdrehen und ein RAID XY mit RAID YX bezeichnen.

Angenommen man will ein RAID 10 über 10 Platten einrichten. Dann gibt es die Möglichkeit zunächst einzelne RAID 1 Arrays über je zwei (oder mehr) Platten zu erzeugen und dann ein RAID 0 Array über die Subarrays oder aber zwei RAID 0 Arrays über jeweils 5 Platten und danach ein RAID 1 Array über alles.

Es ist ganz wichtig, dass man sich klarmacht, dass es ein Unterschied ist ob man zunächst ein RAID 1 und dann ein RAID 0 anleget oder anders herum. Im einen Fall können bis zu fünf Platten ausfallen, im zweiten (bei RAID 0+1) maximal 2!

Warum?

In den zwei Subarrays (mit Level 0) des RAID 0+1 darf keine Platte ausfallen oder das ganze Subarray ist verloren. Sobald dann eine Platte aus dem anderen Subarray ausfällt ist das ganze System down. Natürlich reichen im RAID 10 auch schon zwei Plattenausfälle um das ganze System lahm zu legen, aber hier ist es deutlich unwahrscheinlicher, da die Platten in “kleine” RAID 1 Arrays zusammengefasst werden und auch beim Ausfall der fünften fehlerhaften Platte die Daten noch vorhanden sind - solange nicht zwei im gleichen Subarray ausfallen.

RAID 50 - Hierachical RAID (RAID 0 über RAID 5 Subarrays)

Hier werden zunächst zwei RAID 5 über jeweils n Platten angelegt und diese dann zu einem RAID 0 zusammengefasst. Eine eher teure und aufwendige Konstruktion.

RAID 0+5 - Hierachical RAID (RAID 5 über RAID 0 Subarrays)

Hier werden zunächst jeweils zwei (oder mehr) Platten zu RAID 0 Subarrays zusammen gefasst und dann über diese Subarrays ein großes RAID 5 erstellt.

RAID 0+1 - Hierachical RAID (RAID 1 über RAID 0 Subarrays)

Hier werden über die hälfte der Platten RAID 0 Arrays angelegt und diese Subarrays dann zu einem RAID 1 zusammengefasst.

Siehe auch RAID 10.

JBOD - Just a bunch of Disks

Obwohl eigentlich kein RAID, wird JBOD, gerade von moderne, günstigen, RAID-Controllern in einem Atemzug mit RAID genannt. Eigentlich ist es ähnlich zu RAID 0. Doch anstelle die einzelnen Blöcke gleichmäßig auf die Platten zu verteilen werden die Platten einfach aneinander gehängt. JBOD ist dann von vorteil wenn man viele unterschiedliche Platten hat und einfach eine große Menge von zusammenhängenden Speicher ohnd jede Verfügbarkeitsgarantie benötigt. Allerdings existieren in Zeiten von LVM & Co. hier auch noch (bessere) Möglichkeiten.

Ende

Ich hoffe hiermit einen Überblick über die verfügbaren RAID Levels gegeben zu haben.