Sie sind auf Seite 1von 9

Device Mapper Multipath

MPIO unter Linux


Stand: 16.01.2008
Eugen Fritzler
eugen.fritzler@fritzler-it.de
Device Mapper Multipath - MPIO unter Linux

1. Einleitung
Das folgende Dokument beschreibt die Installation und Konfiguration vom Device Mapper
Multipath (multipath-tools) unter Linux. Als Beispiel wurde ein SLES10 SP1 32bit Linux
verwendet, somit können sich die folgenden Beispiele von anderen Distributionen
unterscheiden.

2. Installation
2.1. Packet installieren

Alle bekannten Distributionen haben multipath-tools im Installations-Repository.

linux:/ # rpm -ihv multipath-tools-0.4.7-34.18.x86_64.rpm

Falls keine Packete der Distribution vorliegen, können die Quellen von
http://christophe.varoqui.free.fr/ herunter geladen werden und von Hand kompiliert und
installiert werden.

Nach der Installation sollten die Startscripte (multipath-tools oder multipathd) in den
gewünschten Runlevels eingetragen werden, damit beim booten das MPIO aktiviert wird.

SLES9 hat erst am SP2 eine lauffähige multipath-tools Version im Repository.

2.2. Starten und Stoppen

Die RC-Scripte liegen nach der Installation unter /etc/init.d/.

/etc/init.d/multipathd {start|stop|status|try-restart|restart|force-
reload|reload|probe}

Nach dem Start können mit multipath –l die generierten Pfade angezeigt werden.

2.3. FC-HBAs für Multipath vorbereiten

Da die Standartwerte für die meisten FC-HBAs nicht für Multipath konfiguriert sind, müssen
die Module unter Linux mit speziellen Parametern geladen werden. Unter SLES10 werden
die Parameter in /etc/modules.conf.local eingetragen.

2.3.1. Qlogic HBA


options qla2xxx ql2xfailover=0 qlport_down_retry=1 ql2xretrycount=5

2.3.2. Emulex HBA


options lpfc lpfc_nodev_tmo=14 lpfc_lun_queue_depth=30 lpfc_discovery_threads=1

Eugen Fritzler Seite 2 von 9


Device Mapper Multipath - MPIO unter Linux

3. Konfiguration
3.1. Übersicht

Für den Betrieb sind drei Dateien wichtig:

/etc/multipath.conf darin ist die Konfiguration zum MPIO gespeichert.

multipath mit diesem Befehl verwaltet man die Pfade

multipathd der eigentliche MPIO Daemon.

Die multipath.conf wird nicht bei der Installation generiert. Diese muss manuell erstellt
oder eine Beispiel-Datei aus /usr/share/doc/multipath-tools nach /etc kopiert
werden.

3.2. Einfache Konfiguration

In der Regel funktioniert MPIO ohne große Konfiguration. Nach den Installation und Start von
multipath-tools wird Multipathing (MPIO) aktiviert. Um den aktuellen Status und die Pfade
anzuzeigen, einfach

linux:/ # multipath -l

ausführen. Die Ausgabe sieht wie folgt aus:

mpath0 (3600d0230000000000df4524651a14500) dm-0 Transtec,PV660F16R2A


[size=204G][features=0][hwhandler=0]
\_ round-robin 0 [prio=0][active]
\_ 6:0:0:0 sda 8:0 [active][undef]
\_ round-robin 0 [prio=0][enabled]
\_ 7:0:0:0 sdb 8:16 [active][undef]

In diesem Beispiel gibt es zwei Devices (sda und sdb) die auf das gleiche Volume vom
Strorage-System (transtec PV660) zeigen. Diese zwei Devices werden unter einem MPIO-
Device zusammengefasst (3600d0230000000000df4524651a14500 und Alias mpath0)
und unter /dev/mapper/ abgelegt. Dieses Device kann man nun formatieren und
gemountet. Alternativ kann auch mit dem Device /dev/dm-0 gearbeitet werden.

linux:/# mkfs.xfs /dev/mapper/3600d0230000000000df4524651a14500


linux:/# mount /dec/mapper/3600d0230000000000df4524651a14500 /mnt/

Falls keine multipath.conf vorhanden ist, wird multipathd mit Standartwerten


gestartet.

Eugen Fritzler Seite 3 von 9


