Wenn Sie zwei physische Laufwerke haben:
RAID0: Schnell, aber keine Redundanz. Jeder Laufwerksfehler tötet das gesamte Array. Einige Leute legen temporären Speicher auf RAID0 (dh Tempdb unter MSSQL), aber ich würde dies immer noch als gefährlich betrachten, da Sie keine aussagekräftigen Daten verlieren, wenn das Array umfällt, Sie einen Serverausfall haben, bis die Situation repariert ist.
RAID1: Wählen Sie dies, wenn Sie zwei Laufwerke haben. Es gibt keinen Vorteil für die Schreibleistung, obwohl die Leseleistung bei einem guten Controller möglicherweise zunimmt. Das Hauptmerkmal von RAID1 ist, dass eines der Laufwerke im Sterben liegt.
Wenn Sie drei physische Laufwerke haben:
Ihre Optionen sind RAID5, das nicht standardmäßige RAID10 mit drei Laufwerken (oder RAID1E, wie IBM Controller es bezeichnen), sofern es unterstützt wird. Sie können natürlich RAID1 verwenden und das zusätzliche Laufwerk als Ersatz für den Fall, dass eines der anderen ausfällt, aufbewahren. In einer geschäftskritischen Umgebung sollten Sie jedoch trotzdem Ersatzlaufwerke bereithalten, damit dies selbstverständlich ist.
RAID5 bietet mehr Speicherplatz als RAID10 (zwei Laufwerke anstelle von eineinhalb), kann jedoch zu Schreibproblemen führen, da der Controller für jeden geschriebenen Block den Paritätsblock lesen, aktualisieren und zurückschreiben muss. Dieses Schreibleistungsproblem kann für Datenbankschreibvorgänge verdoppelt werden, da für jedes Update mindestens zwei Schreibvorgänge ausgeführt werden: einer im Transaktionsprotokoll und einer im eigentlichen Datenbereich. Da der Speicherplatz heutzutage günstig ist, würde ich RAID10 mit 3 Laufwerken empfehlen, wenn dies für eine bessere Schreibleistung unterstützt wird. Das Software-RAID von Linux bietet dies ebenso wie viele IBM-Controller (sie nennen es RAID1E). Möglicherweise finden Sie es auch unter anderen Namen, da es nicht als Standard-Arrangement gilt und daher keinen Standardnamen hat.
Sowohl R5 als auch R10-over-Three bieten dieselbe Redundanz (jedes Laufwerk kann gleichzeitig ausfallen und das Array überleben) und ähnliche Messwerte für die Leseleistung (ähnlich einem RAID0-Array mit zwei Laufwerken).
Wenn Sie vier physische Laufwerke haben:
Wenn Sie nur ein Array erstellen, gibt es zwei Optionen (ohne Berücksichtigung von "mit Hot-Spare" -Varianten): RAID6 und "traditionelles" RAID10 (ein RAID0 von RAID1s).
Beide geben den gleichen Platz (zwei Laufwerke Ihrer vier). RAID6 bietet eine bessere Redundanz, da zwei Laufwerke gleichzeitig ausfallen können, da RAID10 nur vier der sechs möglichen Situationen mit zwei Laufwerken überleben kann. Beide bieten eine Simialr-Leseleistung, aber RAID6 weist ein ähnliches Schreibleistungsproblem wie RAID5 auf (dasselbe gilt für einen guten Controller, obwohl es auf einem schlechten Controller langsamer sein kann als RAID5, oder mit Software-RAID, je nach Betriebssystem und E / A-Steuerungsfunktionen. RAID10 ist dies Normalerweise aus Performancegründen für Datenbanken bevorzugt. Wenn Sie die zusätzliche Redundanz benötigen, können Sie sechs Laufwerke verwenden und RAID0 oder RAID1 mit zwei oder drei Laufwerken verwenden.
Sobald Sie vier oder mehr Laufwerke haben, werden die Dinge interessanter, da Sie ein separates Paar RAID1-Arrays haben könnten. Dies kann erhebliche Performance-Vorteile bei sich drehenden Datenträgern bieten, indem Ihre Datenspeicher auf einem Array und Transaktionsprotokolle auf einem anderen aufbewahrt werden. Dies kann in einigen Fällen die Kopfbewegungen erheblich reduzieren und Suchzeiten aufgrund "zufälliger" Zugriffe sind ein echter Performance-Killer. Wenn dies für ein Data Warehouse bedeutet, dass relativ gesehen nur sehr wenige Schreibvorgänge ausgeführt werden, kann das Aufteilen von Transaktionsprotokollen aus Datendateien von geringerem Nutzen sein. Sie möchten jedoch möglicherweise mehrere Arrays in Betracht ziehen und stattdessen Ihre Daten über diese partitionieren, um möglicherweise eine bessere Leseleistung zu erzielen .
Wenn Sie mehr als vier Laufwerke haben:
Ihre Optionen werden hier offen und es hängt wirklich davon ab, was Ihre Daten sind und welche Aktualisierungen / Leselasten / Muster Sie erwarten. Beispielsweise läuft einer unserer Dienste auf Laufwerken mit 12 bis 70 GB:
- 4x als RAID10 für die Systembereiche (OS, SQL Server (in unserem Fall MSSQL), Swap, Tempdb).
- 4x als RAID10 für die Datendateien
- 4x als RAID10 für die Transaktionsprotokolle
Tempdb wird auf dem Systemarray beibehalten. Wir könnten es auf die anderen beiden Arrays verschieben und das System-Array einfach als 2 Laufwerke in RAID1 ausführen, da die zusätzliche Geschwindigkeit für die System-Chunks nicht sehr wichtig ist (da dies nur beim Booten oder beim Austauschen von Bedeutung ist und wir sicherstellen, dass dies der Fall ist genug RAM, um es niemals tauschen zu müssen), aber mit der Art und Weise, wie wir den Hosting-Anbieter für diese Gruppe von Computern bezahlen, würde es uns nicht weniger kosten, die beiden Laufwerke fallen zu lassen. Sicherungen werden auch auf dem Systemarray abgelegt, bevor sie auf die Off-Server-, Off-Site- und Offline-Sicherungsspeicherorte kopiert werden.
Natürlich ist dies für einige Datenbanken ein schwerwiegender Overkill (es hätte keinen Sinn, einen kleinen Blog-Server auf diese Weise zu betreiben!), Aber unsere Haupt-App funktioniert mit dieser Anordnung sehr gut.
Wenn Sie sechs Laufwerke haben, können Sie drei RAID1-Arrays oder zwei RAID10-Arrays mit drei Laufwerken in Betracht ziehen.
Allgemein
Es gibt leider kein wirklich einfaches "Best Practice", da es sehr stark von der Größe und den Verwendungsmustern Ihres Systems abhängt. Die einzigen allgemeinen Regeln, an die ich denken kann, sind:
- Vermeiden Sie RAID 5 und 6, es sei denn, Sie wissen, dass das Problem mit der Schreibleistung Sie nicht wesentlich beeinträchtigt
- Bei vier oder mehr auf sich drehenden Festplatten basierenden Laufwerken sollten Sie erwägen, die Daten auf mehrere Arrays aufzuteilen, um die Kopfbewegungen zu verringern (der volle Nutzen mehrerer Arrays gilt nicht für gute SSDs, da keine physischen Kopfbewegungen zu berücksichtigen sind, obwohl Sie je nach Modell möglicherweise einen Unterschied feststellen die Schreibkombinationsstrategie des SSD-Controllers usw.)
- Testen, testen und erneut testen: Es ist immer gut, Zeit zu finden, um zu überprüfen, ob das von Ihnen gewählte Arrangement tatsächlich optimal ist
Hardware- oder Software-RAID?
Früher lag die Leistung von Software-RAID aufgrund der Paritätsberechnungen und aller Vorkehrungen aufgrund langsamer Schnittstellen zwischen Laufwerken und CPU unter der von Hardware-RAID für RAID 5. Bei modernen CPUs ist das Problem der Paritätsberechnung nicht wirklich ein Problem, aber wenn Sie sehr schnelle Laufwerke haben, kann Hardware-RAID immer noch gewinnen, wenn die Gesamtgeschwindigkeit der Laufwerke überall hin kommen kannIn der Nähe (innerhalb einer Größenordnung, eine Vermutung), wie schnell die Maschine mit dem Plattencontroller sprechen kann. Wenn Sie ein RAID1-Array mit vier Laufwerken (dh vier Kopien der gleichen Daten für viele Redundanzen) mit Software-RAID verwenden, sendet das Betriebssystem bei jedem Schreibvorgang möglicherweise nacheinander vier Datenmengen mit einer Hardware an den E / A-Controller controller Das Betriebssystem sendet nur eine Schreibanforderung und die Steuerung sendet diese an die vier Laufwerke, wahrscheinlich parallel.
Ein gutes Hardware-RAID kann auch andere Vorteile bieten: Einige hochwertige Controller verfügen über einen Schreibcache mit Batteriesicherung, sodass ausstehende Schreibvorgänge bei einem Stromausfall nicht verloren gehen, auch wenn beispielsweise Ihre USV ausfällt.
Software-RAID ist offensichtlich billiger und portabler, sodass Sie nicht an einen bestimmten Controller gebunden sind, wenn Sie die Arrays aufgrund eines Controller- / Maschinenfehlers verschieben müssen.
Billiges Hardware-RAID kombiniert normalerweise die Nachteile von Software- und Hardware-RAID mit wenigen (oder keinen) Vorteilen, die am besten vermieden werden.
Ich neige dazu, Software-RAID auf unseren Entwicklungs-, Test- und UAT-Servern und gutes Hardware-RAID für Server zu verwenden, auf denen kundenseitige / öffentlich zugängliche Dienste ausgeführt werden.