Storage & Protokolle
Multipathing / MPIO
Multipathing bündelt mehrere Pfade zu einer Speicher-LUN zu einem logischen Gerät, für Ausfallsicherheit und Lastverteilung; ALUA markiert die optimalen Pfade.
- Redundante Pfade zur LUN
- Lastverteilung
- ALUA (optimale Pfade)
- Linux device-mapper-multipath
- FC, iSCSI; NVMe via ANA
Multipathing löst ein Problem, das in jedem redundanten Speichernetz auftritt: Führen mehrere physische Wege (über zwei HBAs, zwei Switches, zwei Array-Controller) zur selben LUN, sieht das Betriebssystem sie mehrfach als getrennte Geräte. Multipathing fasst diese Pfade zu einem logischen Gerät zusammen, schaltet bei Ausfall automatisch um und kann die Last über die Pfade verteilen.
Dieser Artikel erklärt das Grundproblem und seine Lösung, wie Pfade derselben LUN erkannt werden, den SCSI-Standard ALUA mit seinen Pfadzuständen, die Linux-Implementierung device-mapper-multipath mit ihren wichtigsten Stellschrauben, das Zusammenspiel mit ALUA-Arrays und redundanten Fabrics, die typischen Fehler sowie das NVMe-Pendant ANA.
1. Das Problem: dieselbe LUN, viermal
Hängt ein Server mit zwei HBAs über zwei Switches an einem Array mit zwei Controllern, ergeben sich vier Wege zur selben LUN, und Linux zeigt sie als vier getrennte Block-Geräte (etwa /dev/sdb bis /dev/sde). Würde man darauf direkt zugreifen, käme es zu Datenkorruption. Multipathing erkennt, dass alle vier dieselbe LUN sind, und bietet stattdessen ein einziges logisches Gerät (etwa /dev/mapper/mpatha) an.
2. Wie Pfade zugeordnet werden
Die Software erkennt zusammengehörige Pfade an der WWID, einer eindeutigen Kennung, die das Gerät selbst meldet (meist ein NAA- oder EUI-Identifier aus den SCSI-Geräteinformationen). Alle Pfade mit derselben WWID gehören zur selben LUN und werden zu einem logischen Gerät gebündelt. Diese Kennung ist stabil, anders als der wechselnde Gerätename, weshalb in fstab und LVM immer das Multipath-Gerät und nie ein einzelnes /dev/sdX verwendet werden sollte.
3. ALUA: welcher Pfad ist der beste
Bei Arrays mit zwei Controllern sind nicht alle Pfade gleichwertig: Der Weg zum besitzenden Controller ist optimal, der Weg über den anderen funktioniert, aber mit Umweg und höherer Latenz. Der SCSI-Standard ALUA (Asymmetric Logical Unit Access) macht das sichtbar. Er kennt unter anderem die Zustände:
| ALUA-Zustand | Bedeutung |
|---|---|
| active/optimized | bester Pfad (direkt am besitzenden Controller) |
| active/non-optimized | nutzbar, aber höhere Latenz (über den anderen Controller) |
| standby | kein Datenverkehr, nur Verwaltung |
| unavailable | derzeit nicht nutzbar |
ALUA sorgt dafür, dass der Host bevorzugt die optimalen Pfade nutzt und nur bei deren Ausfall auf die nicht-optimalen ausweicht. Ohne ALUA-bewusste Pfadgruppen verschenkt man Leistung oder erzeugt unnötiges Controller-zu-Controller-Routing.
4. Linux: device-mapper-multipath
Unter Linux übernimmt das device-mapper-multipath: ein Kernel-Baustein plus der Dienst multipathd, der die Pfade laufend überwacht, ausgefallene erkennt und wiederhergestellte zurücknimmt. Konfiguriert wird über /etc/multipath.conf. Wichtige Stellschrauben sind der Pfad-Selektor für die Lastverteilung (etwa service-time oder round-robin), die Pfadgruppierung nach Priorität (für ALUA), das Failback-Verhalten und no_path_retry für den Fall, dass alle Pfade ausfallen. Moderne Versionen erkennen ALUA-Arrays automatisch.
Status ansehen und ALUA-Geräteregel (Linux)
multipath -ll # logische Geräte, Pfade und ihre Zustände
# /etc/multipath.conf (Auszug für ein ALUA-Array)
devices {
device {
vendor "ACME"
product "ARRAY*"
path_grouping_policy group_by_prio
prio alua
hardware_handler "1 alua"
failback immediate
}
} 5. Redundante Fabrics und typische Fehler
Multipath-Software wirkt nur, wenn es wirklich getrennte physische Pfade gibt, idealerweise zwei voneinander unabhängige Fabrics. Läuft alles über einen Switch, bleibt dieser ein Single Point of Failure, egal wie gut die Software konfiguriert ist. Die häufigsten Stolpersteine:
- Lokale Disks nicht ausgeschlossen ohne Blacklist versucht multipathd, die Systemplatte als SAN-Pfad zu behandeln, was zu Hängern führt.
- Auf /dev/sdX statt Multipath-Gerät zugegriffen nach einem Pfadwechsel zeigt der alte Name auf etwas anderes; immer das Mapper-Gerät verwenden.
- Dienst nicht persistent ohne aktivierten multipathd stehen die Geräte nach dem Neustart nicht bereit.
- Nur eine Fabric Software-Multipath ohne physische Redundanz schützt nicht vor dem Ausfall des einzigen Pfades.
6. NVMe macht es selbst: ANA
Für NVMe-over-Fabrics gibt es das ALUA-Gegenstück ANA (Asymmetric Namespace Access), und der Linux-Kernel bringt das Multipathing dafür nativ mit, ohne device-mapper-multipath. Die Pfadzustände entsprechen denen von ALUA (optimal, nur erreichbar, nicht verfügbar), die Auswahlrichtlinie lässt sich einstellen (etwa NUMA-nah, Round-Robin oder nach Warteschlangentiefe). Für NVMe ist das native Verfahren der empfohlene Weg.
7. Stärken und Grenzen
| Stärken | Grenzen |
|---|---|
| Transparente Redundanz: Pfadausfall ohne Unterbrechung | schützt nur vor Pfadausfall, nicht vor Array-Ausfall |
| Lastverteilung über mehrere Pfade | erfordert echte physische Redundanz (getrennte Fabrics) |
| Herstellerneutral über ALUA standardisiert | Fehlkonfiguration (Blacklist) kann Datenkorruption riskieren |
| Unter Linux offen und ohne Zusatzkosten | Konfiguration und Defaults je Distribution unterschiedlich |
| Automatische Pfad-Wiederherstellung durch multipathd | für NVMe zunehmend durch natives ANA-Multipathing ersetzt |
Häufige Fragen zu Multipathing / MPIO
Damit der Zugriff auf eine LUN den Ausfall eines Pfades (HBA, Kabel, Switch, Controller-Port) übersteht und Last über mehrere Pfade verteilt werden kann. Ohne Multipathing erschiene dieselbe LUN über mehrere Pfade als getrennte Geräte, und ein direkter Zugriff darauf würde Daten beschädigen. Voraussetzung ist allerdings echte physische Redundanz, am besten zwei getrennte Fabrics.
ALUA (Asymmetric Logical Unit Access) ist ein SCSI-Standard, mit dem ein Speicher-Array dem Host mitteilt, welche Pfade zu einer LUN optimal sind und welche nur erreichbar. Bei Arrays mit zwei Controllern ist der Weg zum besitzenden Controller optimal, der über den anderen langsamer. Das Multipathing nutzt diese Information, um bevorzugt die optimalen Pfade zu verwenden.
Auch der Autor ist nur ein Mensch, dem Fehler unterlaufen können. Wenn in diesem Beitrag etwas nicht stimmt oder unklar ist, freuen wir uns über einen kurzen Hinweis über das Kontaktformular unten, wir prüfen und korrigieren das.
Der nächste Schritt
Multipathing / MPIO im eigenen Haus richtig einsetzen?
Wir klären, ob und wie der Baustein zu Ihrer Infrastruktur passt, und sagen offen, wann sich der Aufwand lohnt und wann nicht.