Allgemein

Unter Raid versteht sich die Aggregation mehrerer Festplatten zur gemeinsamen Nutzung in einem Pool. Das geschieht aus verschiedenen Gründen:

  • zur Absicherung vor einem Datenverlust oder einem Ausfall des Systems
  • um die Performance mehrerer physikalischer Medien gleichzeitig zu nutzen
  • zur Schaffung großer Menge an Speicherplatz in einem Volumen

Prinzipiell gibt es drei Varianten von Raid-Systemen und Sonderformen. Zum einen gibt es das sogenannte Software Raid, bei welchem alles in Software gemacht wird. Zum anderen gibt es das sogenannte Hardware Raid, bei welchem ein seperater Controller - meist als Steckkarte, teilweise aber auch auf dem Mainboard integriert - die Arbeit übernimmt. Die dritte Variante bezeichnet man als Fake Raid, bei dem die Nachteile von Soft- und Hardware Raid kombiniert werden, weshalb diese Form nicht als empfehlenswert gilt.

Überblick der Raid Architekturen

Software RAID

Nutzt für die Berechnung den Hostprozessor und den Ram des Hosts. Bei einem Stromausfall sind noch nicht geschriebe Daten verloren. Ein Umzug von alter auf neue Hardware ist grundsätzlich möglich; Optimalerweise läuft auf beiden Systemen der selbe Kernel, aber auch bei unterschiedlichen Kernelversionen ist eine sofortige Inbetriebnahme des alten Raid Verbunds meist möglich.

Hardware RAID

Nutzt für die Berechnung einen eigenen Prozessor speziell optimiert auf die Berechnung/Verwaltung von Raid-Systemen. Bei einem Stromausfall sind die gecachten Daten, welche noch nicht geschrieben wurden verloren. Das System kann aber um eine entsprechende Battery Backup Unit erweitert werden, wodurch ein Datenverlust verhindert wird. Ein Umzug auf neue Hardware ist möglich, sofern der selbe Raid-Controller zum Einsatz kommt. Bei unterschiedlichen Raid-Controllern ist ein erfolgreiches Einbinden nicht gewährleistet.

Einer der größten Vorteile von echtem Hardware-Raid gegenüber Fake-Raid liegt in der Verfügbarkeitsdauer von Hardware-Raid-Controllern. Diese sind meist über 10 Jahre problemlos verfügbar und werden auch über diesen Zeitraum gewährleistet.

Fake RAID

Wie bei einem Software Raid wird hier die CPU und der RAM des Host-Systems genutzt. Fakeraid ist also langsamer als ein echtes Hardware Raid. Wie bei Hardware Raid ist ein Umzug der Platten meist nur möglich, wenn derselbe Raid-Controller genutzt wird. Da Fakeraid meist auf Mainboards im Einsatz ist, also onBoard, ist das selbe Mainboard notwendig. Während die Verwendung von Fakeraid also bei einigen Windows-Versionen Sinn machen kann, die nicht über Software-Raid funktionalität verfügen, sollte es bei Linux-Systemen vermieden werden. Es bringt auch keinerlei Geschwindigkeitsvorteil gegenüber dem Software Raid.

Sonderformen

Als Sonderform sei an dieser Stelle ZFS genannt. ZFS ist ein Dateisystem und vereint ein Software Raid mit einem Volume Manager (LVM). Anders als Software Raid bietet es auch Schutz vor Silent Corruption, Online-Repair und weitere Features. Während ZFS bis vor einiger Zeit allein Solaris- und FreeBSD-Systemen vorbehalten blieb, existiert mittlerweile ein Port für Linux. Gegenüber ZFS unter Solaris und FreeBSD hat ZFS-on-Linux zur Zeit noch einige Einbußen in puncto Performance und kleinere Bugs (Stand Mitte 2012), auf Grund derer von einem Produktivbetrieb derzeit noch abzuraten ist.

Raid Level

Die gängigsten Raid Level sind (Raid Level / Mindestanzahl der Festplatten):