Device Mapper Multipath - MPIO unter Linux

3.3. Erweiterte Konfiguration

3.3.1. Aufbau von multipath.conf

Die Datei /etc/multipath.conf ist in vier Bereiche aufgeteilt.

defaults { ... } globale Einstellungen für alle Devices

blacklist { ... } Blacklist für Devices die von multipathd ignoriert werden

blacklist_exceptions { .. } Ausnahmen für die Blacklist

multipaths { ... } Einstellungen zu speziellen MPIO-Devices

devices { ... } Einstellungen zu physikalischen Devices

3.3.2. Status abfragen


Der aktuelle Status über alle Pfade wird mit

linux:/ # multipath –l

abgefragt. Das folgende Schaubild zeigt eine mögliche Ausgabe mit allen wichtigen
Informationen
Alias scsi_id / wwid (eindeutig) Hersteller / Produkt

mpath0 (3600d0230000000000df4524651a14500) dm-0 Transtec,PV660F16R2A


[size=204G][features=0][hwhandler=0]

Priorität der Pfad Gruppe


Größe
Status

\_ round-robin 0 [prio=0][active] Pfad Gruppe (aktiv)

\_ 6:0:0:0 sda 8:0 [active][ready] Pfad

\_ round-robin 0 [prio=0][enabled] Pfad Gruppe (passiv)

\_ 7:0:0:0 sdb 8:16 [active][ready]

Path Group Status


[active] aktiv und leitet I/O an die zughörigen Pfade.
[enabled] Pfad Gruppe ist passiv, wird aktive falls die andere Pfad Gruppe ausfällt.
[disabled] keine aktiven Pfade in der Pfad Gruppe, wird nicht verwendet

Path Status
[ready] Pfad st aktiv und verwaltet I/Os
[shaky] Pfad ist aktiv aber temporär nicht verfügbar
[faulty] Der Pfad ist nicht aktiv.
[ghost] Dieser Pfad ist ein passiver Pfad bei einem active/passive Controller.

Eugen Fritzler Seite 4 von 9


Device Mapper Multipath - MPIO unter Linux

3.3.3. Aliase verwenden


MPIO-Devices werden von multipathd unter /dev/mapper/<scsi_id> abgelegt. Die
scsi_id ist in der Regel eine lange Folge von Zahlen. Um MPIO-Devices besser zu
identifizieren, können Aliase verwendet werden. Es gibt zwei Möglichkeiten Aliase zu
definieren:

Standard-Aliase

defaults
{
use_friendly_names yes
}

Durch diesen Parameter werden alle MPIO-Devices in mpath[0..9] umbenannt und unter
/dev/mapper/ abgelegt.

Die Zuordnung vom Device-Namen und scsi_id wird unter


/var/lib/multipath/bindings abgelegt. Diese kann editiert werden und
eigene Alias-Namen können verwendet werden.

Benutzerdefinierte Aliase

Um einen benutzerdefinierten Alias zu setzten, muss die scsi_id bzw. die wwid vom Block-
Device ausgelesen und wie im folgenden Beispiel mit einem Alias versehen werden.

Die scsi_id wird mit dem folgenden Befehl ausgelesen:

linux:/ # /sbin/scsi_id -g -u -s /block/sda

So erhält man die scsi_id vom Block-Device sda. Danach fügt man die folgenden Zeilen in
die multipath.conf ein.

multipaths
{
multipath {
wwid 3600d0230000000000df4524651a14500
alias vol1
}
}

Zum Schluß muss multipathd neu gestartet werden damit die Änderung wirksam wird.

Eugen Fritzler Seite 5 von 9


Device Mapper Multipath - MPIO unter Linux

3.3.4. Blacklist definieren

Damit multipathd nicht zu jedem Device ein neues MPIO-Device erstellt, sollte eine
Blacklist erstellt werden. Standartmäßig werden z.B. alle loop- oder ram-Devices
ausgeschlossen. Führt man multipath –l –v3 aus, sieht man in der Ausgabe welche
Devices vorhanden sind und ausgeschlossen werden.

linux:/ # multipath -l -v3


dm-0: blacklisted
hdb: blacklisted
loop0: blacklisted
loop1: blacklisted
loop2: blacklisted


Die Einträge in der multipath.conf können wie folgt aussehen:

blacklist
{
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z][[0-9]*]"
devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
device {
vendor AMCC
product 9550SXU-4L
}
}

Eugen Fritzler Seite 6 von 9


Device Mapper Multipath - MPIO unter Linux

3.3.5. Path Grouping

Es gibt verschiedene Möglichkeiten Pfade miteinander zu kombinieren. Die Art wie die
einzelnen Pfade mit einander Gruppiert werden, hängt vom folgendem Parameter ab:

defaults
{
path_grouping_policy failover
}

failover

Bei failover werden alle Pfade in einer aktiv/passiv Konfiguration angeordnet. Jeweils ein
Pfad wird einer Pfad Gruppe zugeordnet.

mpath0 (3600d0230000000000df4524651a14500) dm-0 Transtec,PV660F16R2A


[size=204G][features=0][hwhandler=0]
\_ round-robin 0 [prio=0][active]
\_ 6:0:0:0 sda 8:0 [active][ready]
\_ round-robin 0 [prio=0][enabled]
\_ 7:0:0:0 sdb 8:16 [active][ready]

multibus

Bei multibus werden alle Pfade einer einzigen Pfad Gruppe zugeornet und im Round-
Robin Mode betrieben.

mpath0 (3600d0230000000000df4524651a14500) dm-0 Transtec,PV660F16R2A


[size=204G][features=0][hwhandler=0]
\_ round-robin 0 [prio=0][active]
\_ 6:0:0:0 sda 8:0 [active][ready]
\_ 7:0:0:0 sdb 8:16 [active][ready]

group_by_prio

In diesem Modus werden Pfade nach Ihrer Priorität gruppiert. Dazu benötigt man allerdings
ein Script das Prioritäten von Pfaden feststellt.

defaults
{
path_grouping_policy failover
prio_callout "/sbin/pathprio.sh %n"
}

In diesem Beispiel überprüft multipathd die Priorität mit dem Shell-Script


/sbin/pathprio.sh. Dabei wird dem Script der zu überprüfende Pfad mit %n übergeben.

Eugen Fritzler Seite 7 von 9


Device Mapper Multipath - MPIO unter Linux

Beispiel: pathprio.sh
#!/bin/bash

PRIO=`cat /etc/pathprio.conf | grep $1 | awk -F" " '{print $1}'`


echo $PRIO

exit 0

Beispiel: pathprio.conf
#PRIO #Device
1 sda sdb
0 sdd sde

Ausgabe von multipath -ll

mpath0 (3600d0230000000000df4524651a14500) dm-0 Transtec,PV660F16R2A


[size=204G][features=0][hwhandler=0]
\_ round-robin 0 [prio=2][active]
\_ 7:0:0:0 sda 8:0 [active][ready]
\_ 7:0:1:0 sdb 8:16 [active][ready]
\_ round-robin 0 [prio=0][enabled]
\_ 6:0:0:0 sdd 8:48 [active][ready]
\_ 6:0:1:0 sde 8:64 [active][ready]

3.3.6. Failback

Falls ein Pfad ausfällt und wieder hergestellt wird, gibt es die Möglichkeit zwischen einem
automatischen oder einem manuellen Failback zu wählen.

defaults
{
failback immediate
}

manual

Es wird keine automatische Failback gemacht. Um einen Failback auszuführen, muss


multipathd neu gestartet werden.

immediate

Sobald der defekte Pfad wieder verfügbar ist, wird ein automatischer Failback durchgeführt.

Eugen Fritzler Seite 8 von 9


Device Mapper Multipath - MPIO unter Linux

3.3.7. Beispiel: multipath.conf

defaults
{
path_grouping_policy failover
path_checker "readsector0"
polling_interval 10
getuid_callout "/sbin/scsi_id -g -u -s /block/%n"
failback immediate
no_path_retry fail
user_friendly_names yes
}

blacklist
{
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
devnode "^hd[a-z][[0-9]*]"
devnode "^cciss!c[0-9]d[0-9]*[p[0-9]*]"
}

multipaths
{
multipath {
wwid 3600d0230000000000df4524651a14500
alias vol1
}
}

Alle Parameter die unter defaults gesetzt wurden, können bei multipath (Pfad
Gruppe) wieder neu gesetzt und geändert werden. Diese gelten dann nur für diese
Pfad Gruppe.

Eugen Fritzler Seite 9 von 9