Hot Spare oder ein heißes Chaos
Ein verbreiteter Ansatz, um RAID eine zusätzliche Sicherheitsebene hinzuzufügen, besteht darin, Ersatzlaufwerke bereitzuhalten, damit die Austauschzeit für ein ausgefallenes Laufwerk minimiert wird. Die extremste Form davon wird als “Hot Spare” bezeichnet – ein Ersatzlaufwerk, das sich tatsächlich im Array befindet, aber ungenutzt bleibt, bis das Array einen Laufwerksausfall erkennt, woraufhin das System das ausgefallene Laufwerk automatisch deaktiviert und das Hot Spare aktiviert, genauso, als hätte ein Mensch gerade das eine Laufwerk aus dem Array entfernt und das andere eingesetzt, sodass ein Resilver-Vorgang (ein Wiederaufbau des Arrays) so schnell wie möglich beginnen kann. Dadurch kann die Zeit, ein neues Laufwerk einzuwechseln, von Stunden oder Tagen auf Sekunden verkürzt werden und theoretisch eine extreme Erhöhung der Sicherheit bieten.
Zunächst möchte ich auf etwas eingehen, das ich persönlich für einen Fehler in den Namenskonventionen halte. Was wir als Hot Spare bezeichnen, sollte meiner Ansicht nach eigentlich Warm Spare heißen, denn es liegt zwar einsatzbereit da, enthält aber nicht die notwendigen Daten, um sofort verwendet zu werden. Ein Ersatzlaufwerk, das außerhalb des Gehäuses gelagert wird und bei dem ein Mensch eingreifen und die Laufwerke manuell austauschen muss, wäre ein Cold Spare. Um wirklich ein Hot Spare zu sein, müsste ein Laufwerk voller Daten sein und wäre daher in irgendeiner Form ein aktiv mitwirkendes Mitglied des RAID-Arrays. Red Hat hat einen guten Artikel darüber, wie diese Terminologie auf Disaster-Recovery-Standorte angewendet wird, als Referenz. Diese Unterscheidung ist wichtig, denn was wir Hot Spare nennen, enthält noch keine Daten und übernimmt nicht sofort die Rolle des ausgefallenen Laufwerks, sondern beginnt stattdessen unmittelbar den Prozess, das verlorene Laufwerk wiederherzustellen – eine entscheidende Unterscheidung.
Um die Begriffe klar zu halten, werde ich von hier an das, was Hersteller Hot Spares nennen, als “Warm Spares” bezeichnen. Das wird in Kürze Sinn ergeben.
Es gibt zwei wesentliche Bedenken bei Warm Spares. Das erste ist die Wirkungslosigkeit des Warm Spare in den meisten Anwendungsfällen, und das zweite ist das Risiko der “automatisierten Array-Zerstörung”.
Die meisten Menschen betrachten das Warm-Spare-Konzept als Mittel, um das hohe Risiko eines zweiten Laufwerksausfalls bei einem Paritäts-RAID-5-Array zu mindern. RAID-5-Arrays schützen nur gegen den Ausfall einer einzelnen Festplatte innerhalb des Arrays. Sobald eine einzelne Festplatte ausgefallen ist, bleibt das Array ohne jegliche Form von Parität, und jeder weitere Laufwerksausfall führt zum vollständigen Verlust des Arrays. RAID 5 wird gewählt, weil es für die gegebene Kapazität sehr kostengünstig ist und Zuverlässigkeit opfert, um diese Kosteneffizienz zu erreichen. Da RAID 5 im Vergleich zu anderen RAID-Optionen wie RAID 6 oder RAID 10 daher riskant ist, ist es üblich, ein Warm Spare zu implementieren, um die Zeit zu minimieren, in der das Array in einem degradierten Zustand verbleibt, sodass das Array so schnell wie möglich mit dem Resilvern beginnen kann.
Die hier relevantere Erkenntnis ist also, dass Warm Spares im Allgemeinen als Puffer dafür verwendet werden, weniger zuverlässige RAID-Array-Typen als Sparmaßnahme einzusetzen. Warm Spares sind bei RAID-5-Arrays dramatisch häufiger, gefolgt von RAID-6-Arrays. Beide werden aufgrund der Kosten pro Kapazität gegenüber RAID 10 gewählt, nicht wegen Zuverlässigkeit oder Leistung. Es gibt einen Fall, in dem die Warm-Spare-Idee tatsächlich für zusätzliche Zuverlässigkeit sinnvoll ist, und das ist RAID 10 mit einem Warm Spare, aber dazu kommen wir noch. Abgesehen von diesem Szenario sind Warm Spares meiner Meinung nach in der realen Welt wenig sinnvoll.
Wir beginnen mit der Betrachtung von RAID 1 mit einem Warm Spare. RAID 1 besteht aus zwei oder mehr Laufwerken in einem Spiegel. Das Hinzufügen eines Warm Spare ist insofern schön, als das Warm Spare bei einem Ausfall eines der gespiegelten Laufwerke sofort beginnt, das verbleibende Laufwerk zu spiegeln, und Sie in Kürze wieder geschützt sind. Das ist wunderbar. Bis auf einen kleinen Makel: Anstatt ein Warm Spare zu verwenden, hätte dasselbe Laufwerk die ganze Zeit über zum RAID-1-Array hinzugefügt werden können, wo es ein dritter Spiegel gewesen wäre. In dieser Funktion als dritter Spiegel hätte das Laufwerk zur Gesamtleistung des Arrays beigetragen und eine fast fünfzigprozentige Steigerung der Leseleistung gebracht, während die Schreibleistung gleich geblieben wäre, und im Falle eines Laufwerksausfalls sofortigen Schutz geboten anstatt eines “sobald es neu gespiegelt ist”-Schutzes. Im Grunde wäre es ein echtes “Hot Spare” gewesen statt eines Warm Spare. Ohne also auch nur einen Cent mehr auszugeben, hätte das System eine bessere Leistung des Laufwerks-Arrays und eine bessere Zuverlässigkeit gehabt, einfach indem das zusätzliche Laufwerk in einer heißen “im Array”-Funktion eingesetzt worden wäre, anstatt warm und untätig dazusitzen und auf den Eintritt einer Katastrophe zu warten.
Bei RAID 5 sehen wir eine noch dramatischere Warnung gegen das Warm-Spare-Konzept, und das ausgerechnet dort, wo es häufiger vorkommt als irgendwo sonst. RAID 5 ist ein RAID mit einfacher Parität und der Fähigkeit, mithilfe der Parität jedes ausgefallene Laufwerk im Array wiederaufzubauen. Hier beginnen die eigentlichen Probleme. Anders als bei RAID 1, wo ein erneuter Spiegelvorgang recht schnell sein könnte, hat ein RAID-5-Resilver (Wiederaufbau) das Potenzial, sehr lange zu dauern. Das Warm Spare trägt nicht zum Schutz des Arrays bei, bis dieser Resilver-Prozess erfolgreich abgeschlossen ist – das sind häufig viele Stunden und leicht auch Tage und möglicherweise Wochen oder Monate, abhängig von der Größe des Arrays und davon, wie ausgelastet das Array ist. Würden wir dasselbe Warm-Spare-Laufwerk stattdessen damit beauftragen, mit einem zusätzlichen Paritäts-Stripe ein Mitglied des Arrays zu sein, würden wir RAID 6 erreichen. Derselbe Satz an Laufwerken, den wir für RAID 5 plus Warm Spare haben, würde ein RAID-6-Array mit exakt derselben Kapazität ergeben. Wie im RAID-1-Beispiel oben wäre dies sehr ähnlich wie ein Hot Spare, bei dem das Laufwerk mit Live-Daten am Array teilnimmt, anstatt untätig dazusitzen und auf den Ausfall eines weiteren Laufwerks zu warten, bevor es einspringt, um den Prozess der Übernahme zu beginnen. In dieser Funktion degradiert das Array im Falle eines Ausfalls auf ein RAID-5-Äquivalent, jedoch ohne jegliche Wiederaufbauzeit, sodass das zusätzliche Laufwerk sofort nützlich ist, anstatt erst nach einem möglicherweise sehr langwierigen Resilver-Prozess. Für dasselbe Geld und dieselbe Kapazität ist die Wahl, die Laufwerke in RAID 6 statt in RAID 5 plus Warm Spare einzurichten, also ein vollständiger Gewinn.
Wir können dieses Beispiel mit RAID 6 plus Warm Spare fortsetzen. Dieser Fall ist etwas weniger einfach zu definieren, denn in den meisten RAID-Systemen gibt es, mit Ausnahme des etwas selteneren RAIDZ3 von ZFS, kein System mit dreifacher Parität eine Stufe über RAID 6 (man stelle sich vor, es gäbe beispielsweise ein RAID 7). Gäbe es das, würde genau das Argument, das für RAID 5 plus Warm Spare angeführt wurde, auch für RAID 6 plus Warm Spare gelten. In den meisten Fällen muss sich RAID 6 mit einem Warm Spare gegenüber einem RAID-10-Array rechtfertigen. RAID 10 ist leistungsfähiger und weitaus zuverlässiger als ein RAID-6-Array, aber RAID 6 wird im Vergleich zu RAID 10 in der Regel gewählt, um Geld zu sparen. Doch um die Fragilität von RAID 6 auszugleichen, werden manchmal Warm Spares eingesetzt. In einigen Fällen, etwa bei einem kleinen RAID-6-Array mit fünf Festplatten und einem Warm Spare, ist dies Dollar für Dollar gleichwertig mit einem RAID-10-Array aus sechs Festplatten ohne Warm Spare. Bei größeren Arrays wird der Kostenvorteil von RAID 6 zwar deutlich, aber je größer die Kostenersparnis, desto größer das Risikogefälle, denn Paritäts-RAID-Systeme erhöhen das Risiko mit der Array-Größe viel schneller als spiegelbasierte RAID-Systeme wie RAID 10. Jedes heute gesparte Geld wird auf das Risiko eines Ausfalls oder Datenverlusts von morgen hin gespart.
Wo ein Warm Spare wirkungsvoll zum Tragen kommt, ist bei einem RAID-10-Array, bei dem ein Warm-Spare-Wiederaufbau ein Spiegel-Wiederaufbau ist, wie bei RAID 1, der keine Paritätsrisiken birgt, und wo es keine logische Erweiterung des RAID-Systems oberhalb von RAID 10 gibt, gegenüber der wir durch den Wechsel zu einem fragileren System Geld zu sparen versuchen. Hier kann das Hinzufügen eines Warm Spare für kritische Arrays sinnvoll sein, da es keinen kostengünstigeren Weg gibt, die gleiche zusätzliche Zuverlässigkeit zu erlangen. RAID 10 ist jedoch auch ohne Warm Spare so zuverlässig, dass jeder Betrieb, der RAID 5 oder RAID 6 mit einem Warm Spare in Erwägung zieht, logischerweise bei einfachem RAID 10 stehenbleiben würde, da er die Zuverlässigkeit, mit der er sich zuvor zufriedenzugeben erwog, bereits übertroffen hat. Nur Betriebe, die diese fragileren Systeme nicht in Betracht ziehen und nach der robustestmöglichen Option suchen, würden logischerweise RAID 10 plus Warm Spare als ihre Lösung in Betracht ziehen.
Nur zur technischen Genauigkeit: RAID 10 kann für bessere Leseleistung und eine dramatische Verbesserung der Zuverlässigkeit (allerdings mit einer fünfzigprozentigen Kostensteigerung) erweitert werden, indem man in seinem RAID-0-Stripe auf RAID-1-Spiegel aus drei Festplatten statt auf herkömmliche RAID-1-Spiegel aus zwei Festplatten übergeht, genauso wie wir es in unserem RAID-1-Beispiel gezeigt haben. Dies ist ein Maß an Zuverlässigkeit, das in der realen Welt selten angestrebt wird, das es aber geben kann und das eine Option darstellt. Normalerweise wird dies durch Beschränkungen bei der Laufwerksanzahl in physischen Array-Gehäusen eingeschränkt sowie dadurch, dass es schlecht abschneidet gegenüber dem Aufbau eines völlig separaten zweiten RAID-10-Arrays in einem anderen Gehäuse und dem anschließenden Spiegeln dieser beiden auf einer höheren Ebene, was effektiv RAID 101 erzeugt – was das tatsächliche Ergebnis verbreiteter, hochwertiger Storage-Array-Cluster von heute ist.
Unser zweites Bedenken ist das der “automatisierten Array-Zerstörung”. Dies gilt nur für die Paritäts-RAID-Szenarien von RAID 5 und RAID 6 (oder die seltenen RAID 2, RAID 3, RAID 4 und RAIDZ3). Beim Warm-Spare-Konzept ist die Idee, dass bei einem Laufwerksausfall das Warm Spare automatisch und sofort vom Array-Controller eingewechselt wird und der Prozess des Resilverns des Arrays unmittelbar beginnt. Wäre Resilvern ein völlig zuverlässiger Prozess, wäre dies offensichtlich höchst willkommen. Die Realität sieht leider ganz anders aus.
Während eines Resilver-Prozesses ist ein Paritäts-RAID-Array dem Risiko ausgesetzt, dass nicht behebbare Lesefehler (Unrecoverable Read Errors, UREs) auftreten. Tritt ein URE während eines Resilvers eines RAID mit einfacher Parität auf (also RAID 2 – 5), dann schlägt der Resilver-Prozess fehl und das Array ist vollständig verloren. Dies ist entscheidend zu verstehen, denn es ist kein zusätzliches Laufwerk ausgefallen. Wäre das Warm Spare also nicht vorhanden gewesen, hätte das Resilvern nicht begonnen, und die Daten wären noch intakt und verfügbar – nur nicht so schnell wie üblich und mit dem geringen Risiko eines zweiten Laufwerksausfalls. Die URE-Raten sind bei den großen Laufwerken von heute sehr hoch, und bei großen Arrays können die Risiken so hoch werden, dass sie sich während eines normalen Resilver-Vorgangs von “möglich” zu “erwartbar” verschieben.
In vielen Fällen könnte das Warm Spare selbst also tatsächlich der Auslöser für den Datenverlust sein und nicht, wie erwartet, der Retter der Daten. Ein Array, das überlebt hätte, könnte durch den Resilver-Prozess zerstört werden, bevor der Mensch, der es verwaltet, überhaupt darüber informiert wird, dass das erste Laufwerk ausgefallen ist. Wäre ein Mensch beteiligt gewesen, hätte er zumindest den Schritt unternehmen können, ein frisches Backup des Arrays zu erstellen, bevor er das Resilvern anstößt, in dem Wissen, dass die neueste Kopie der Daten verfügbar wäre, falls der Resilver-Prozess nicht erfolgreich verläuft. Es würde dem Menschen auch erlauben zu planen, wann das Resilvern beginnen soll, möglicherweise zu warten, bis die Geschäftszeiten vorüber sind oder das Wochenende begonnen hat, wenn es weniger wahrscheinlich ist, dass das Array eine hohe Last erfährt.
RAID mit doppelter und dreifacher Parität (RAID 6 beziehungsweise RAIDZ3) teilen ebenfalls die URE-Risiken, da auch sie auf Parität basieren. Sie mindern dieses Risiko durch die zusätzlichen Paritätsebenen und tun dies größtenteils erfolgreich. Das Risiko besteht weiterhin, insbesondere bei sehr großen RAID-6-Arrays, aber für die nächsten Jahre bleiben die Risiken für die Mehrheit der Storage-Arrays im Allgemeinen recht gering, bis weitaus größere spindelbasierte Speichermedien auf dem Markt verfügbar sind.
Das größte Problem bei Paritäts-RAID und dem URE-Risiko ist, dass der Treiber hin zu Paritäts-RAID (die Bereitschaft, zusätzliche Risiken für die Datenintegrität in Kauf zu nehmen, um die Kosten zu senken) derselbe Treiber ist, der ein erhöhtes URE-Risiko einführt (der Kauf günstigerer SATA-Festplatten ohne Enterprise-Qualität). Betriebe, die sich für Paritäts-RAID entscheiden, tun dies in der Regel mit großen, günstigen SATA-Laufwerken und bringen damit zwei sehr gefährliche Faktoren zu einer explosiven Kombination zusammen. Die Verwendung von nicht-paritätsbasiertem RAID 1 oder RAID 10 beseitigt das Problem vollständig, und die Verwendung hochzuverlässiger Enterprise-SAS-Laufwerke reduziert den Risikofaktor drastisch um eine Größenordnung (das ist keine Redewendung, es ist tatsächlich eine Veränderung um eine Größenordnung).
Zusätzlich kann sich während Resilver-Vorgängen die Leistung bei Paritätssystemen so drastisch verschlechtern, dass dies einem langfristigen Ausfall gleichkommt. Der Resilver-Prozess kann, besonders bei großen Arrays, so intensiv sein, dass Endbenutzer nicht zwischen einem vollständig ausgefallenen Array und einem resilvernden Array unterscheiden können. Tatsächlich kann Resilvern im Extremfall so lange dauern und so störend sein, dass die Kosten für das Unternehmen höher sein können, als wenn das Array einfach vollständig ausgefallen und stattdessen eine Wiederherstellung aus dem Backup vorgenommen worden wäre. Dieses Resilver-Problem betrifft RAID 1 und RAID 10 nicht, wiederum weil sie gespiegelte und keine Paritäts-RAID-Systeme sind und ihr Resilver-Prozess trivial ist und die Leistungseinbußen des Systems minimal und kurzlebig sind. Im Extremfall könnte ein Paritäts-Resilver Wochen oder Monate dauern, während derer sich die Systeme verhalten, als seien sie offline – und an jedem Punkt während dieses Prozesses besteht das Potenzial, dass die oben erwähnten URE-Fehler auftreten, die das Resilvern beenden und ohnehin die Wiederherstellung aus dem Backup erzwingen würden. (Typische Resilver-Vorgänge dauern keine Wochen, aber sie dauern viele Stunden, und dass sie Tage dauern, ist keineswegs ungewöhnlich.)
Unsere abschließende Übersicht lässt sich auf Folgendes herunterbrechen (der konventionelle Begriff “Hot Spare” wird wieder verwendet): RAID 10 ohne ein “Hot Spare” ist fast immer die bessere Wahl als RAID 6 mit einem “Hot Spare”. RAID 6 ohne ein “Hot Spare” ist immer besser als RAID 5 mit einem “Hot Spare”. RAID 1 mit einem zusätzlichen Spiegelmitglied ist immer besser als RAID 1 mit einem “Hot Spare”. Welche RAID-Stufe mit Hot Spare Sie also auch wählen, gehen Sie einfach eine Stufe in der RAID-Zuverlässigkeit nach oben und lassen Sie das “Hot Spare” weg, um sowohl Leistung als auch Zuverlässigkeit bei gleichen oder nahezu gleichen Kosten zu maximieren.
Warm Spares hatten, ebenso wie Paritäts-RAID, ihre Glanzzeit. Tatsächlich war es zu der Zeit, als Paritäts-RAID für den breiten Einsatz noch sinnvoll war – als URE-Fehler unwahrscheinlich und Festplattenkosten hoch waren –, dass auch Warm-Spare-Laufwerke sinnvoll waren. Sie passten gut zusammen; wenn das eine sinnvoll war, war es oft auch das andere. Was häufig übersehen wird, ist, dass Paritäts-RAID, insbesondere RAID 5, mit dem Verlust seiner Wirksamkeit das Warm Spare auf unerwartete Weise mit sich gezogen hat.
