RAID
RAID wird verwendet um Daten vor Ausfällen von Datenträgern zu schützen, um den Datendurchsatz und die Reaktionszeit eines Storage-Systems zu verbessern und um die Speicherkapazität eines Storage-Systems zu steigern. Dabei werden mehrere Datenträger (Festplatten / SSDs) "zusammengeschaltet" und als ein logisches Laufwerk angesprochen. RAID steht für Redundant Array of Independent Disks, also frei übersetzt "Redundante Anordnung unabhängiger Festplatten". Die meisten RAID-Systeme erlauben das Ausfallen von Datenträgern, ohne dass Daten verloren gehen. Wenn hot plug unterstützt wird, können auch im laufenden Betrieb defekte Datenträger ausgetauscht werden.
Wichtig beim Erstellen eines RAIDs
Man sollte sich im Vorfeld Gedanken machen mit welcher Absicht man ein RAID erstellen möchte (Schwerpunkt Datensicherung oder Schwerpunkt Leistung). Grundsätzlich sollten alle Datenträger im Array die gleichen oder zumindest ähnliche Spezifikationen aufweisen (Speicherplatz, Cache, Drehzahl bei Festplatten, etc.), um die Leistung zu optimieren.
Beim erstellen eines RAID-Storages gehen die Daten aller beteiligten Datenträger verloren. Das gleiche gilt für das Auflösen eines RAIDs. Wenn ein Datenträger teil eines RAIDs ist, kann dieser nicht in einem anderen System eingesetzt werden, bis das komplette RAID aufgelöst wird.
Durch diese Limitationen ist man wenig flexibel, daher wird heutzutage oft ein OS-seitiger Storage-Pool (LVM oder MD unter Linux und Storage Spaces unter Windows) anstatt eines RAID-Storages bevorzugt. Das Grundprinzip ist jedoch bei allen Betriebssysteme das gleiche.
RAID-Level
Es gibt viele verschiedene sogenannte RAID-Level. Die am meisten verbreiteten sind in der Übersicht bewertet und werden weiter unten erklärt.
Übersicht
RAID Level |
Minimal erforderliche Anzahl an Datenträgern |
Maximale Speicherkapazität |
Maximal tolerierte Datenträgerausfälle |
Bewertung Datensicherheit |
Bewertung Lesegeschwindigkeit |
Bewertung Schreibgeschwindigkeit |
Bewertung Rebuild |
RAID 0 | 2 | = kleinster Datenträger * Anzahl Datenträger | 0 (es darf kein Datenträger ausfallen) | ★☆☆ | ★★★ | ★★★ | nicht verfügbar |
RAID 1 | 2 | = kleinster Datenträger | Anzahl Datenträger - 1 | ★★★ | ★★★ | ★☆☆ | ★★☆ |
RAID 5 | 3 | = (kleinster Datenträger * Anzahl Datenträger) - kleinster Datenträger | 1 | ★★☆ | ★★★ | ★★☆ | ★☆☆ |
RAID 10 | 4 (erfordert gerade Anzahl) | = (kleinster Datenträger * Anzahl Datenträger) / 2 |
Minimal = 1 Maximal = Anzahl Datenträger / 2 |
★★★ | ★★★ | ★★★ | ★★★ |
Die Bewertungen richten sich jeweils auf eine optimale Auslegung des Storage-Systems. Bei nicht optimalen Bedingungen (unterschiedlich schnelle Datenträger im Array, unpassende Hardware, etc...) kann die Performance stark darunter leiden.
Alle aufgelisteten RAIDs erreichen in der Regel eine gute Lesegeschwindigkeit, da bei Lesevorgängen immer alle verfügbaren Datenträger verwendet werden.
RAID 0
Ein RAID 0 bietet keinerlei Schutz vor einem Datenträgerausfall und ist somit streng genommen nur ein Redundant Array of Independent Disks. Jedoch wird die Geschwindigkeit verbessert und die Speicherkapazität erhöht. Beim Schreiben oder Lesen werden die Daten durch die Anzahl, der im Array vorhandenen Datenträger "geteilt". Der Durchsatz ist somit um x (= Anzahl der Datenträger) mal schneller. Fällt ein Datenträger aus, ist das Storage-System unbrauchbar und die Daten der noch funktionierenden Datenträger können nicht wieder rekonstruiert werden.
Ein RAID 0 sollte man nur dann verwenden, wenn gute Performance und viel Speicherkapazität gebraucht wird und Verlust der Daten im verkraftbaren Rahmen bleibt.
Ich verwende RAID 0 in meinem Desktop-Rechner WORKSTATION1.
RAID 1
Ein RAID 1 spiegelt alle Daten auf alle im Array vorhandenen Datenträger. Somit können Datenträgerausfälle toleriert werden. Die Schreibgeschwindigkeit ist dabei die des langsamsten Datenträgers im Array. Bei Lesevorgängen werden (wie bei RAID 0) alle Datenträger gemeinsam verwendet, somit steigert sich die Lesegeschwindigkeit. Die nutzbare Speicherkapazität des Storage-Systems ist die des kleinsten Datenträgers.
Ein RAID 1 sollte man verwenden, wenn Datenverlust nicht verkraftbar ist und die Schreibgeschwindigkeit nicht im Vordergrund steht.
RAID 1 wird in der Cycasc Infrastruktur auf zwei Servern eingesetzt: C-DEERL-ARCH-VHOST1 und C-DENSU-ARCH-VHOST1. Mehr dazu siehe RAID Configuration.
RAID 5
Ein RAID 5 ist eine Kombination von beidem, Sicherheit und Leistung, jedoch hat RAID 5 einige Schwächen. Hier werden die eigentlichen Nutzdaten auf allen Festplatten hinweg verteilt, genauso wie die Sicherungsdaten (man spricht hierbei von Parität). Ein einziges Paritätsbit ergibt sich aus der XOR-Verknüpfung der anderen Bits, also der Nutzdaten.
Eine XOR-Verknüpfung, auch Exklusiv-Oder-Verknüpfung ergibt immer 1, wenn eines der Bits 1 ist, aber 0 wenn alle Bits 1 sind.
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
Beispiel anhand eines RAID 5 mit 3 HDDs
Es werden folgende Bits auf das Storage-System geschrieben: 100011011101
Bits HDD 1 | Bits HDD 2 | Bits HDD 3 | |
---|---|---|---|
1 | 1 XOR 0 = 1 | 1 | 0 |
2 | 0 | 0 XOR 0 = 0 | 0 |
3 | 1 | 1 | 1 XOR 1 = 0 |
4 | 0 XOR 1 = 1 | 0 | 1 |
5 | 1 | 1 XOR 1 = 0 | 1 |
6 | 0 | 1 | 0 XOR 1 = 1 |
usw... |
Fällt ein Datenträger im Array aus, können mithilfe der Paritätbits die fehlenden Bits (Nutzdaten) auf der ausgefallenen Festplatte rekonstruiert werden.
Bits HDD 1 | Bits HDD 2 | Bits HDD 3 (ausgefallen) | Bits HDD 3 (Ersatzdatenträger) | |
---|---|---|---|---|
1 | P 1 | 1 | Paritätsbit auf HDD 1 = 1 → Bit auf HDD2 = 1 → Hier muss 0 gewesen sein | |
2 | 0 | P 0 | Bit auf HDD 1 = 0 → Paritätsbit auf HDD 2 = 0 → Hier muss 0 gewesen sein | |
3 | 1 | 1 | Paritätsbit nicht vorhanden → Keine Daten sind verloren gegangen → Erstelle neues Paritätsbit → 1 (auf HDD 1) XOR 1 (auf HDD 2) = 0 | |
4 | P 1 | 0 | Paritätsbit auf HDD 1 = 1 → Bit auf HDD 2 = 0 → Hier muss 1 gewesen sein | |
5 | 1 | P 0 | Bit auf HDD 1 = 1 → Paritätsbit auf HDD 2 = 0 → Hier muss 1 gewesen sein | |
6 | 0 | 1 | Paritätsbit nicht vorhanden → Keine Daten sind verloren gegangen → Erstelle neues Paritätsbit → 0 (auf HDD 1) XOR 1 (auf HDD 2) = 1 | |
usw... |
RAID 5 bietet bei optimaler Hardware (Hardwareanforderungen sind sehr speziell) gute Leistung, gute Speicherkapazität und kann maximal einen Plattenausfall tolerieren (egal wie viele Datenträger sich im Array befinden). Trotzdem hat sich in den letzten Jahren ergeben, dass sich RAID 5 für Produktivumgebungen nicht gut eignet. Gründe hierfür sind folgende:
- Bei einem Rebuild des RAIDs (nachdem ein defekter Datenträger ausgetauscht wurde) werden die anderen Datenträger hoch belastet, sodass weitere Ausfälle mit höherer Wahrscheinlichkeit zu erwarten sind, wenn das Alter / der Verschleiß der Datenträger identisch ist (bei einem Ausfall während eines Rebuilds wird das Storage-System unbrauchbar)
- Die Chance bei einem Rebuild auf fehlerhafte Daten ist bei RAID 5 höher als bei anderen RAID-Level
- Die Datenrettung bei fehlerhaften RAID 5-Storages ist äußerst schwierig und kostenintensiv
Im Internet findet man einige Berichte von Fehlern bei RAID 5 Storages. Deshalb rate ich persönlich von RAID 5 in produktiven Umgebungen ab. Sollte man drei Datenträger haben empfehle ich, sich noch einen weiteren Datenträger anzuschaffen und dann auf ein RAID 10 zu setzen.
Außerdem kann sich die Leistung eines RAID 5 Storages bei ungeeigneter Hardware drastisch reduzieren.
RAID 10
RAID 10 ist eine Kombination von RAID 1 und RAID 0. Dabei werden die Daten und die Datenträger in Paare aufgeteilt, innerhalb jeden Paares werden die Daten gespiegelt. Ein RAID 10-Array mit 6 Festplatten hat also 3 RAID 1-Paare. Effektiv kann die Hälfte der Gesamtkapazität des Storage-Pools genutzt werden. Es dürfen mehrere Datenträger ausfallen, solange alle RAID 1-Paare noch intakt sind. Zu Datenverlust kommt es nur, wenn ein RAID 1-Paar ausfällt (also beide Datenträger desselben Paares).
RAID 10 wird in der Cycasc Infrastruktur auf zwei Servern eingesetzt: C-DEERL-ARCH-VHOST1 und C-DENSU-ARCH-VHOST1. Mehr dazu siehe RAID Configuration.
Hot Spare
Bei vielen Serversystemen wird neben den ständig laufenden Datenträgern ein weiterer Datenträger als Hot Spare deklariert. Dieser Datenträger gilt als Ersatzdatenträger und ist im Normalzustand so lange vom Controller abgeschaltet, bis ein anderer Datenträger fehlerhaft oder komplett defekt ist. Bei Aktivierung des Hot Spare-Datenträgers wird normalerweise ein sofortiger Rebuild initiiert, um die Zeit in der das Storage-System nicht redundant ist so gering wie möglich zu halten.
Streifengröße
Die Streifengröße (auch stripe size, chunk size oder interlaced size) gibt an, wie klein die Daten "zerlegt" werden sollen. Der Wert kann die Leistung des RAID-Storages beeinflussen, allerdings lässt sich dies nur beim Erstellen eines RAIDs einstellen, und nicht mehr danach.
- Der Wert sollte hoch sein, wenn die Dateien durchschnittlich groß sind.
- Der Wert sollte niedrig sein, wenn die Dateien durchschnittlich klein sind.
Die Streifengröße kann nur bei RAIDs angegeben werden, bei denen Daten über mehrere Festplatten hinweg verteilt werden, somit also für RAID 1 nicht relevant.
Der übliche Wert bei RAID 0 ist 128 KB und bei RAID 5 und RAID 10 64 KB.
Cache (Zwischenspeicher)
Viele RAID Controller unterstützen Caching, also das Zwischenspeichern von Daten für eine kurze Zeit, um die Leistung weiter zu verbessern. Dieses Feature bieten normalerweise nur Hardware RAID Controller an. Ein Cache kann vor allem dann helfen, wenn viele kleine Transaktionen auf dem Storage vorgenommen werden (zumindest solange der Cache nicht voll wird). Es gibt im wesentlichen zwei Caching Methoden.
Rückschreiben (Write-Back)
Write-Back ist der performanteste Modus. Das Betriebssystem bekommt vom Controller das Signal einer abgeschlossenen Transaktion noch bevor die Daten auf allen Datenträgern geschrieben wurden. Die zu schreibenden Daten verweilen im Controller Cache und werden erst zu einem späteren Zeitpunkt "übernommen". Der Vorteil hierbei ist, dass das System nicht warten muss bis viele kleine Transaktionen abgeschlossen sind, sondern sofort mit weiteren Vorgängen weiter machen kann. Die allermeisten Caches sind jedoch flüchtige Speicher. Im Falle eines Stromausfalls ist die Chance auf Datenverlust hoch, da sich Daten im Cache befinden, welche noch nicht auf die Datenträger transferiert wurden und somit unwiderruflich verschwunden sind.
Write-Back sollte nur eingesetzt werden, wenn eine USV (Unterbrechungsfreie Stromversorgung) verwendet wird, oder die Leistung unbedingt benötigt wird und Datenverlust verkraftbar ist.
Durchschreiben (Write-Through)
Das Betriebssystem bekommt vom Controller erst das Signal einer abgeschlossenen Transaktion, nachdem alle zu schreibenden Daten auf dem Datenträger-Array platziert wurden. Das System wartet dadurch immer auf den Abschluss einer Transaktion, bevor die nachfolgenden Vorgänge gestartet werden und wird dadurch aus gebremst. Die Daten verweilen jedoch im Cache, damit diese bei lesenden Zugriffen wieder schnell zur Verfügung stehen. Es ist jedoch recht unwahrscheinlich, dass gerade geschriebene Daten sofort wieder abgerufen werden, daher ist diese Caching Methode auch bei lesenden Zugriffen wenig leistungsfähig.
Der Vorteil ist jedoch, dass alle Daten sofort nach Schreibvorgang sicher abliegen und ein Stromausfall diesen nichts anhaben kann.
No Comments