Level Min Beschreibung
0 2 Bei Raid 0 handelt es sich um Striping, hierbei werden Blöcke auf mehrere Festplatten verteilt und ein paralleler Zugriff auf die Daten wird möglich. Somit wird Raid 0 für erhöhte Performance genutzt, es bietet allerdings keinerlei Redundanz - Bei einem Ausfall einer Platte, ist der komplette Verbund betroffen und es kommt zu Datenverlust
1 2 Bei Raid 1 handelt es sich um Mirroring (Spiegelung) hierbei werden auf allen Festplatten dieselben Daten gespeichert. Fällt eine Festplatte aus, übernimmt die andere. Raid 1 darf nicht als Backup-Variante verstanden werden; Wird durch einen Ausfall eine Datei beschädigt, wird diese gespiegelt und somit findet sich auf beiden Festplatten die defekte Datei.
5 3 Bei Raid 5 handelt es sich um Parität + Leistung. Eine der vorhandenen Festplatten hält dabei die Paritätsinformationen, die anderen Platten werden zusammengefasst. Aus 3x 500 GB werden so 1 TB nutzbare Daten. Gesteigerte Leistung ergibt sich beim Lesen. Bei vielen und kleinen Schreibzugriffen sollte ein Raid 10 bevorzugt werden. Bei einem Raid 5 kann eine Festplatte ohne Datenverlust ausfallen.
6 4 Ein Raid 6 funktioniert im Grunde wie ein Raid 5, mit dem Unterschied das bei Raid 6 zwei Festplatten ausfallen können.
10 4 Raid 10 entspricht einer Kombination aus Raid 1 und Raid 0. Dabei werden mehrere Raid 1 Verbünde (Redundanz) in einem Raid 0 Verbund (Leistung) verbunden. Praktisch kann hier je Raid 1 Verbund eine Festplatte ausfallen (angenommen die Raid1 Verbünde bestehen aus je 2 Festplatten).

Software Raid im Detail

Einrichtung

Zum Einrichten wird "mdadm" benutzt. Generell lautet die Syntax:

mdadm --create md-device --level=raid-level raid-discs

Soll also ein Software Raid 1 eingerichtet werden mit den Festplatten sda und sdb:

mdadm --create /dev/md0 --level=1 /dev/sda /dev/sdb

Einrichtungsbeispiel

Soll ein Raidverbund mit einer fehlenden Festplatte eingerichtet werden, weil auf gerade dieser das zur Zeit laufende System im Einsatz ist, lässt sich der Parameter "missing" bei mdadm verwenden. Angenommen ein Raid 10 mit einer fehlenden Festplatte soll erstellt werden

mdadm --create /dev/md0 --level=10 /dev/sdb /dev/sdc /dev/sdd missing

Das Schlüsselwort "missing" sorgt dafür das ein degraded raid array erzeugt wird. Nach Anlegen des Filesystems können nun alle Dateien von dem derzeit laufendem System (z.B. /dev/sda) auf das Raid kopiert werden.

Wenn ein Backup angelegt wurde(!) und alle Daten auf das Raid kopiert wurden, das booten von dem Raid geklappt hat, kann die fehlende Festplatte hinzugefügt werden

mdadm --manage /dev/md0 --add /dev/sda

Dies wird das Array resyncen, die neue Disc zunächst als spare adden (normal) und sobald das Array gesynced ist die als spare markierte Festplatte in das Raid Array einbinden.

Praktisches Beispiel:

Ein vorhandenes System mit Raid 10 über 4 Festplatten ist im Einsatz. Nun steht ein Wechsel auf Raid 5 bevor. Es gilt 400 GB an Nutzdaten nicht zu verlieren (zu diesem Zweck wurde ein Backup angelegt). Zunächst wird eine Festplatte mit --fail markiert und aus dem Verbund gelöst:

mdadm --manage /dev/md0 --fail /dev/sdd3
mdadm: set /dev/sdd3 faulty in /dev/md0
mdadm --manage /dev/md0 --remove /dev/sdd3
mdadm: hot removed /dev/sdd3 from /dev/md0

Nun wird mittels cfdisk eine neue große Partition erstellt. Um sicherzustellen das die neue Partitionierung erkannt wird, wird der Befehl partprobe genutzt, anschliessend wird ein Filesystem erstellt:

partprobe
mkfs.ext4 /dev/sdd1

Jetzt kann das alte Raid gemountet werden um die Daten zu kopieren:

