erkläre mds raid10, f2

14

Ich weiß, wie die meisten RAIDs funktionieren. Aber ich bin auf den empfohlenen raid10, f2- Modus gestoßen, als ich nach Linux-Software-RAID gesucht habe . Ich verstehe nicht wirklich, wie es auf 2 oder 3 Festplatten funktioniert. könnte es mir jemand erklären oder zeigst du mir einen wirklich guten Artikel, der es erklärt?

Xenoterracid
quelle

Antworten:

17

Eigentlich denke ich, Wikipedia erklärt es besser als die eigentlichen Dokumente. Hier ist der Text aus dem Artikel.

Der Linux-Kernel-Software-RAID-Treiber (md genannt, für "multiple device") kann zum Aufbau eines klassischen RAID 1 + 0-Arrays verwendet werden, aber auch (seit Version 2.6.9) als Single Level [4] mit einigen interessanten Erweiterungen [ 5]. Das standardmäßige "Near" -Layout, bei dem jeder Chunk n-mal in einem k-Way-Stripe-Array wiederholt wird, entspricht der standardmäßigen RAID-10-Anordnung, erfordert jedoch nicht, dass n k geteilt wird. Zum Beispiel würde ein n2-Layout auf 2, 3 und 4 Laufwerken so aussehen:

2 drives         3 drives            4 drives
--------         ----------        --------------
A1  A1           A1  A1  A2        A1  A1  A2  A2
A2  A2           A2  A3  A3        A3  A3  A4  A4
A3  A3           A4  A4  A5        A5  A5  A6  A6
A4  A4           A5  A6  A6        A7  A7  A8  A8
..  ..           ..  ..  ..        ..  ..  ..  ..

Das Beispiel mit 4 Laufwerken ist mit einem Standard-RAID-1 + 0-Array identisch, während das Beispiel mit 3 Laufwerken eine Software-Implementierung von RAID-1E ist. Das Beispiel mit zwei Laufwerken entspricht RAID 1. Der Treiber unterstützt auch ein "Fern" -Layout, bei dem alle Laufwerke in f Abschnitte unterteilt sind. Alle Blöcke werden in jedem Abschnitt wiederholt, jedoch um ein Gerät versetzt. Beispiel: f2-Layouts auf Arrays mit 2 und 3 Laufwerken sehen folgendermaßen aus:

2 drives             3 drives
--------             --------------
A1  A2               A1   A2   A3
A3  A4               A4   A5   A6
A5  A6               A7   A8   A9
..  ..               ..   ..   ..
A2  A1               A3   A1   A2
A4  A3               A6   A4   A5
A6  A5               A9   A7   A8
..  ..               ..   ..   ..

Dies ist für die Striping-Leistung eines gespiegelten Arrays ausgelegt. Sequentielle Lesevorgänge können gestreift werden, wie bei RAID-0, zufällige Lesevorgänge sind etwas schneller (möglicherweise 10-20% aufgrund der Verwendung der schnelleren äußeren Sektoren der Datenträger und geringerer durchschnittlicher Suchzeiten), und sequentielle und zufällige Schreibvorgänge sind ungefähr gleich leistungsfähig zu anderen gespiegelten Überfällen. Das Layout eignet sich gut für Systeme, bei denen häufiger gelesen wird als geschrieben, was auf vielen Systemen sehr häufig der Fall ist. Das erste 1 / f jedes Laufwerks ist ein Standard-RAID-0-Array. Auf diese Weise erhalten Sie Striping-Leistung auf einem gespiegelten Satz von nur 2 Laufwerken. Die Optionen nah und fern können gleichzeitig verwendet werden. Die Blöcke in jedem Abschnitt sind um n Geräte versetzt. Zum Beispiel speichert n2 f2 layout 2 × 2 = 4 Kopien von jedem Sektor, benötigt also mindestens 4 Laufwerke:

A1  A1  A2  A2        A1  A1  A2  A2  A3
A3  A3  A4  A4        A3  A4  A4  A5  A5
A5  A5  A6  A6        A6  A6  A7  A7  A8
A7  A7  A8  A8        A8  A9  A9  A10 A10
..  ..  ..  ..        ..  ..  ..  ..  ..
A2  A2  A1  A1        A2  A3  A1  A1  A2
A4  A4  A3  A3        A5  A5  A3  A4  A4
A6  A6  A5  A5        A7  A8  A6  A6  A7
A8  A8  A7  A7        A10 A10 A8  A9  A9
..  ..  ..  ..        ..  ..  ..  ..  ..

Ab Linux 2.6.18 unterstützt der Treiber auch ein Offset-Layout, bei dem jeder Streifen mehrmals wiederholt wird. Beispiel: o2-Layouts auf Arrays mit 2 und 3 Laufwerken sind wie folgt angeordnet:

2 drives       3 drives
--------       --------
A1  A2         A1  A2  A3
A2  A1         A3  A1  A2
A3  A4         A4  A5  A6
A4  A3         A6  A4  A5
A5  A6         A7  A8  A9
A6  A5         A9  A7  A8
..  ..         ..  ..  ..

Hinweis: k ist die Anzahl der Laufwerke, n #, f # und o # sind Parameter in der Option mdadm --layout. Linux kann mit dem md-Treiber (0, 1, 4, 5, 6) auch andere Standard-RAID-Konfigurationen erstellen.

Xenoterracid
quelle
6

