RAID erneut betrachtet
Damals, als ich ein angehender Servicetechniker war und kaum etwas über Systemadministration wusste, gehörte RAID – Redundant Array of Inexpensive Disks – zu den wenigen Themen, die wir stets aus dem Effeff beherrschen sollten. Es war die Antwort auf all unsere Speichersorgen. Mit RAID konnten wir unsere Dateisysteme vergrößern, einen besseren Durchsatz erzielen und sogar Redundanz hinzufügen, die es uns ermöglichte, den Ausfall einer Festplatte zu überstehen, was, besonders damals, ziemlich regelmäßig vorkam. Mit dem Aufkommen von NAS- und SAN-Speichergeräten verschwindet die Fähigkeit, auf die physische Speicherebene hinabzusteigen und sie auf die Bedürfnisse des jeweiligen Systems abzustimmen, rapide. Das ist keine gute Sache. Nur weil wir den Speicher auf externe Geräte auslagern, ändert das nichts an der Tatsache, dass wir unseren Speicher grundlegend verstehen und ihn so konfigurieren müssen, dass er den spezifischen Anforderungen unserer Systeme gerecht wird.
Ein Missverständnis, das sich in den letzten fünf bis zehn Jahren in diesem Bereich eingeschlichen zu haben scheint, ist die Annahme, dass RAID in irgendeiner Weise eine Systemsicherung darstellt. Das tut es nicht. RAID ist eine Form der Fehlertoleranz. Sicherung und Fehlertoleranz sind konzeptionell sehr verschieden. Eine Sicherung ist darauf ausgelegt, Ihnen die Wiederherstellung zu ermöglichen, nachdem eine Katastrophe eingetreten ist. Fehlertoleranz ist darauf ausgelegt, die Wahrscheinlichkeit einer Katastrophe von vornherein zu verringern. Stellen Sie sich Fehlertoleranz als das Errichten eines Zauns an der Spitze einer Klippe vor und die Sicherung als das Bauen eines Krankenhauses an deren Fuß. Sie möchten sich nie wirklich in einer Situation ohne sowohl einen Zaun als auch ein Krankenhaus befinden, doch es sind definitiv unterschiedliche Dinge.
Sobald wir RAID für unsere Laufwerke einsetzen, sei es lokal angeschlossen oder auf einem entfernten Gerät wie einem SAN, stehen uns heute vier zentrale RAID-Lösungen für den Unternehmenseinsatz zur Auswahl: RAID 1 (Spiegelung), RAID 5 (Striping mit Parität), RAID 6 (Striping mit doppelter Parität) und RAID 10 (Spiegelung mit Striping). Es gibt weitere, wie RAID 0, die nur in seltenen Fällen verwendet werden sollten, wenn man die Anforderungen seines Laufwerkssubsystems wirklich versteht. RAID 50 und 51 werden ebenfalls verwendet, jedoch weit seltener und sind bei Weitem nicht so effektiv. Vor zehn Jahren waren RAID 1 und RAID 5 verbreitet, doch heute haben wir mehr Optionen.
Gehen wir die Optionen durch und besprechen einige grundlegende Zahlen. In unseren Beispielen verwenden wir n zur Darstellung der Anzahl der Laufwerke in unserem Array und s zur Darstellung der Größe eines einzelnen Laufwerks. Damit können wir den nutzbaren Speicherplatz eines Arrays ausdrücken und Vergleiche hinsichtlich der Speicherkapazität leicht anstellen.
RAID 1: Bei diesem RAID-Typ werden Laufwerke gespiegelt. Sie haben zwei Laufwerke und sie tun alles gemeinsam zur gleichen Zeit, daher “Spiegelung”. Spiegelung ist äußerst stabil, da der Vorgang so einfach ist, doch sie erfordert den Kauf doppelt so vieler Laufwerke, wie Sie benötigen würden, wenn Sie überhaupt kein RAID verwenden würden, da Ihr zweites Laufwerk ausschließlich der Redundanz dient. Der Vorteil besteht darin, dass Sie die Gewissheit haben, dass jedes Bit, das Sie auf die Festplatte schreiben, zu Ihrem Schutz zweimal geschrieben wird. Somit wird bei RAID 1 unsere Kapazität als (n*s/2) berechnet. RAID 1 leidet darunter, dass es gegenüber Nicht-RAID-Laufwerken nur minimale Leistungssteigerungen bietet. Die Schreibgeschwindigkeiten entsprechen denen eines Nicht-RAID-Systems, während die Lesegeschwindigkeiten in den meisten Situationen fast doppelt so hoch sind, da die Laufwerke bei Lesevorgängen parallel zugreifen können, um den Durchsatz zu erhöhen. RAID 1 ist auf Sätze von zwei Laufwerken beschränkt.
RAID 5: Striping mit einfacher Parität; bei diesem RAID-Typ werden Daten in einem komplexen Streifen über alle Laufwerke im Array geschrieben, mit einem verteilten Paritätsblock, der über alle Laufwerke hinweg existiert. Dadurch ist RAID 5 in der Lage, ein beliebig großes Array aus drei oder mehr Festplatten zu nutzen und verliert nur die Speicherkapazität, die einer einzelnen Festplatte entspricht, an die Parität, obwohl die Parität verteilt ist und nicht ausschließlich auf einer einzigen physischen Festplatte existiert. RAID 5 wird häufig wegen seiner Wirtschaftlichkeit eingesetzt, die auf dem fehlenden Verlust an Speicherkapazität bei großen Arrays beruht. Anders als bei der Spiegelung erfordert Striping mit Parität, dass für jeden Schreibstreifen über die Festplatten eine Berechnung durchgeführt wird, und dies verursacht einen gewissen Mehraufwand. Daher ist der Durchsatz nicht immer eine offensichtliche Rechengröße und hängt stark von der Rechenleistung des Systems ab, das die Paritätsberechnung durchführt. Die Berechnung der RAID-5-Kapazität ist recht einfach, da sie schlicht ((n-1)*s) beträgt. Ein RAID-5-Array kann den Ausfall einer beliebigen einzelnen Festplatte im Array überstehen.
RAID 6: Redundantes Striping mit doppelter Parität. RAID 6 ist praktisch identisch mit RAID 5, verwendet jedoch zwei Paritätsblöcke pro Streifen anstelle von einem, um einen zusätzlichen Schutz vor Festplattenausfall zu ermöglichen. RAID 6 ist ein neueres Mitglied der RAID-Familie und wurde mehrere Jahre nach der Standardisierung der anderen Stufen hinzugefügt. RAID 6 ist insofern besonders, als es den Ausfall zweier beliebiger Laufwerke innerhalb eines Arrays ohne Datenverlust ermöglicht. Doch um die zusätzliche Redundanzebene zu ermöglichen, verliert ein RAID-6-Array die Speicherkapazität, die zwei Laufwerken im Array entspricht, und erfordert mindestens vier Laufwerke. Wir können die Kapazität eines RAID-6-Arrays mit ((n-2)*s) berechnen.
RAID 10: Spiegelung plus Striping. Technisch gesehen ist RAID 10 ein hybrider RAID-Typ, der einen Satz von RAID-1-Spiegeln umfasst, die in einem paritätslosen Streifen (RAID 0) angeordnet sind. Viele Anbieter verwenden den Begriff RAID 10 (oder RAID 1+0), wenn sie von nur zwei Laufwerken in einem Array sprechen, doch technisch ist dies RAID 1, da Striping erst stattfinden kann, wenn sich mindestens vier Laufwerke im Array befinden. Bei RAID 10 müssen Laufwerke paarweise hinzugefügt werden, sodass nur eine gerade Anzahl von Laufwerken in einem Array existieren kann. RAID 10 kann den Verlust von bis zu der Hälfte des gesamten Laufwerkssatzes überstehen, aber höchstens den Verlust eines Laufwerks aus jedem Paar. RAID 10 beinhaltet keine Paritätsberechnung, was ihm einen Leistungsvorteil gegenüber RAID 5 oder RAID 6 verschafft und weniger Rechenleistung zum Betrieb des Arrays erfordert. RAID 10 liefert die größte Leseleistung aller gängigen RAID-Typen, da alle Laufwerke im Array gleichzeitig bei Lesevorgängen genutzt werden können, obwohl seine Schreibleistung deutlich geringer ausfällt. Die Kapazitätsberechnung von RAID 10 ist identisch mit der von RAID 1, (n*s/2).
Im heutigen Unternehmensumfeld ist es selten, dass eine IT-Abteilung ernsthaft eine andere Laufwerkskonfiguration als die hier genannten vier in Betracht ziehen muss, unabhängig davon, ob Software- oder Hardware-RAID eingesetzt wird. Traditionell drehte sich die größte Sorge bei der Entscheidung für ein RAID-Array um die nutzbare Kapazität. Dies lag daran, dass Laufwerke teuer und klein waren. Heute sind Laufwerke so groß, dass Speicherkapazität selten ein Problem darstellt, zumindest nicht so wie noch vor wenigen Jahren, und die Kosten sind so weit gesunken, dass der Kauf zusätzlicher Laufwerke, die für eine bessere Laufwerksredundanz erforderlich sind, im Allgemeinen von untergeordneter Bedeutung ist. Wenn Kapazität knapp ist, ist RAID 5 eine beliebte Wahl, da es im Vergleich zu anderen Array-Typen die geringste Speicherkapazität verliert und bei großen Arrays der Speicherverlust nominal ist.
Heute haben wir im Allgemeinen andere Anliegen, in erster Linie Datensicherheit und Leistung. Ein wenig mehr auszugeben, um den Datenschutz zu gewährleisten, sollte eine offensichtliche Wahl sein. RAID 5 leidet darunter, nur eine einzige Festplatte verlieren zu können. In einem Array mit nur drei Mitgliedern ist dies nur geringfügig riskanter als der Schutz, den RAID 1 bietet. Wir könnten den Ausfall einer beliebigen von drei Festplatten überstehen. Nicht allzu beängstigend im Vergleich zum Verlust einer von zwei Festplatten. Doch was ist mit einem großen Array, sagen wir sechzehn Festplatten? Die Tatsache, dass man nur eine von sechzehn Festplatten gefahrlos verlieren kann, sollte uns dazu bringen, unsere Zuverlässigkeit etwas gründlicher zu hinterfragen.
Hier kam RAID 6 ins Spiel, um die Lücke zu schließen. RAID 6 führt, wenn es in einem großen Array eingesetzt wird, einen sehr geringen Verlust an Speicherkapazität und Leistung mit sich, während es die Gewissheit bietet, zwei beliebige Festplatten verlieren zu können. Befürworter des Lagers der paritätbasierten Striping-Verfahren zitieren oft diese Zahlen, um das Management davon zu überzeugen, dass RAID 5/6 in Speichersubsystemen ein angemessenes Preis-Leistungs-Verhältnis bieten kann, doch es sind weitere Faktoren im Spiel.
Bei Diskussionen über die Zuverlässigkeit von RAID nahezu vollständig übersehen – ein ohnehin viel zu selten erörtertes Thema – ist die Frage der Zuverlässigkeit der Paritätsberechnung. Bei RAID 1 oder RAID 10 wird keine “Berechnung” durchgeführt, um einen Streifen mit Parität zu erzeugen. Daten werden einfach auf stabile Weise geschrieben. Wenn ein Laufwerk ausfällt, übernimmt sein Partner die Last, und die Laufwerksleistung ist geringfügig herabgesetzt, bis der Partner ersetzt wird. Es gibt keinen Wiederherstellungsprozess, der bestehende Laufwerksmitglieder beeinträchtigt. Bei Paritätsstreifen ist dies nicht der Fall.
RAID-Arrays mit Parität führen Vorgänge durch, bei denen berechnet wird, was sich auf den Laufwerken befindet und was sich darauf befinden sollte. Obwohl diese Berechnung sehr einfach ist, bietet sie eine Gelegenheit für Fehler. Eine Array-Steuerung, die bei RAID 1 oder RAID 10 ausfällt, könnte theoretisch fehlerhafte Daten über den Inhalt der Laufwerke schreiben, doch es gibt keinen Prozess, durch den der Controller eigenständig Änderungen an den Laufwerken vornimmt, sodass dies äußerst unwahrscheinlich jemals eintreten wird, da es nie einen “Wiederherstellungs”-Prozess gibt, außer beim Erstellen eines Spiegels.
Wenn Arrays mit Parität einen Wiederherstellungsvorgang durchführen, führen sie einen komplexen Prozess durch, bei dem sie den gesamten Inhalt des Arrays durchlaufen und fehlende Daten auf das ersetzte Laufwerk zurückschreiben. An und für sich ist dies relativ einfach und sollte kein Anlass zur Sorge sein. Was ich und andere aus erster Hand erlebt haben, ist ein etwas anderes Szenario, das Festplatten betrifft, die aufgrund lockerer Steckverbindungen zum Array die Verbindung verloren haben. Festplatten können sich im Laufe der Zeit häufig “lockerrütteln”, während sie in einem Server sitzen, besonders nach mehreren Jahren Betrieb in einem stets eingeschalteten System.
Was in extremen Szenarien passieren kann, ist, dass gute Daten auf Laufwerken durch fehlerhafte Paritätsdaten überschrieben werden, wenn ein Array-Controller glaubt, dass ein oder mehrere Laufwerke nacheinander ausgefallen und zur Wiederherstellung wieder online gebracht worden sind. In diesem Fall sind die Laufwerke selbst nicht ausgefallen und es liegt kein Datenverlust vor. Alles, was erforderlich ist, ist, dass die Laufwerke theoretisch neu eingesteckt werden. Bei Hot-Swap-Systemen erfolgt die Verwaltung der Laufwerkswiederherstellung oft automatisch auf Grundlage der Entnahme und des Ersatzes eines ausgefallenen Laufwerks. Dieser Vorgang des Verlierens und Ersetzens eines Laufwerks kann also ohne jegliches menschliches Eingreifen erfolgen – und ein Wiederherstellungsprozess kann beginnen. Während dieses Prozesses ist das Laufwerkssystem gefährdet, und sollte dasselbe Ereignis erneut eintreten, könnte das Laufwerks-Array, abhängig vom Status der Laufwerke, beginnen, fehlerhafte Daten über die Laufwerke zu streifen und das intakte Dateisystem zu überschreiben. Es ist einer der deprimierendsten Anblicke für einen Serveradministrator, wenn ein System ohne ausgefallene Laufwerke aufgrund eines unnötigen Wiederherstellungsvorgangs ein gesamtes Array verliert.
Theoretisch sollte eine derartige Situation nicht eintreten und es sind Schutzvorkehrungen vorhanden, um dies zu verhindern, doch die Beurteilung durch einen Low-Level-Laufwerkscontroller hinsichtlich des aktuellen und des vorherigen Status eines Laufwerks sowie der Qualität der darauf befindlichen Daten ist nicht so einfach, wie es scheinen mag, und es ist möglich, dass Fehler auftreten. Auch wenn diese Situation unwahrscheinlich ist, kommt sie vor und fügt RAID-5- und RAID-6-Systemen ein nahezu unmöglich zu berechnendes Risiko hinzu. Wir müssen das Risiko eines Paritätsversagens zusätzlich zu dem traditionellen Risiko berücksichtigen, das sich aus der Anzahl der Laufwerksausfälle berechnet, die ein Array aus einem Pool überstehen kann. Mit zunehmender Zuverlässigkeit der Laufwerke gewinnt die Bedeutung des Risikoereignisses eines Paritätsversagens an Gewicht.
Darüber hinaus verursachen die Parität von RAID 5 und RAID 6 einen Systemmehraufwand aufgrund der Paritätsberechnung, die häufig mittels dedizierter RAID-Hardware abgewickelt wird. Diese Berechnung führt eine Latenz in das Laufwerkssubsystem ein, die sowohl bei Hardware- als auch bei Software-Implementierungen dramatisch variiert, was es unmöglich macht, Leistungszahlen von RAID-Stufen im Vergleich zueinander anzugeben, da jede Implementierung einzigartig sein wird.
Möglicherweise das größte Problem bei RAID-Entscheidungen heute besteht darin, dass die Leichtigkeit, mit der sich Kennzahlen zur Speichereffizienz und zur Überlebensfähigkeit bei Laufwerksausfällen ermitteln lassen, das Gesamtbild von Zuverlässigkeit und Leistung verschleiert, da jene Statistiken nahezu vollständig nicht verfügbar sind. Eine der Gefahren von Kennzahlen besteht darin, dass die Menschen sich auf Faktoren konzentrieren, die sich leicht messen lassen, und jene ignorieren, die sich nicht leicht messen lassen, ungeachtet ihres potenziellen Einflusses.
Obwohl alle modernen RAID-Stufen ihre Berechtigung haben, ist es entscheidend, dass sie im Kontext und mit einem Verständnis für den gesamten Umfang der Risiken betrachtet werden. Wir sollten hart daran arbeiten, unsere Branche von einer Standardwahl von RAID 5 hin zu einer Standardwahl von RAID 10 zu bewegen. Laufwerke sind günstig und Datenverlust ist teuer.
[Anmerkung: In den Jahren seit der ursprünglichen Niederschrift dieses Textes hat das Aufkommen der Risiken durch URE (Unrecoverable Read Errors, nicht behebbare Lesefehler) während eines Wiederherstellungsvorgangs die primären Risiken von den aufgeführten hin zu URE-bezogenen Risiken bei Paritäts-Arrays verschoben.]
