RAID
Bei CPUs und Hauptspeichern verdoppelt sich die Leistung etwa jedes Jahr.
Massenspeicher verdoppeln ihre Kapazität nur etwa alle zwei Jahre, die
Positionierzeit halbiert sich gar nur alle sieben Jahre. Plattenlaufwerke hinken
also immer mehr der Technologiekurve der CPUs hinterher.
Man benötigt deshalb Techniken, die es auf Basis der sich langsamer
entwickelnden Plattentechnologie dennoch schaffen, mit der
Prozessorgeschwindigkeit und dem Datenhunger der heutigen Systeme Schritt zu
halten - durch erhöhte Zugriffsgeschwindigkeitund erhöhte Kapazität.
Typische MTBF-Zeiten (MTBF = Mean Time Between Failure = durchschnittliche Zeit
zwischen zwei Ausfällen) von Laufwerken liegen heute bei über 500.000 Stunden.
Bei 100 Laufwerken an einem Rechner muss man mit einem Ausfall pro Halbjahr
rechnen. Selbst wenn man davon ausgeht, dass die Zuverlässigkeit der Laufwerke
in den nächsten Jahren weiter steigt, ist dieser Zustand nicht tragbar. Es
werden also Systeme benötigt, die ausfallsicher sind.
Unter dem Oberbegriff RAID fasst man Technologien zusammen, die mehrere
Laufwerke zu grösseren, teilweise auch ausfallsicheren Gesamtsystemen
zusammenpacken. RAID steht dabei für Redundant Array of Independent Disks,
wobei oft statt "independent" auch "inexpensive" gelesen
wird.
Redundant = 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 1 baut keinesfalls auf RAID-Level 0 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öcken) 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 sequenziell
und nicht parallel abgearbeitet werden.
RAID-Level 1
RAID-1 bedeutet Mirroring. Hier werden alle Daten einer Platte auf alle weiteren
Platten des RAID-Sets geschrieben. Vorteil: Bei Ausfall einer Platte bleiben die
Daten weiter zugreifbar. Die Leistung beim Schreiben bleibt der einer
Einzelplatte bzw. RAID-0 gleich (solange die Platten auf die Kanäle verteilt
sind), 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.
Allerdings sind die Kosten für RAID-1 hoch: Nur die Kapazität einer Festplatte
des verfügbaren Platzes steht für die Originaldaten zur Verfügung, die Rest
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 0+1
RAID-0+1, manchmal auch RAID-10 genannt, vereinigt Mirroring und Striping. Hier
wird tatsächlich die Hälfte der Gesamtkapazität gespiegelt, wobei sich die
hohe Sicherheit der Spiegelung mit der Performance von RAID-0 verbindet. In den
meisten Fällen ist dies die schnellste RAID-Lösung, aber natürlich gilt auch
hier das Argument von RAID-1: Die Kosten sind, da doppelt so viele Platten
verwendet werden, sehr hoch.
RAID-Level 4
Während Ausfallsicherheit bei RAID-1 und 0+1 doppelte Plattenkapazität
erfordert - und bei RAID-0 gar nicht gegeben ist - verwendet RAID-4 Parity, um
die Daten zu sichern. Zu jeweils x Festplatten, die nach den Striping-Verfahren
beschrieben werden, kommt lediglich eine zusätzliche Parityplatte, deren n-tes
bit jeweils das Paritybit zu den x n-ten bits der restlichen Platten enthält.
Fällt eine Festplatte aus, kann aus dieser Parityplatte zusammen mit den Daten
der übrigen Platten bit für bit der Inhalt der defekten Platte rekonstuiert
werden. Das Schreiben von Daten auf einer Platte erfordert allerdings immer auch
das Ändern der Parityplatte - beide Blöcke müssen zuerst gelesen und aus
ihnen und den neuen Daten der neue Paritywert berechnet werden. So ist die
Performance geringer als bei RAID-0 oder -1.
RAID-Level 5
Bei RAID 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.
Andere RAID-Level
Neben den oben genannten RAID-Leveln, die in einer Studie der Universität
Berkeley erstmals beschrieben wurden und sich als Quasi-Standard etabliert
haben, gibt es noch eine Reihe von herstellerspezifizierten RAID-Level, die aber
in der Regel nur Modifikationen der o. g. RAID-Level darstellen.
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) oder im Hostrechner selbst. 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 fest eingebaut werden. Es ist jedoch auf jeden Fall 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). Gute RAID-Systeme erlauben beim Austausch
eines Laufwerks das Rekonstruieren der Daten für dieses Laufwerk während des
normalen Betriebs.
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, so dass die MTBF-Überlegungen für RAID-Systeme teilweise 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.
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. Hardware-RAID-Systeme werden
in den Kapiteln Externe RAID-Systeme von transtec und SCSI/IDE RAID-Systeme
angeboten. Interne Hardware RAID-Systeme mit PCI-Controllern sind in den
Kapiteln PCI RAID-Controller con ICP vortex und MegaRAID PCI-RAID-Controller von
AMI zu finden.
Auf jeden Fall sollte ein RAID (und der Rechner) an eine USV-Anlage (Näheres
dazu im Kapitel USV ) angeschlossen werden, da sonst im Fall eines Stromausfalls
der eigentliche Sinn, die absolute Datenverfügbarkeit, nicht mehr erfüllt ist.
RAID-Systeme für Windows NT
Bei Windows NT ergeben sich vielfältige Möglichkeiten, ein RAID System
aufzubauen. Folgende Konfigurationen sind möglich:
- Software RAID
- Interne Hardware RAID mit PCI-RAID-Controller
- Externe Hardware RAID
Software RAID
Windows NT bietet bereits standardmässig die Möglichkeit, mehrere
Plattenlaufwerke zu einem RAID-System zusammenzufassen. Hierbei brauchen
lediglich die Festplatten an einen SCSI-Hostadapter intern oder extern
angeschlossen zu werden. Die Konfiguration wird dann über Windows NT
vorgenommen. Diese Lösung ist zwar preisgünstig und einfach einzurichten, hat
jedoch auch Nachteile. Vor allem, wenn sehr grosse Datenmengen übertragen
werden bzw. wenn Zugriffe parallel von mehreren Usern (beispielsweise in einem
Netz) auf das RAID erfolgen hat es Auswirkungen auf die Performance des
NT-Rechners. Hierbei muss der gesamte Rechenaufwand (Verteilen der Daten auf die
einzelnen Platten und Berechnen der Parity) von der CPU des Rechners aufgebracht
werden. Des Weiteren wird das Betriebssystem des Rechners über eine Bootplatte
geladen, die nicht redundant sein kann, da die RAID-Konfiguration erst nach dem
Laden des Betriebssystems zur Verfügung steht. Auf der Bootplatte befinden sich
auch alle Konfigurationsdaten für den RAID-Verband. Fällt die Bootplatte aus,
ist das RAID System nicht mehr operabel. Diesem Nachteil begegnen die folgenden
Hardware-RAID-Lösungen mit separatem RAID-Controller.
Interne Hardware-RAID mit PCI-RAID-Controller
Hierbei übernimmt der RAID-Controller, wie bei den externen Hardware-RAIDs, die
gesamte Rechenarbeit. Somit arbeiten die Controller, unabhängig von der
CPU-Auslastung, mit konstanter Performance. Die RAID-Konfigurationsdaten
befinden sich auf allen Festplatten des RAID Systems und sind somit auch bei
Ausfall einer Festplatte oder sogar des ganzen Controllers immer vorhanden. Bei
Tausch des Controllers oder einer Festplatte werden die RAID Konfigurationsdaten
eingelesen und der Rebuilt gestartet.
RAID-Controller sind mit internen Anschlussbuchsen und einem externen
Anschluss für SCSI-Festplatten versehen. Somit hat man die Möglichkeit, die
Festplatten des RAID Systems in den Rechner einzubauen oder aber extern
anzuschliessen. Weitere Informationen und detailliertere Angaben zu
Anschlussmöglichkeiten von Festplatten sind in den Kapiteln PCI-RAID-Controller
von ICP vortex und MegaRAID PCI RAID Controller zu finden.
Externe Hardware-RAID
Die High-End-RAID-Lösung stellen die sog. Hardware-RAIDs (bzw.
SCSI-to-SCSI-RAIDs) dar. Hier sind der Controller und die Festplatten in einem
separaten Gehäuse untergebracht. Das RAID System wird mittels SCSI-Kabel mit
dem Hostadapter des Rechners verbunden.
Durch die Backplane, an der Controller und Festplatten direkt angeschlossen
sind, erreicht man kürzeste Kabellängen und somit maximale Datensicherheit.
Weitere Datensicherheit kann durch den Einsatz von redundanten Controllern
erreicht werden. Hierbei wird bei Defekt des Controllers automatisch auf einen
zweiten Controller im Gehäuse umgeschaltet, ohne Zeitverzögerung und
Datenverlust. Der defekte Controller kann dann im laufenden System gegen einen
neuen getauscht werden. Nähere Informationen hierzu stehen im Kapitel Externe
RAID-Systeme von transtec .
Hardware-RAIDs arbeiten, wie PCI-RAID-Controller, immer mit konstanter
Performance, unabhängig von der CPU-Auslastung. Hierbei werden die Daten vom
Hostadapter des Rechners über den SCSI-Bus direkt zum RAID-Controller
übertragen. Dort werden die gesamten Daten in den Cache eingelesen. Danach ist
der SCSI-Bus nicht mehr belastet. Der Controller des Hardware-RAIDs verteilt
dann die Daten auf die einzelnen Platten und berechnet die Parity, in
Abhängigkeit vom gewählten RAID-Level. Währenddessen ist die CPU des Rechners
nicht mit den Rechenoperationen des RAID Systems belastet. Ein entsprechend
gross gewählter Cache, der als Write-back-Cache konfiguriert ist, kann die
Schreibperformance erheblich erhöhen. Das Lesen der Daten geschieht dann analog
hierzu in umgekehrter Reihenfolge. Hardware-RAIDs können im Vergleich zu
PCI-RAID-Controllern plattformübergreifend eingesetzt werden.