Von dem, was ich gelesen habe, hält ein f2 RAID10-Array mindestens 2 Kopien von jedem Block und sie weit voneinander entfernt gespeichert.

Hier sind die relevanten Abschnitte aus den Manpages.

mdadm (8)

-p, --layout = Diese Option konfiguriert die feinen Details von Datenlayout für RAID5 und raid10 Arrays
...
Schließlich sind die Layout - Optionen für RAID10 eines ‚n‘, ‚o‘ oder ‚p‘ durch eine kleine gefolgt Nummer. Der Standardwert ist 'n2'.

n signalisiert "nahe" Kopien. Mehrere Kopien eines Datenblocks befinden sich in unterschiedlichen Geräten an ähnlichen Offsets.

o signalisiert versetzte Kopien. Anstatt die Blöcke in einem Streifen zu duplizieren, werden ganze Streifen dupliziert, aber von einem Gerät gedreht, sodass sich doppelte Blöcke auf verschiedenen Geräten befinden. Somit befinden sich nachfolgende Kopien eines Blocks im nächsten Laufwerk und einen Block weiter unten.

f signalisiert " ferne " Kopien (mehrere Kopien haben sehr unterschiedliche Offsets). Siehe md (4) für weitere Details zu 'nah' und 'fern'.

md (4)

RAID10 bietet eine Kombination aus RAID1 und RAID0 und wird manchmal als RAID1 + 0 bezeichnet. Jeder Datenblock wird einige Male dupliziert, und die resultierende Sammlung von Datenblöcken wird auf mehrere Laufwerke verteilt. Bei der Konfiguration eines RAID10-Arrays muss angegeben werden, wie viele Replikate für jeden Datenblock erforderlich sind (normalerweise 2) und ob die Replikate "nah", "versetzt" oder "fern" sein sollen. (Beachten Sie, dass das 'Offset'-Layout nur ab 2.6.18 verfügbar ist.)

Wenn " Near " -Replikate ausgewählt werden, werden die mehreren Kopien eines bestimmten Blocks nacheinander über die Streifen des Arrays verteilt, sodass die beiden Kopien eines Datenblocks auf zwei benachbarten Geräten wahrscheinlich den gleichen Versatz aufweisen.

Wenn " ferne " Repliken ausgewählt werden, werden die mehreren Kopien eines bestimmten Blocks ziemlich weit voneinander entfernt angeordnet. Die erste Kopie aller Datenblöcke wird auf RAID0-Weise über den frühen Teil aller Laufwerke verteilt, und die nächste Kopie aller Blöcke wird über einen späteren Abschnitt aller Laufwerke verteilt, wobei stets sichergestellt wird, dass alle Kopien eines bestimmten Blocks vorhanden sind auf verschiedenen Laufwerken.

Die " Fern " -Anordnung kann eine sequentielle Leseleistung ergeben, die der eines RAID0-Arrays entspricht, jedoch auf Kosten einer verschlechterten Schreibleistung.

Wenn "Offset" -Replikate ausgewählt werden, werden die mehreren Kopien eines bestimmten Blocks auf aufeinanderfolgenden Laufwerken und in aufeinanderfolgenden Offsets angeordnet. Tatsächlich wird jeder Streifen dupliziert und die Kopien werden von einem Gerät versetzt. Dies sollte ähnliche Leseeigenschaften für "weit" ergeben, wenn ein ausreichend großer Block verwendet wird, jedoch ohne so viel nach Schreibzugriffen zu suchen.

Es ist zu beachten, dass die Anzahl der Geräte in einem RAID10-Array nicht ein Vielfaches der Anzahl der Replikate jedes Datenblocks sein muss, sondern mindestens so viele Geräte wie Replikate.

Wenn beispielsweise ein Array mit 5 Geräten und 2 Replikaten erstellt wird, ist Platz verfügbar, der 2,5 Geräten entspricht, und jeder Block wird auf zwei verschiedenen Geräten gespeichert.

Zoredache
quelle
klingt wie Offset ist der Weg zu gehen ...
Xenoterracide
Ich denke, die visuellere Erklärung von Wikipedia ist klarer ... also habe ich sie hier gepostet.
Xenoterracide
2

Das ist interessant und gut erklärt. Ein einfaches RAID1 bietet jedoch zumindest unter Linux-Software-RAID die Möglichkeit, mehrere Leser gleichzeitig mit einer sehr guten Leistung zu unterstützen:

Daten werden von einem beliebigen Gerät gelesen. Der Treiber versucht, Leseanforderungen auf alle Geräte zu verteilen, um die Leistung zu maximieren.
[...] Theoretisch können mit einem N-Disk-RAID1 N sequenzielle Threads von allen Festplatten lesen. (Mann 4 md, RAID1-Abschnitt)

Es sieht so aus, als wäre RAID10 in seinem nahezu passenden Layout besser für dieses Verhalten geeignet (Beschleunigen von nicht Single-Threaded-E / A wie RAID0, sondern von Multi-Threaded-E / A). n2f2 mit 4 Festplatten ähnelt RAID1 mit 4 Festplatten.

Das n2-Layout mit 4 Festplatten kann beides: die Leseleistung für einen einzelnen Thread verdoppeln und die Leseleistung für zwei Threads vervierfachen (wenn der Linux md RAID10-Scheduler gut implementiert ist, sollte ein Thread ein Paar und der andere einlesen das andere Paar).

Alles hängt davon ab, was Sie brauchen! Benchmarks habe ich noch nicht gemacht.

alphanet
quelle