R A I D (Redundant Array of Indipendent Disks) =============================================== 1- Konzepte Unter dem Oberbegriff RAID fasst man Technologien zusammen, die mehrere Laufwerke zu grösseren, teilweise auch ausfallsicheren Gesamtsystemen zusammenpacken. RAID steht dabei für R edundant A rray of I ndependent D isks, wobei oft statt independent "inexpensive" genannt wird. Ausfallsicher bedeutet, dass der Ausfall eines Einzellaufwerks weder zu einem Ausfall des Gesamtsystems noch zu Betriebsunterbrechung oder gar zu Datenverlust führt. RAID schliesst oft verwendete Technologien wie Mirroring (d.h. Spiegelung von zwei oder mehreren Laufwerken an einem Controller), Duplexing (dito, aber mit zwei getrennten Controllern) und Striping (Zusammenfassen von mehreren Laufwerken als logische Einheit und blockweises Verteilen der Daten auf diese Laufwerke) ein. Unterschiedliche Level von RAID werden in der Literatur diskutiert. Die Bezeichnung Level in der RAID-Bezeichnung ist eigentlich missverständlich, denn RAID Level 3 baut keinesfalls auf RAID Level 2 auf. Statt Level sollte man eigentlich besser Typ sagen. Bevor auf die einzelnen RAID-Level genauer eingegangen wird, folgen einige grundlegende Überlegungen zu Plattenzugriffen, denn die Änderung der Performance beim Schritt vom Einzellaufwerk zu RAID ist stark abhängig von der Anwendung: Wichtig ist der Mix zwischen Schreib- und Lesezugriffen und die durchschnittliche Länge eines einzelnen Transfers. Bei einem Einzelplattenlaufwerk ist ein Lesezugriff (Caches, read-ahead-Buffer und andere Techniken zur Performancesteigerung sollen vorläufig ausser Betracht bleiben) gleich schnell wie ein Schreibzugriff. Dies ist bei Plattenarrays keinesfalls so und auch von Level zu Level unterschiedlich. Geschwindigkeitsunterschiede gibt es auch von kurzen (meist einer oder ganz wenige Blöcke) zu langen Requests (meist mehrere hundert Blöcke). Der erste Typ kommt vor allem in Datenbankanwendungen, Transaction Processing Systemen und kommerziellen Multiuser-Anwendungen vor. Der zweite Typ ist in der Regel bei Bildverarbeitung, Einsatz von Supercomputern oder technisch/ wissenschaftlicher Datenerfassung zu finden. Jedes der weiter unten diskutierten RAID-Konzepte hat eine andere Charakteristik bei langen bzw. kurzen Requestlängen. RAID ist keine Lösung für alle Arten von Problemen mit dem Plattendurchsatz. RAID ist keinesfalls immer schneller als der Einsatz von (konventionell genutzten) Einzellaufwerken. Auch beim Einsatz einer der nachfolgend beschriebenen RAID-Typen sollte man die Aufteilung der Daten optimieren. Aus der Regel, dass man auf wenige Daten sehr häufig und auf die meisten Daten sehr selten zugreift folgt: Sinnvoll ist ein hierarchisches System mit Halbleiterspeicher (z.B. RAM-Disk) für ständig benutzte Daten, ein sehr schneller Massenspeicher (eventuell gespiegelt) für oft genutzte, einen durchschnittlich schnellen und grossen Massenspeicher (z.B. RAID) für weniger oft genutzte Daten und einen Archivspeicher (z.B optische Platten mit automatischem Wechsler) für selten benutzte Daten. RAID Level 0 Dieser Typ von RAID steht für Striping. Bei diesem Verfahren werden mehrere kleinere Laufwerke zu einem grossen logischen Laufwerk zusammengefasst. Der Striping-Faktor sagt dabei aus, wie gross die Stücke sind, welche jeweils auf eines der Laufwerke geschrieben werden. Sind die Stücke sehr klein (typisch ein Byte), so erreicht man unabhängig von der Länge des Lese- oder Schreibrequests eine wesentliche Erhöhung der Transferrate, da alle Laufwerke in einem RAID-0-Set praktisch gleichzeitig transferieren. Bei kurzen Schreibrequests (z.B. Einzelblöcke) hat diese Technik Nachteile: Kürzt man die physikalische Länge der Blöcke auf der Platte (bei 512 Byte Blöcken und vier Laufwerken z.B. nur 128 Bytes lang), vermindert sich die nutzbare Kapazität durch den zusätzlichen Platz für Blockheader. Lässt man die Länge der physikalischen Blöcke bei der Standardlänge, hat man zwar keinen Kapazitätsverlust, aber es muss beim Schreiben eines einzelnen Blocks erst auf allen Platten jeweils derjenige physikalische Block gelesen werden, in dem Teile des zu schreibenden Blocks stehen. Die Teilinformation muss ersetzt werden, dann erst können alle beteiligten Blöcke wieder auf die Platten zurückgeschrieben werden. RAID-0 mit kleinem Striping-Faktor bietet den Vorteil der hohen Transferrate beim Schreiben und Lesen von langen Requests, hat aber wesentliche Nachteile in der Leistung bei kurzen Requests. Vergleicht man RAID-0 nicht mit einem (entsprechend grösseren) Einzellaufwerk, sondern mit mehreren kleineren Laufwerken, die ja kurze Requests überlappt abarbeiten können, wird der Nachteil von RAID-0 noch deutlicher. Wählt man den Striping-Faktor nun gross (mehrere Blöcke), erreicht man, dass sowohl die Schreib- als auch die Leseperformance bei kurzen Transfers mit der eines Einzelplattenlaufwerks vergleichbar bleibt. Auch ist es möglich, mehrere kurze Requests gleichzeitig auf unterschiedlichen Platten abzuarbeiten. In beiden Fällen bleibt jedoch der Nachteil, dass bei Ausfall eines einzelnen Laufwerks auf die gesamten Daten nicht mehr zugegriffen werden kann. RAID-0 (Striping) ist eigentlich kein RAID (keine erhöhte Datensicherheit). Host-Based Striping gibt es bei vielen Betriebssystemen als Softwarelösung oder auch eingebaut im Plattencontroller. Da die Plattenlaufwerke vom Controller oftmals nur über einen Datenkanal angesprochen werden, kommt bei einer Controllerlösung meist der Vorteil der höheren möglichen Datenübertragung nicht zum Tragen, da die Requests auf den einzelnen Laufwerken doch sequentiell und nicht parallel abgearbeitet werden. RAID Level 1 RAID-1 bedeutet Mirroring. Hier werden alle Daten einer Platte (oder auch eines RAID-0-Sets wie in der Beispielzeichnung, oft RAID-10 oder RAID 0+1 genannt) auf eine zweite (bzw. ein zweites RAID-Set) geschrieben. Vorteil: bei Ausfall einer Platte bleiben die Daten weiter zugreifbar. Die Leistung beim Schreiben bleibt der einer bleibt der einer Einzelplatte bzw. RAID-0 gleich, geht man davon aus, dass die zusätzliche Rechnerbelastung durch doppeltes Schreiben nicht zählt. Die Leseleistung verdoppelt sich im besten Fall, da jetzt die Requests auf zwei Plattenlaufwerke (bzw. zwei Sets) aufgeteilt werden können, die unabhängig voneinander lesen können. Aber: die Kosten für RAID-1 sind hoch: nur die Hälfte des verfügbaren Platzes steht für die Originaldaten zur Verfügung, die andere Hälfte wird durch redundante Daten verbraucht. Jedoch ist RAID-1 einfach zu implementieren. Mirroring (von Einzelplatten) gibt es als Controller-Lösung oder als Softwarelösung für unterschiedliche Betriebssysteme. RAID Level 2 RAID-2 verwendet denselben Algorithmus ( ECC - E rror C orrection C ode), den man auch bei fehlerkorrigierenden Hauptspeichern oder innerhalb von Plattenblöcken zur Fehlererkennung und Fehlerkorrektur verwendet. Hier werden mehrere Laufwerke um Fehlerkorrektur-Laufwerke ergänzt. Wie bei RAID-0 werden die Daten bitweise auf die Laufwerke des Stripe-Sets aufgeteilt. Zusätzlich werden die ECC-bits auf ECC-Laufwerke geschrieben. Die in den Literaturbeispielen meist genannten Grössen sind 10 Datenlaufwerke und 4 ECC-Laufwerke. Vorteil dieser Lösung ist, dass auch bei gleichzeitigem Ausfall von zwei Laufwerken die Daten nicht verloren sind. Bezüglich der Leseperformance gilt dasselbe wie bei RAID-0. Auch die Schreibperformance bei langen Transfers ist gut. Bei kurzen Transfers allerdings muss vor jedem Schreiben erst ein Lesen der beteiligten Blöcke aller Laufwerke stehen, um die neue ECC-Information berechnen zu können. RAID-2 wird deswegen normalerweise als absoluter Overkill angesehen. RAID Level 3 RAID-3 geht wieder einen Schritt zurück und ersetzt die ECC-Plattenlaufwerke durch ein einzelnes Parity-Laufwerk. Die Leistung bei Lesezugriffen ist bei langen Transfers wegen der hohen erreichbaren Transferrate sehr gut. Der Striping-Faktor ist ein einzelnes Byte. Kurze Lesezugriffe sind (unter der Voraussetzung von Spindelsynchronisation) so schnell wie auf einem einzelnen Laufwerk. Nachteil ist die schlechtere Schreibperformance. Dem Schreibzugriff gehen bei kurzen Zugriffen mehrere Lesezugriffe voraus: Erst müssen alle pysikalischen Datenblöcke auf allen Platten gelesen werden, um den zu schreibenden Block einzubauen. Zusätzlich muss die Parity Information errechnet und geschrieben werden. Ein einzelner Schreibzugriff zerfällt also in mehrere (hintereinander ablaufende) Lese- und Schreibzugriffe. Die Schreibperformance bei RAID-3 ist extrem schlecht. Die Leseperformance ist bei langen Zugriffen sehr gut, bei kurzen dagegen nicht besser als bei einzelnen Laufwerken. Allerdings muss man bedenken: Bei einem einzelnen Laufwerk ist normalerweise die Anzahl der Zugriffe pro Zeiteinheit viel geringer als bei einem RAID-Set mit höherer Kapazität. Betrachtet man die Anzahl der möglichen Zugriffe pro Megabyte und Zeiteinheit, so schneidet RAID-3 beim Lesen nur bei langen Transfers gut ab. Lesen von kurzen Transfers und Schreiben generell ist langsamer als bei einzelnen Laufwerken. RAID Level 4 RAID-4 entspricht RAID-3, nur mit einem Striping-Faktor von einem Block (oder auch mehr). Vorteil: Lesezugriffe weniger Blöcke müssen nicht auf alle Platten zugreifen, sondern nur auf das Laufwerk, das tatsächlich den oder die wenigen Blöcke gespeichert hat. Es können mehrere solcher Zugriffe parallel abgearbeitet werden. Auch Schreibzugriffe auf einzelne Blöcke sind schneller: Es muss nur der alte Datenblock und der Parity-Block gelesen werden. Durch Subtraktion der alten Daten von der Parity-Information und Addition der neuen Daten kann die neue Parity errechnet werden, ohne dass man die anderen Daten kennen muss. RAID-4 bietet also eine bessere Performance bei kurzen Zugriffen. Betrachtet man allerdings wieder die Leistung pro Megabyte und pro Zeiteinheit, ist auch RAID-4 beim Schreiben mehreren Einzellaufwerken deutlich unterlegen. RAID Level 5 Bei RAID Level 3 und 4 muss bei jedem Schreibzugriff auf die Parity-Disk zugegriffen werden. Dieses Laufwerk wird damit der Flaschenhals in diesem System. RAID-5 verteilt Parity und Daten blockbereichsweise auf alle Laufwerke. Jedes Laufwerk ist damit für einen bestimmten Blockbereich Parity-Laufwerk. Lesezugriffe werden etwas schneller, weil sie auf noch mehr Laufwerke verteilt werden können. Bei kurzen Transfers ist aber auch RAID-5 auf der Basis von Zugriffen pro Zeiteinheit pro Megabyte einem Einzellaufwerk weit unterlegen. RAID-3, 4 und 5 brauchen nur etwa 10 - 20 % der Datenmenge für die Redundanz. RAID-2 dagegen braucht etwa 30 %, RAID-1 sogar 50 %. 2- Implementation Wo wird RAID nun implementiert? Es gibt zwei Möglichkeiten: Entweder in einem Controller, der zwischen dem Rechner und den Laufwerken sitzt (als Karte im Rechner oder in einer separaten Box) (Hardware RAID) oder im Hostrechner selbst (Software RAID). Vorteil der ersten Lösung: Keine zusätzliche Belastung des Rechners durch die Verwaltung von RAID. Vorteil der zweiten Lösung: Da in diesem Falle nicht alle Daten durch den Flaschenhals RAID-Controller zum Hostrechner müssen, kann eine höhere Datentransferrate durch die gleichzeitige Verwendung mehrerer Übertragungspfade erreicht werden. Eine Reihe von Herstellern (sowohl Plattenlaufwerks- als auch Controllerhersteller) bieten RAID-Implementierungen an. Diese Implementierungen unterscheiden sich in folgenden technischen Eigenschaften: Einfachere Implementierungen schliessen mehrere Laufwerke an einen SCSI-Bus an und fassen diese unter Verwendung von einem RAID- oder RAID-ähnlichen Konzept zusammen. Andere Implementierungen haben pro Plattenlaufwerk einen eigenen Controller, sie erhöhen dadurch die Ausfallsicherheit, da selbst bei Ausfall des Controllers die Daten weiter zugreifbar bleiben. Laufwerke können konventionell fest eingebaut werden. Es ist jedoch besser, wenn auch teurer, die einzelnen Laufwerke so einzubauen, dass sie im laufenden Betrieb ausgewechselt werden können und somit der Datenzugriff nicht unterbrochen werden muss (Hot-Swap). Manche Produkte erlauben beim Austausch eines Laufwerks das Rekonstruieren der Daten für dieses Laufwerk während des normalen Betriebs, andere dagegen erlauben in dieser Zeit keinen Rechnerzugriff. Auch die Art des Rekonstruierens der Daten auf dem getauschten Laufwerk hat Einfluss auf die MTDA ( M ean T ime D ata A vailability) da beim Catch-Up-Verfahren im laufenden Betrieb in der Regel das RAID-System schneller wieder in einem aktuellen Zustand ist als beim Offline-Restaurieren. Einen wichtigen Einfluss auf die Ausfallsicherheit von RAID-Systemen haben auch andere Elemente: Hängen alle Laufwerke an einem einzigen Power-Supply, ist die Ausfallwahrscheinlichkeit (aber nicht notwendigerweise die Wahrscheinlichkeit des Datenverlustes) höher als bei getrennten Stromversorgungen für jedes einzelne Laufwerk oder einer anderen, redundanten Art der Stromversorgung. Natürlich sollten dann auch Kabel, Lüfter, Controller und Rechneranschlüsse doppelt ausgeführt werden, um den Single Point of Failure auszuschliessen. Und noch eine Warnung: Bei allen Betrachtungen von Ausfallhäufigkeiten und Ausfallwahrscheinlichkeiten geht man davon aus, dass Laufwerksausfälle statistisch unabhängig voneinander vorkommen. In der Praxis können externe Ereignisse (Blitzschlag, Stromspitzen) eintreten, die zu einer höheren punktuellen Ausfallwahrscheinlichkeit - von mehr als einem Laufwerk - führen können, sodass die MTBF-Überlegungen für RAID-Systeme im Grunde praxisfremd sind. Und selbst bei einem RAID-System mit unendlich hoher durchschnittlicher Zeit zwischen zwei Ausfällen darf man das Backup nicht vergessen: Vor einem falschen Delete-Kommando oder einem Softwarefehler, der Daten zerstört, schützt auch RAID nicht. Und Würmer, Trojanische Pferde, Viren und Bomben werden wohl auch nicht aussterben oder Respekt gegenüber RAID entwickeln. 3-Fazit: RAID-Systeme dienen der verbesserten Verfügbarkeit von Daten, und nicht der Performanceverbesserung. Sie sind in der Regel bei der Geschwindigkeit Einzellaufwerken unterlegen. Sinnvoll ist der Einsatz von RAID Level 0 bis 5 zum Speichern von grossen Datenmengen, auf die entweder seltener oder nur mit langen Transfers zugegriffen wird. RAID bietet hier eine kostengünstige Möglichkeit, ausfallsichere Massenspeicher zu konfigurieren. Für häufiger benutzte Daten empfiehlt sich weiterhin der Einsatz von (gespiegelten) Einzellaufwerken, für extrem häufig verwendete Daten hingegen der Einsatz von RAM-Disks, die, vorausgesetzt die Anzahl der Schreibzugriffe ist nicht zu hoch, mit normalen Winchesterplatten gespiegelt werden können. Spiegeln sollte man wegen der geringeren Rechnerbelastung in der Regel im Controller bzw. Hostadapter. Braucht man die hohe Transferrate langer Transfers, sollte Striping mehrere Datenpfade zum Rechner zulassen und deswegen Host-Based sein. Auf jeden Fall sollte ein RAID (und der Rechner) an eine USV-Anlage angeschlossen werden, da sonst im Fall eines Stromausfalls der eigentliche Sinn, die absolute Datenverfügbarkeit, nicht mehr erfüllt ist.