RAID 10 für VPS-Speicher erklärt: Vorteile und Grenzen
Erfahren Sie, welche Ausfälle RAID 1, 5, 6 und 10 überstehen, was ein Rebuild kostet, wie Sie /proc/mdstat lesen und warum RAID kein Backup ist.
Was RAID 10 ist und warum VPS-Hoster es einsetzen
RAID 10 ist das Speicherlayout, das die meisten VPS-Hoster auf virtualisierten NVMe-Laufwerken (Non-Volatile Memory Express) einsetzen. Dabei wird jedes Laufwerk auf ein Partnerlaufwerk gespiegelt. Anschließend werden die Daten über diese Spiegelpaare verteilt. Ein Laufwerk kann ausfallen, ohne dass das Array den Betrieb einstellt. Die Reparatur besteht aus einer einfachen Kopie vom verbleibenden Partner. Es ist keine Neuberechnung erforderlich, bei der alle anderen Laufwerke des Verbunds gelesen werden.
RAID steht für Redundant Array of Independent Disks. RAID hat nur eine Aufgabe: Der Rechner soll weiter Dienste bereitstellen, wenn ein Laufwerk ausgefallen ist oder ersetzt wird. Diese Aufgabe ist die Verfügbarkeit. Verfügbarkeit ist nicht gleichbedeutend mit Sicherheit.
RAID repliziert Ihre Schreibvorgänge. rm -rf /srv ist ein Schreibvorgang. Beide Hälften des Spiegels löschen das Verzeichnis in derselben Millisekunde. Danach meldet das Array weiterhin einen fehlerfreien Zustand.
Merken Sie sich diesen Satz. Auf den restlichen Seiten wird beschrieben, welche Ausfälle die einzelnen RAID-Level überstehen und welche Kosten sie bei jedem Schreibvorgang verursachen. Die letzten Abschnitte enthalten die Befehle, mit denen Sie den Status eines Arrays auf einem Rechner prüfen, der Ihnen gehört, sowie den Ausfall, den RAID noch nie abgedeckt hat.
Die RAID-Level, mit denen Hosting-Käufer tatsächlich zu tun haben: 1, 5, 6 und 10
Auf einer Tarifseite steht eine Zahl, und dabei bleibt es. Die Zahl beantwortet zwei Fragen: Wie viele Laufwerke ausfallen können und was jeder Schreibvorgang kostet.
RAID 1 ist ein Mirror. Zwei Laufwerke enthalten identische Blöcke. Jeder Schreibvorgang geht an beide Laufwerke. Jedes der beiden Laufwerke kann Lesezugriffe bedienen. Ein Laufwerk kann ohne Datenverlust ausfallen, und die Hälfte der Rohkapazität ist nutzbar. Es muss keine Parität berechnet werden, daher ist der Schreibpfad kurz.
RAID 5 verteilt Daten und verwendet pro Stripe einen Paritätsblock. Bei n Laufwerken erhalten Sie die Kapazität von n-1 Laufwerken, und das Array übersteht genau einen Ausfall. Die Parität liegt nicht auf einem dedizierten Laufwerk. Sie rotiert über alle Laufwerke, sodass jedes Laufwerk sowohl Daten als auch Parität enthält.
RAID 6 fügt jedem Stripe einen zweiten, unabhängigen Paritätsblock hinzu, der üblicherweise mit P und Q bezeichnet wird. Es übersteht den gleichzeitigen Ausfall beliebiger zweier Laufwerke. Das ist wichtiger, als es zunächst klingt, weil der zweite Ausfall meistens während der Wiederherstellung des ersten eintritt.
RAID 10 ist ein Stripe aus Mirrors. Laufwerke werden paarweise gespiegelt, und die Daten werden über die Paare verteilt. Die nutzbare Kapazität beträgt die Hälfte der Gesamtkapazität, ebenso wie bei RAID 1, ergänzt um die Parallelität der Striping-Konfiguration.
Sie sehen auch die Schreibweise RAID 1+0. Das ist die zutreffende Beschreibung: Zuerst spiegeln, dann über die Mirrors stripen. RAID 0+1 verwendet die umgekehrte Reihenfolge: Zuerst stripen, anschließend die beiden Stripes spiegeln. Das ist schlechter, weil der Ausfall eines Laufwerks einen ganzen Stripe außer Betrieb nimmt und die Wiederherstellung die gesamte andere Seite kopieren muss.
Linux ist ein Sonderfall, den Sie kennen sollten. Der raid10-Code des Kernels ist eine einzelne Persönlichkeit statt zweier übereinanderliegender Ebenen. Deshalb läuft er mit einer ungeraden Anzahl von Laufwerken und bietet Layouts (near, far, offset), die eine verschachtelte Konfiguration nicht ausdrücken kann. Deshalb steht in der Statuszeile eines Linux-Systems 2 near-copies, statt zwei Arrays zu nennen.
The data behind this chart
[
{
"label": "RAID 1 (four mirrored pairs)",
"usable_tb": 4,
"worst_case_drives_lost": 1,
"best_case_drives_lost": 4
},
{
"label": "RAID 5",
"usable_tb": 7,
"worst_case_drives_lost": 1,
"best_case_drives_lost": 1
},
{
"label": "RAID 6",
"usable_tb": 6,
"worst_case_drives_lost": 2,
"best_case_drives_lost": 2
},
{
"label": "RAID 10",
"usable_tb": 4,
"worst_case_drives_lost": 1,
"best_case_drives_lost": 4
}
]Acht Laufwerke mit jeweils 1 TB bieten unter RAID 5 7 TB nutzbaren Speicherplatz und unter RAID 10 4 TB. Dieser Unterschied bedeutet reales Geld. Deshalb wird Parität immer wieder vorgeschlagen. RAID 6 übersteht 2 Ausfälle in beliebiger Kombination. RAID 10 garantiert nur 1, weil der gefährliche zweite Ausfall das Partnerlaufwerk des bereits ausgefallenen Laufwerks treffen kann. Es übersteht bis zu 4 Ausfälle, wenn kein Ausfall dasselbe Paar betrifft. Das ist jedoch Zufall und keine Eigenschaft des Designs.
Was jede Ebene bei jedem Schreibvorgang kostet
Ein Schreibvorgang auf einen Mirror entspricht zwei Schreibvorgängen, die gleichzeitig an beide Mitglieder ausgegeben werden. Ein Schreibvorgang auf einen Parity-Stripe verursacht mehr Aufwand, weil der Parity-Block für diesen Stripe danach nicht mehr korrekt ist und neu berechnet werden muss.
Der Controller kann die Parity nicht allein aus dem neuen Block neu berechnen. Zuerst benötigt er den alten Datenblock und den alten Parity-Block. Aus einem kleinen zufälligen Schreibvorgang auf RAID 5 werden daher Lesen, Lesen, Schreiben, Schreiben. RAID 6 muss zusätzlich ein zweites Syndrom pflegen. Derselbe Schreibvorgang wird daher zu Lesen, Lesen, Lesen, Schreiben, Schreiben, Schreiben.
The data behind this chart
[
{
"label": "RAID 1 (2 drives)",
"write_ops_per_host_write": 2,
"drives_read_to_rebuild": 1
},
{
"label": "RAID 5 (8 drives)",
"write_ops_per_host_write": 4,
"drives_read_to_rebuild": 7
},
{
"label": "RAID 6 (8 drives)",
"write_ops_per_host_write": 6,
"drives_read_to_rebuild": 7
},
{
"label": "RAID 10 (8 drives)",
"write_ops_per_host_write": 2,
"drives_read_to_rebuild": 1
}
]Ein kleiner zufälliger Schreibvorgang verursacht 6 Geräteoperationen auf RAID 6 und 2 auf RAID 10. Diese Werte unterschätzen den Latenzunterschied. Die beiden Schreibvorgänge auf den Mirror werden parallel ausgeführt. Der Gast wartet daher auf den langsameren der beiden Vorgänge. Beim Parity-Pfad muss ein Lesevorgang abgeschlossen sein, bevor die neue Parity berechnet werden kann. Der Gast wartet also zunächst auf einen Lesevorgang und danach auf einen Schreibvorgang. Auf einem ausgelasteten Host reiht sich dieser Lesevorgang hinter den I/O-Vorgängen anderer Prozesse ein.
Es gibt eine wichtige Ausnahme. Ein Schreibvorgang, der groß genug ist, um einen vollständigen Stripe zu füllen, benötigt keine alten Daten, weil jeder Block des Stripes ersetzt wird. Die Parity wird aus den bereits im Speicher vorhandenen Daten berechnet. Der Aufwand sinkt dadurch auf einen zusätzlichen Schreibvorgang. Deshalb wirkt RAID 5 in einem sequenziellen Benchmark unproblematisch, verhält sich aber bei einer gemischten Last aus kleinen Schreibvorgängen vieler Mandanten schlecht. Testen Sie das tatsächliche Zugriffsmuster: eine VPS-Festplatte richtig benchmarken bedeutet zufällige I/O mit einer realistischen Warteschlangentiefe und nicht einen einzigen großen dd.
Warum der Wiederaufbau der gefährliche Teil ist
Ein Paritäts-Rebuild muss das ausgefallene Laufwerk aus allen übrigen Laufwerken rekonstruieren. Deshalb liest er 7 verbleibende Laufwerke vom ersten bis zum letzten Block. Ein RAID-10-Rebuild liest 1: den Spiegelpartner des ausgefallenen Laufwerks und kein weiteres.
Daraus ergeben sich zwei Belastungen. Die erste ist die Dauer. Sie hängt vom langsamsten verbleibenden Laufwerk und zusätzlich von den Berechnungen für die Parität ab. Die zweite ist die Last. Während des gesamten Rebuild-Zeitraums sind alle Laufwerke eines Paritätssatzes ausgelastet. Deshalb sehen alle Gäste auf diesem Knoten bis zum Abschluss höhere Latenzen. Bei RAID 10 ist nur ein Laufwerkspaar ausgelastet. Die übrigen Paare arbeiten mit ihrer normalen Geschwindigkeit.
Im selben Zeitraum besteht auch ein Risiko für die Datenkonsistenz. Ein RAID-5-Array mit einem ausgefallenen Laufwerk verfügt über keine Redundanz mehr. Ein nicht lesbarer Sektor auf einem beliebigen verbleibenden Laufwerk ist dann nicht wiederherstellbar. Ein Rebuild ist der Vorgang, der jeden Sektor liest, auch die Sektoren, auf die seit einem Jahr niemand zugegriffen hat. Veröffentlichte Datenblattangaben gehen bei Consumer-Festplatten von ungefähr einem nicht wiederherstellbaren Lesefehler pro 10^14 gelesenen Bits aus und bei Enterprise-NVMe-Laufwerken von einem pro 10^17 oder besser. Das sind Herstellerangaben und keine Messwerte. Das Verhältnis erklärt aber, warum die alte Warnung vor einem fehlgeschlagenen RAID-5-Rebuild für große Festplatten mit rotierenden Magnetscheiben formuliert wurde und warum sie für NVMe deutlich weniger Gewicht hat. Das Argument zur Last gilt für jedes Speichermedium.
Ermitteln Sie schleichende Fehler durch Scrubbing, bevor ein Rebuild sie entdeckt. Debian und Ubuntu liefern einen regelmäßigen Scrub für md-Arrays mit. Der Mechanismus unterscheidet sich zwischen den Releases. Prüfen Sie daher zunächst, welchen Mechanismus Ihr System verwendet, und starten Sie anschließend manuell einen Durchlauf.
systemctl list-timers --all | grep -i mdcheck
ls -l /etc/cron.d/mdadm
echo check | sudo tee /sys/block/md0/md/sync_action
cat /sys/block/md0/md/mismatch_cntsync_action kehrt nach Abschluss des Durchlaufs zu idle zurück, und mismatch_cnt sollte 0 anzeigen. Ein Wert größer als null bei einem Mirror bedeutet, dass die beiden Hälften voneinander abweichen. Der Kernel kann nicht feststellen, welche Kopie korrekt ist, weil keine der beiden Kopien eine Prüfsumme enthält. Einige Abweichungen sind harmlos. Swap-Partitionen sind dafür die häufigste Ursache: Der Kernel kann eine Seite schreiben, die sich währenddessen ändert. Ein steigender Wert bei einem Daten-Array ist ein Grund, das Laufwerk auszutauschen.
Warum VPS-Anbieter bei NVMe standardmäßig RAID 10 einsetzen
Ein Hypervisor-Knoten führt nicht nur eine Workload aus. Er betreibt Dutzende voneinander unabhängige Gäste, deren I/O als ineinander verschachtelter Strom kleiner Schreibvorgänge ohne lokale Zugriffsmuster eintrifft. Genau bei diesem Muster verursacht der Parity-Read-Modify-Write-Zyklus die höchsten Kosten. Auf einem gemeinsam genutzten Knoten tritt dieses Muster den ganzen Tag auf.
Zusammen mit dem Rebuild-Verhalten ergibt sich die Entscheidung von selbst. Fällt ein Laufwerk auf einem Parity-Knoten aus, verlangsamt das stundenlang jeden Gast auf dem System. Fällt ein Laufwerk auf einem RAID 10-Knoten aus, wird nur ein Laufwerkspaar langsamer, und die Kopie läuft mit der Geschwindigkeit des Laufwerks sequenziell durch. Anbieter verkaufen Latenzen ohne starke Spitzen. Dafür bezahlen sie mit Kapazität: Die Hälfte des unformatierten NVMe-Speichers wird für den Mirror verwendet.
Auch die Laufwerksgrößen sprechen dafür. Je größer die Laufwerke werden, desto länger dauert das Rebuild. Bei Parity ist dies genau der Zeitraum, in dem alles langsam ist und kein Schutz besteht. Aus demselben Grund verwenden ZFS-Bereitstellungen für Virtualisierung Pools aus gespiegelten vdevs statt breite raidz-Konfigurationen: Ein Mirror-Resilver kopiert nur die tatsächlich verwendeten Blöcke und betrifft nur ein Laufwerkspaar.
Das bedeutet nicht, dass RAID 10 überall die richtige Wahl ist. Auf ein Backup-Ziel wird in langen sequenziellen Abschnitten geschrieben, und es wird selten gelesen. Daher ist RAID 6 dort das bessere Verhältnis. Es übersteht zwei Ausfälle und stellt den größten Teil der Kapazität bereit. Entscheidend ist die Workload, nicht die Anzahl. Bei einem Plan, den Sie heute auswählen, ist das Medium normalerweise wichtiger als das darauf verwendete Layout. Der Wechsel von SATA SSD zu NVMe ist größer als jeder RAID-Unterschied auf beiden Medien.
So lesen Sie /proc/mdstat
Führen Sie diese Befehle auf einem System aus, dessen Array Ihnen gehört: auf einem dedizierten Server, einem Rechner zu Hause oder einem VPS mit zwei angeschlossenen Volumes, die Sie selbst zu einem Array zusammengestellt haben. Lesen Sie Ihre eigene Ausgabe. Die folgenden Blöcke sind Beispiele und wurden ausgeschrieben, damit Sie die Struktur Ihrer Ausgabe wiedererkennen.
cat /proc/mdstat
sudo mdadm --detail /dev/md0
lsblk -o NAME,SIZE,TYPE,MOUNTPOINTSEin gesundes RAID 10 mit vier Laufwerken gibt ungefähr Folgendes aus.
Personalities : [raid1] [raid10]
md0 : active raid10 nvme3n1p3[3] nvme2n1p3[2] nvme1n1p3[1] nvme0n1p3[0]
3906764800 blocks super 1.2 512K chunks 2 near-copies [4/4] [UUUU]
bitmap: 0/30 pages [0KB], 65536KB chunk
unused devices: <none>Jeder Teil dieser Ausgabe enthält Informationen.
Personalitieslistet die md-Module auf, die der laufende Kernel geladen hat. Wennraid10dort erscheint, bedeutet das nur, dass der Code verfügbar ist.md0 : active raid10ist das Array-Gerät mit seinem Status und seinem Level.- Die nachfolgenden Namen sind die Mitglieder. Die Zahl in eckigen Klammern ist der Index des Geräts in den Array-Metadaten, nicht seine Position in der Zeile und nicht immer sein Steckplatz.
- Nach dem Austausch eines Laufwerks hat das neue Mitglied normalerweise einen höheren Index als der Steckplatz, den es belegt. Daher kann
nvme4n1p3[4]in Steckplatz 2 stehen.mdadm --detailgibt im FeldRaidDeviceden tatsächlichen Steckplatz aus. Verwenden Sie dieses Feld, wenn der Unterschied relevant ist. (F)nach einem Mitglied bedeutet fehlerhaft.(S)bedeutet Spare: vorhanden, inaktiv und bereit, falls etwas ausfällt.3906764800 blocks super 1.2ist die nutzbare Größe in 1-KiB-Blöcken, gefolgt vom Metadatenformat.512K chunks 2 near-copiesist die Stripe-Chunk-Größe und das RAID-10-Layout. In diesem Beispiel liegen zwei Kopien jedes Blocks nebeneinander.[4/4]ist die erwartete Anzahl der Mitglieder und anschließend die Anzahl der derzeit synchronisierten Mitglieder.[UUUU]enthält ein Zeichen pro Steckplatz in der Reihenfolge der Steckplätze.Uist ein aktiver und synchronisierter Steckplatz._ist ein Steckplatz, in dem kein funktionierendes Mitglied vorhanden ist.bitmap:ist die Write-Intent-Bitmap. Sie zeichnet auf, in welchen Bereichen gerade geschrieben wurde. Fällt ein Mitglied aus und kehrt zurück, werden deshalb nur diese Bereiche erneut synchronisiert und nicht das gesamte Laufwerk.
Was [4/3] und [UU_U] bei einem Fehler bedeuten
Ein degradiertes Array sieht folgendermaßen aus.
md0 : active raid10 nvme3n1p3[3] nvme2n1p3[2](F) nvme1n1p3[1] nvme0n1p3[0]
3906764800 blocks super 1.2 512K chunks 2 near-copies [4/3] [UU_U]Lesen Sie die beiden Klammerausdrücke gemeinsam. [4/3] bedeutet, dass einer von vier Steckplätzen nicht beiträgt. [UU_U] zeigt welcher Steckplatz betroffen ist: Der Unterstrich ist das dritte Zeichen, und die Steckplätze werden ab null gezählt. Daher ist Steckplatz 2 ausgefallen. Das Flag (F) benennt das Gerät nur, solange das ausgefallene Laufwerk noch angeschlossen ist. Entfernen Sie es aus dem System, verschwindet der Name aus der Zeile, während der Unterstrich bleibt.
Das Array stellt den Betrieb trotzdem weiterhin bereit. Bei RAID 10 erreicht es dabei häufig nahezu die volle Geschwindigkeit. Deshalb fällt der Ausfall im normalen Betrieb oft nicht auf. Sie benötigen eine Überwachung, die Sie darüber informiert.
grep -i mailaddr /etc/mdadm/mdadm.conf
sudo mdadm --monitor --scan --oneshot --test
systemctl list-units --all | grep -i mdDas Paket mdadm installiert einen Überwachungs-Daemon, der MAILADDR aus /etc/mdadm/mdadm.conf liest. Der Name der Unit hat sich zwischen Releases geändert. Ermitteln Sie ihn daher mit dem letzten Befehl, anstatt ihn zu erraten. Der Befehl --test sendet sofort eine Nachricht pro Array. Bleibt der Posteingang danach leer, ist der Mailversand fehlerhaft. Die für Sie relevante Nachricht wäre dann auf demselben Weg verloren gegangen.
Wenn ein Ersatzlaufwerk wiederhergestellt wird, erscheint unter dem Array eine Fortschrittszeile.
md0 : active raid10 nvme4n1p3[4] nvme3n1p3[3] nvme1n1p3[1] nvme0n1p3[0]
3906764800 blocks super 1.2 512K chunks 2 near-copies [4/3] [UU_U]
[==>..................] recovery = 12.4% (242012928/1953382400) finish=63.1min speed=452000K/secrecovery ist die Wiederherstellung auf ein Ersatzlaufwerk. resync ist der erste Konsistenzdurchlauf über ein neu erstelltes Array. check ist der oben ausgelöste Scrub. Das Klammerpaar zeigt den Fortschritt in 1-KiB-Blöcken im Verhältnis zur Gesamtzahl der Blöcke pro Gerät. finish ist die Schätzung des Kernels bei der aktuellen Geschwindigkeit. Diese Geschwindigkeit wird durch /proc/sys/dev/raid/speed_limit_min und speed_limit_max begrenzt. Die Begrenzungen verhindern, dass die Wiederherstellung die produktiven I/O-Vorgänge ausbremst.
Eine vollständige mdadm --detail-Ausgabe während einer Wiederherstellung
/dev/md0:
Version : 1.2
Creation Time : Tue Mar 10 09:14:22 2026
Raid Level : raid10
Array Size : 3906764800 (3.64 TiB 4.00 TB)
Used Dev Size : 1953382400 (1.82 TiB 2.00 TB)
Raid Devices : 4
Total Devices : 4
Persistence : Superblock is persistent
Update Time : Wed Aug 5 11:02:41 2026
State : clean, degraded, recovering
Active Devices : 3
Working Devices : 4
Failed Devices : 0
Spare Devices : 1
Layout : near=2
Chunk Size : 512K
Rebuild Status : 12% complete
Name : storage:0
Events : 4184
Number Major Minor RaidDevice State
0 259 3 0 active sync set-A /dev/nvme0n1p3
1 259 7 1 active sync set-B /dev/nvme1n1p3
4 259 11 2 spare rebuilding /dev/nvme4n1p3
3 259 15 3 active sync set-B /dev/nvme3n1p3Die Spalte Number enthält den Metadatenindex, der in den Klammern von /proc/mdstat ausgegeben wird. Die Spalte RaidDevice enthält den Steckplatz, also die Position in der Zeichenfolge [UU_U]. Die Werte unterscheiden sich hier, weil Gerät 4 das Laufwerk ersetzt hat, das zuvor Steckplatz 2 belegte. set-A und set-B benennen die beiden Hälften jedes Mirrors. Ein Mitglied aus set-A und ein Mitglied aus set-B desselben Paars enthalten dieselben Daten. Diese beiden Mitglieder dürfen daher nicht gemeinsam verloren gehen.
Der Austausch eines Laufwerks in einem Array, dessen Eigentümer Sie sind, besteht aus vier Befehlen. Der letzte Befehl ist die Prüfung.
sudo mdadm --manage /dev/md0 --fail /dev/nvme2n1p3
sudo mdadm --manage /dev/md0 --remove /dev/nvme2n1p3
sudo mdadm --manage /dev/md0 --add /dev/nvme4n1p3
cat /proc/mdstatDie Recovery-Zeile sollte innerhalb von ein oder zwei Sekunden erscheinen. Die Partition des Ersatzlaufwerks muss mindestens so groß sein wie Used Dev Size aus mdadm --detail. Eine auch nur geringfügig kleinere Partition wird mit einer Meldung der Form not large enough to join array abgelehnt. Partitionieren Sie das neue Laufwerk passend zum alten Laufwerk, bevor Sie es hinzufügen.
Was Sie innerhalb einer VPS sehen können und was nicht
Die meisten Gäste können den RAID-Verbund des Hosts nicht sehen. Das ist beabsichtigt. Der Hypervisor stellt Ihnen eine virtuelle Festplatte bereit. Ob diese Festplatte aus einem RAID-10-Pool mit NVMe-Laufwerken stammt oder auf einem einzelnen Laufwerk liegt, ist eine Eigenschaft des Hosts. Sie wird innerhalb Ihres Gasts nicht angezeigt.
systemd-detect-virt
lsblk -d -o NAME,SIZE,ROTA,MODEL
cat /proc/mdstatsystemd-detect-virt gibt bei einem KVM-Gast kvm aus, bei einem Container einen Containertyp wie lxc und auf Bare Metal none. In einem KVM-Gast sehen Sie normalerweise in lsblk nur ein einzelnes vda oder sda und in /proc/mdstat keine Arrays, weil innerhalb des Gasts keine vorhanden sind.
Bei einer containerbasierten VPS ist diese Ausgabe nicht verlässlich. Container verwenden gemeinsam den Kernel des Hosts, und Teile von /proc sind nicht per Namespace getrennt. Daher kann die Ausgabe den Host statt Ihres eigenen Bereichs beschreiben. Betrachten Sie keine dieser Angaben als Beleg für Ihren eigenen Speicher. Fragen Sie den Provider nach dem Layout. Wenn es darauf ankommt, lassen Sie sich die Antwort schriftlich geben.
Von innerhalb der VPS können Sie das Verhalten der bereitgestellten Festplatte prüfen. Prüfen, ob die VPS-Festplatte tatsächlich NVMe verwendet behandelt die Befehle, die reale Informationen liefern. Was eine SSD-VPS tatsächlich umfasst erläutert, was die Bezeichnung auf der Tarifseite aussagt.
Sollten Sie RAID innerhalb Ihrer VPS betreiben?
In der Regel nicht. Der Grund sind die Fehlerdomänen.
Wenn Sie zwei Volumes an eine VPS anbinden und sie mit mdadm spiegeln, können sich beide Volumes auf demselben physischen Array, auf demselben Node und hinter derselben Stromversorgung befinden. Sie verdoppeln damit die Kosten jedes Schreibvorgangs für eine Redundanz, die bereits vorhanden war. Außerdem verlieren Sie bei genau dem einen relevanten Fehler weiterhin beide Kopien.
Das ist sinnvoll, wenn der Provider dokumentiert, dass sich die Volumes in getrennten Fehlerdomänen befinden. Das gilt auch für einen dedizierten Server, bei dem Sie die verwendeten Laufwerke selbst festlegen können. Andernfalls ist der Aufwand besser in Kopien investiert, die den Server verlassen.
Wovor RAID Sie nicht schützt
RAID deckt einen Ausfall ab: ein Laufwerk, das nicht mehr korrekt arbeitet. Alles Folgende ist ein gültiger Schreibvorgang. Das Array wendet ihn daher auf jede Kopie an und meldet sich weiterhin als fehlerfrei.
- Löschen.
rm -rfim falschen Verzeichnis oder ein Deploy-Skript mit einer nicht gesetzten Variablen in einem Pfad. Das Array erkennt einen zulässigen Schreibvorgang und führt ihn zweimal aus. - Ransomware. Verschlüsselung ist ein Schreibvorgang. Ein fehlerfreies Array speichert die verschlüsselte Version auf beiden Seiten des Mirrors.
- Eine fehlerhafte Anwendung. Ein Fehler, der unbrauchbare Daten in Ihre Datenbank schreibt, schreibt dieselben unbrauchbaren Daten auch auf das redundante Laufwerk.
- Der gesamte Node. Ein ausgefallener Host oder ein versehentlich gesperrtes Konto. Ein Array kann fehlerfrei und gleichzeitig nicht erreichbar sein.
- Sie selbst, eine Woche später. Die Datei, die Sie am Montag gelöscht haben, ist am Montag von jedem Laufwerk verschwunden. Nur eine vorher erstellte Kopie kann sie zurückbringen.
Snapshots auf demselben Speicher sind ebenfalls keine Lösung. Sie helfen gegen Löschvorgänge und gehen mit dem Array verloren, auf dem sie liegen. Die Eigenschaft, die ein Backup zu einem Backup macht, ist sein anderer Speicherort. Verschlüsselte Backups außerhalb des Servers mit restic bildet die andere Hälfte dieser Seite: Das Array hält den Betrieb trotz eines ausgefallenen Laufwerks aufrecht, und restic stellt Ihre Daten wieder her, wenn der Schaden durch einen Schreibvorgang entstanden ist, den das Array problemlos ausführen konnte.
FAQ
Bedeutet RAID 10, dass ich keine Backups brauche?
Nein. RAID 10 schützt vor einem Laufwerk, das ausfällt. Jeder gültige Schreibvorgang wird auf beide Hälften eines Spiegels angewendet. Daher erreicht eine Löschung oder ein Ransomware-Lauf auch im selben Moment das redundante Laufwerk. Das Array meldet sich anschließend als fehlerfrei, weil aus seiner Sicht nichts ausgefallen ist. Sie benötigen weiterhin Kopien außerhalb des Rechners. Außerdem sollten Sie gelegentlich eine Wiederherstellung durchführen, um zu prüfen, ob die Backups funktionieren.
Warum wählen VPS-Anbieter RAID 10 statt RAID 5 oder RAID 6?
Dafür gibt es zwei Gründe. Beide betreffen kleine zufällige Schreibvorgänge. Bei einem Paritätsschreibvorgang müssen die alten Daten und die alte Parität zunächst gelesen werden, bevor die neue Parität berechnet werden kann. Daher kostet ein kleiner Schreibvorgang bei RAID 5 4 Operationen und bei RAID 6 6. Bei einem Spiegel sind es dagegen 2 Operationen. Eine Wiederherstellung der Parität liest anschließend jedes noch funktionsfähige Laufwerk vollständig aus. Dadurch wird jede Gastinstanz auf dem Node stundenlang ausgebremst. Eine Wiederherstellung bei RAID 10 kopiert dagegen ein Laufwerk auf ein anderes. Die übrigen Paare bleiben dabei unberührt. Anbieter bezahlen dafür mit Kapazität: Die Hälfte des rohen NVMe-Speichers.
Was bedeutet [U_] oder [UU_U] in /proc/mdstat?
Jedes Zeichen steht in der Reihenfolge der Slots für einen Slot im Array. Für jeden Slot gibt es genau ein Zeichen. U bedeutet, dass der Slot ein aktives und synchronisiertes Mitglied enthält. _ bedeutet, dass der Slot kein funktionsfähiges Mitglied enthält. [U_] bei einem Spiegel aus zwei Laufwerken bedeutet, dass der zweite Slot ausgefallen ist und keine Redundanz mehr besteht. Lesen Sie diese Anzeige zusammen mit dem Paar davor. [4/3] gibt an, dass das Array vier Mitglieder erwartet und drei besitzt. Die Reihenfolge der Slots entspricht der Spalte RaidDevice von mdadm --detail und nicht der Reihenfolge, in der die Gerätenamen in der Zeile erscheinen.
Wie viele Laufwerke kann ein RAID-10-Array verlieren?
Ein Laufwerk, unabhängig vom Ausfallmuster. Bei weiteren Ausfällen hängt das Ergebnis davon ab, welche Laufwerke betroffen sind. Jedes Spiegelpaar kann eines seiner beiden Mitglieder verlieren. Ein Array aus acht Laufwerken übersteht daher bis zu vier Ausfälle, wenn kein Paar zweimal betroffen ist. Es fällt bei zwei Ausfällen aus, wenn beide dasselbe Paar treffen. Planen Sie mit der garantierten Anzahl, also einem Ausfall. Alles darüber sollten Sie als Glück und nicht als Schutz betrachten.
Sollte ich zwei Volumes in meiner VPS mit mdadm spiegeln?
In der Regel nicht. Zwei Volumes, die an eine VPS-Instanz angebunden sind, liegen auf demselben Host häufig auf demselben physischen Array. Durch das Spiegeln verdoppeln sich die Kosten jedes Schreibvorgangs. Gegen Ausfälle, die das hosteigene RAID nicht bereits abdeckt, bietet es keinen Schutz. Sinnvoll ist dies nur, wenn der Anbieter dokumentiert, dass die Volumes in getrennten Ausfalldomänen liegen. Andernfalls sollten Sie den Aufwand in Backups investieren, die den Rechner verlassen.