mount /dev/md0 /mnt
mkdir /new
mount /dev/sdd1 /new
mkdir /new/backup
cp -rva /mnt/* /new/backup/

Sobald der Kopiervorgang abgeschlossen ist, kann das Raid 5 erstellt werden. "missing" beachten, in diesem Fall ist sdb die Root-Festplatte und sdd wird später dem Raid erneut hinzugefügt:

mdadm --create /dev/md0 -n 4 -c 128 -l 5 -e 0.90 /dev/sda /dev/sdc missing /dev/sde

Jetzt kann ein Filesystem angelegt werden auf dem neuen Raid-System:

mkfs.ext4 -L raidarray -m 0.01 -O dir_index,extent,large_file,
 uninit_bg,sparse_super -b 4096 -E stride=32,stripe-width=96  /dev/md0

Und die Daten wieder auf das Raid kopieren:

mount /dev/md0 /mnt/
cp -rva /new/back/* /mnt/

Sicherstellen das alles richtig ist, nach einem reboot alles noch klappt und dann kann die fehlende Festplatte in den Raidverbund aufgenommen werden:

mdadm --manage /dev/md0 --add /dev/sdd

Das Synchronisieren lässt sich dann in /proc/mdstat beobachten:

root@localhost ~ # cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid10] [raid6] [raid5] [raid4]
md0 : active raid5 sdd[4] sde[3] sdc[1] sda[0]
1465156224 blocks level 5, 128k chunk, algorithm 2 [4/3] [UU_U]
[>....................]  recovery =  0.4% (2229604/488385408) 
 finish=164.3min speed=49285K/sec

unused devices: 

und:

root@localhost ~ # mdadm -D /dev/md0
/dev/md0:
Version : 0.90
Creation Time : Fri Jan 21 23:15:04 2011
Raid Level : raid5
Array Size : 1465156224 (1397.28 GiB 1500.32 GB)
Used Dev Size : 488385408 (465.76 GiB 500.11 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Sat Jan 22 01:52:06 2011
State : active, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1

Layout : left-symmetric
Chunk Size : 128K

Rebuild Status : 0% complete

UUID : 9d9c58b9:cc143e44:04894333:532a878b (local to host localhost)
Events : 0.15230

Number   Major   Minor   RaidDevice State
0       8        0        0      active sync   /dev/sda
1       8       32        1      active sync   /dev/sdc
4       8       48        2      spare rebuilding   /dev/sdd
3       8       64        3      active sync   /dev/sde

Ausfall & Festplatte Ersetzen

Es kann durch Hardwareprobleme oder Stromausfall dazu kommen, dass ein Raid nicht mehr richtig funktioniert, weil eine oder mehr Festplatten aus dem Raidverbund "gefallen" sind. In diesem Fall sind die Daten nicht verloren. Das Raid Array muss lediglich manuell wieder zusammen gesetzt werden. Hierbei hilft die Option --assemble. Wichtig ist hierbei, das beispielsweise bei einem Raid 5 genau die Festplatten ausgewählt wurden, die zuletzt noch aktiv waren. Angenommen bei einem Software Raid 5 bestehend aus sda sdb und sdc, wären dies sdb und sdc:

mdadm --stop /dev/md0
mdadm --assemble /dev/md0 /dev/sdb /dev/sdc --force

Die fehlende Festplatte (sda) die als erstes ausgestiegen ist, kann nun einfach hinzugefügt werden:

mdadm --add /dev/md0 /dev/sda

Daraufhin steht das Raidarray wieder zur Verfügung (wird sich allerdings synchronisieren). Es ist auch möglich eine Festplatte im Betrieb zu entfernen um diese mit einer neuen Festplatte zu ersetzen (dabei beachten, das bei einem Raid 5 nur maximal eine Festplatte entfernt werden kann). Dies geschieht mit der Option --remove:

mdadm --remove /dev/md0 /dev/sdb

Mithilfe von --add kann die neue Festplatte dann wieder hinzugefügt werden. Werden Partitionen verwendet statt der gesamten Festplatten, muss die neue Festplatte exakt wie die vorherige partitioniert werden.

Optimierungen

Mit Ausnahme der Resync Geschwindigkeit und Filesystem-Optimierung sind die hier genannten Optimierungen vor dem produktiven Einsatz zu testen; Es kann unter Hochlast zu I/O Fehlern kommen, wenn zu hohe Werte angegeben werden. Weiterhin gilt es zu Beachten, dass es durch die Erhöhung von Cache-Werten im Falle eines Ausfalls dazu kommen kann, das Daten fehlerhaft geschrieben wurden oder dadurch dass diese noch im Cache sind gar nicht geschrieben werden.

Resync-Geschwindigkeit

Der Befehl cat /proc/mdstat zeigt die aktuelle Geschwindigkeit mit der der Verbund synchronisiert wird an:

[>....................]  recovery =  0.4% (2229604/488385408)
finish=164.3min speed=49285K/sec

In /sys/block/md0/md/sync_speed_min ist die minimal Geschwindigkeit angegeben. Diese lässt sich erhöhen (sofern Mainboard/Prozessor/Controller/Bus-System eine solche Übertragung schaffen).

echo 80000 > /sys/block/md0/md/sync_speed_min

Das Ergebnis dieser Optimierung:

[====>................]  recovery = 20.3% (99441640/488385408)
finish=88.9min speed=72893K/sec

Filesystem

Bei der Verwendung eines Software Raid 5 und ext-Filesystem lässt sich die Chunk- und Stripesize einstellen. Diese angepasst an das Raid sorgt für ein optimales Zusammenspiel von Software Raid und Dateisystem:

Bei einem Raid 10 mit 4 Festplatten und einer Chunksize von 128k wird bei Ext3/4 eine Stride Size von 32 und eine Stripe Width von 64 eingestellt. Die Chunksize des Dateisystem bleibt bei 4K.

Bei einem Raid 5 mit 4 Festplatten und einer Chunksize von 256k wird bei Ext3/4 eine Stride Size von 32 und eine Stripe Width von 96 eingestellt. Die Chunksize des Dateisystems bleibt bei 4K.

Ein Tool zum Berechnen findet sich hier: http://busybox.net/~aldot/mkfs_stride.html

Lese Geschwindigkeit

Mithilfe von "blockdev --setra" lässt sich die Lese-Geschwindigkeit bei Festplatten und dem Raid-Array erhöhen. Dadurch ist eine Geschwindigkeitssteigerung beim Lesen von 3-10% möglich.

blockdev --setra 4096 /dev/sda
blockdev --setra 4096 /dev/sdb
blockdev --setra 8192 /dev/md0

--setra setzt den Readahead in 512-Byte Sektoren

Wichtig

Werte nicht übertreiben/Mit hoher I/O Last testen.

Schreib Geschwindigkeit

Diese Optimierung steht nur bei Verwendung von Raid 5, nicht aber bei Raid 10 zur Verfügung. Der Linux Kernel verwendet teilweise veraltete Werte für den Stripe Cache:

root@localhost ~ # cat /sys/block/md0/md/stripe_cache_active
0
root@localhost ~ # cat /sys/block/md0/md/stripe_cache_size
256

Nach dem Anheben des Wertes von 256 auf 8192 und verursachen von hoher Bandbreite mittels dd:

jean@localhost ~ $ cat /sys/block/md0/md/stripe_cache_active
7146

Die Schreibgeschwindigkeit ließ sich von ~144 MB/s auf ~219 MB/s steigern. Getestet mit dd, unterschiedlicher Blocksize (1024 bis 8192) und dem doppelten des verfügbaren RAM (8 GB).

 

Hotline
 
Hotline des Rechenzentrums

Fragen? Rufen Sie uns an!
Montag - Freitag 10:00 - 19:00 Uhr

+49 69 - 900 180 - 0

 
Aktionen & News
 

Dedizierte Supermicro Xeon Server - ab 70,00 Euro

Angebote

 

Zweiter Standort
 
Hotline des Rechenzentrums

Erfahren Sie mehr über unseren zweiten Standort in der Hanauer Landstrasse in Frankfurt am Main.

mehr erfahren

Zertifizierungen
 
TüV geprüftes Rechenzentrum
ISO 27001 zertifiziertes Rechenzentrum
ISO 9001 zertifiziertes Rechenzentrum


Knowledge Base
 

Hilfreiche Artikel zum Thema Netzwerk, Server & IT.

mehr erfahren


Galerie
 

Sehen Sie sich in einem virtuellen Rundgang in unserem Rechenzentrum um:

Niederspannungshauptverteilung Unterbrechungsfreie Strom Versorgung
Kaltwassererzeuger Bereitstellung individueller SAT-Dienstleistungen


100% Ökostrom
 
100% Öko-Strom