Upload
chameleon
View
135
Download
0
Embed Size (px)
Citation preview
Device Mapper Multipath - MPIO unter Linux
Eugen Fritzler Seite 2 von 9
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
Device Mapper Multipath - MPIO unter Linux
Eugen Fritzler Seite 3 von 9
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.
Device Mapper Multipath - MPIO unter Linux
Eugen Fritzler Seite 4 von 9
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 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.
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]
Alias scsi_id / wwid (eindeutig) Hersteller / Produkt
Größe
Pfad Gruppe (aktiv)
Pfad Gruppe (passiv)
Status
Priorität der Pfad Gruppe
Pfad
Device Mapper Multipath - MPIO unter Linux
Eugen Fritzler Seite 5 von 9
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.
Device Mapper Multipath - MPIO unter Linux
Eugen Fritzler Seite 6 von 9
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 }
}
Device Mapper Multipath - MPIO unter Linux
Eugen Fritzler Seite 7 von 9
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.
Device Mapper Multipath - MPIO unter Linux
Eugen Fritzler Seite 8 von 9
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.
Device Mapper Multipath - MPIO unter Linux
Eugen Fritzler Seite 9 von 9
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.