9
Device Mapper Multipath MPIO unter Linux Stand: 16.01.2008 Eugen Fritzler [email protected]

dm-multipath

Embed Size (px)

Citation preview

Page 1: dm-multipath

Device Mapper Multipath

MPIO unter Linux

Stand: 16.01.2008 Eugen Fritzler

[email protected]

Page 2: dm-multipath

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

Page 3: dm-multipath

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.

Page 4: dm-multipath

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

Page 5: dm-multipath

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.

Page 6: dm-multipath

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 }

}

Page 7: dm-multipath

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.

Page 8: dm-multipath

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.

Page 9: dm-multipath

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.