Red Hats FC-driver med multipath mot EVA

Dette dokumentet beskriver hvordan man bruker Red Hat sin FC-driver (Qlogic) mot EVA, sammen med multipath. Dette er typisk til standalone-maskiner eller klynger.

1   Installasjon og oppsett

FC-driveren (qla2xxx) lastes automatisk hvis maskinen har et Qlogic FC-kort. Device-mapper multipath er ikke nødvendigvis installert, så denne må installeres:

yum -y install device-mapper-multipath

Installer gjerne også lsscsi, som er et hendig lite verktøy som lister opp SCSI-devices:

yum -y install lsscsi

2   Oppsett av multipath

Dette avsnittet forutsetter at alle LUN er delt ut til maskinen, og at den ser alle LUN. Prøv f.eks. med lsscsi:

sap-smtest# lsscsi
[0:0:0:0]    storage HP       HSV210           6110  -
[0:0:0:1]    disk    HP       HSV210           6110  /dev/sda
[0:0:0:2]    disk    HP       HSV210           6110  /dev/sdb
[0:0:0:3]    disk    HP       HSV210           6110  /dev/sdc
[0:0:0:4]    disk    HP       HSV210           6110  /dev/sdy
[0:0:1:0]    storage HP       HSV210           6110  -
[0:0:1:1]    disk    HP       HSV210           6110  /dev/sdd
[0:0:1:2]    disk    HP       HSV210           6110  /dev/sde
[0:0:1:3]    disk    HP       HSV210           6110  /dev/sdf
[0:0:1:4]    disk    HP       HSV210           6110  /dev/sdaa
[0:0:2:0]    storage HP       HSV210           6110  -
[0:0:2:1]    disk    HP       HSV210           6110  /dev/sdg
[0:0:2:2]    disk    HP       HSV210           6110  /dev/sdh
[0:0:2:3]    disk    HP       HSV210           6110  /dev/sdi
[0:0:2:4]    disk    HP       HSV210           6110  /dev/sdz
[0:0:3:0]    storage HP       HSV210           6110  -
[0:0:3:1]    disk    HP       HSV210           6110  /dev/sdm
[0:0:3:2]    disk    HP       HSV210           6110  /dev/sdn
[0:0:3:3]    disk    HP       HSV210           6110  /dev/sdo
[0:0:3:4]    disk    HP       HSV210           6110  /dev/sdab
[1:0:0:0]    storage HP       HSV210           6110  -
[1:0:0:1]    disk    HP       HSV210           6110  /dev/sdj
[1:0:0:2]    disk    HP       HSV210           6110  /dev/sdk
[1:0:0:3]    disk    HP       HSV210           6110  /dev/sdl
[1:0:0:4]    disk    HP       HSV210           6110  /dev/sdae
[1:0:1:0]    storage HP       HSV210           6110  -
[1:0:1:1]    disk    HP       HSV210           6110  /dev/sdp
[1:0:1:2]    disk    HP       HSV210           6110  /dev/sdq
[1:0:1:3]    disk    HP       HSV210           6110  /dev/sdr
[1:0:1:4]    disk    HP       HSV210           6110  /dev/sdac
[1:0:2:0]    storage HP       HSV210           6110  -
[1:0:2:1]    disk    HP       HSV210           6110  /dev/sds
[1:0:2:2]    disk    HP       HSV210           6110  /dev/sdt
[1:0:2:3]    disk    HP       HSV210           6110  /dev/sdu
[1:0:2:4]    disk    HP       HSV210           6110  /dev/sdad
[1:0:3:0]    storage HP       HSV210           6110  -
[1:0:3:1]    disk    HP       HSV210           6110  /dev/sdv
[1:0:3:2]    disk    HP       HSV210           6110  /dev/sdw
[1:0:3:3]    disk    HP       HSV210           6110  /dev/sdx
[1:0:3:4]    disk    HP       HSV210           6110  /dev/sdaf

Det er normalt å se mange flere devices enn LUN som faktisk er delt ut, siden det er flere veier til en EVA, særlig hvis maskinen har mer enn ett FC-kort (redundans).

2.1   Sørg for at multipathd kjører

Start multipathd:

/etc/init.d/multipathd start

Sørg for at den starter ved boot:

chkconfig multipathd on

2.2   Lag en "tom" multipath.conf

Vi lager først en /etc/multipath.conf som ikke inneholder noen alias for noen LUN, men den inneholder device-beskrivelser av ulike HP-lagringsløsninger.

Her er filen gjengitt i sin helhet (RHEL5):

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]*"
}

defaults {
        udev_dir                /dev
        polling_interval        10
        selector                "round-robin 0"
        path_grouping_policy    failover
        getuid_callout          "/sbin/scsi_id -g -u -s /block/%n"
        prio_callout            "/bin/true"
        path_checker            tur
        rr_min_io               100
        rr_weight               uniform
        failback                immediate
        no_path_retry           12
        user_friendly_names yes
}

multipaths {
}

devices {

  # For EVA3000(HSV101) / EVA5000(HSV111) / EVA4000/6000 / EVA8000 / EVA4400
  device {
        vendor                  "HP|COMPAQ"
        product                 "HSV1[01]1 \(C\)COMPAQ|HSV[23][01]0"
        path_grouping_policy    group_by_prio
        getuid_callout          "/sbin/scsi_id -g -u -s /block/%n"
        path_checker            tur
        path_selector           "round-robin 0"
        prio_callout            "/sbin/mpath_prio_alua /dev/%n"
        rr_weight               uniform
        failback                immediate
        hardware_handler        "0"
        no_path_retry           12
        rr_min_io               100
  }

  # For XP
  device {
        vendor                  "HP"
        product                 "OPEN-.*"
        path_grouping_policy    multibus
        getuid_callout          "/sbin/scsi_id -g -u -s /block/%n"
        path_selector           "round-robin 0"
        rr_weight               uniform
        prio_callout            "/bin/true"
        path_checker            tur
        hardware_handler        "0"
        failback                immediate
        no_path_retry           12
        rr_min_io               100
  }

  # For MSA A/A array
  device {
        vendor                  "HP"
        product                 "MSA VOLUME*"
        path_grouping_policy    group_by_prio
        getuid_callout          "/sbin/scsi_id -g -u -s /block/%n"
        path_checker            tur
        path_selector           "round-robin 0"
        prio_callout            "/sbin/mpath_prio_alua /dev/%n"
        rr_weight               uniform
        failback                immediate
        hardware_handler        "0"
        no_path_retry           12
        rr_min_io               100
  }

  # For Dell MD3000 arrays
  device {
        vendor                  "DELL"
        product                 "MD3000"
        path_grouping_policy    group_by_prio
        getuid_callout          "/sbin/scsi_id -g -u /block/%n"
        path_checker            rdac
        prio_callout            "/sbin/mpath_prio_rdac /dev/%n"
        failback                immediate
        hardware_handler        "1 rdac"
  }

  # For Nexsan SATABoy/SATABeast (ikke testet)
  # https://hep.pa.msu.edu/twiki/bin/view/AGLT2/NexsanTesting
  device {
        vendor                  "NEXSAN"
        product                 "SATAB.*"
        path_grouping_policy    group_by_prio
        getuid_callout          "/sbin/scsi_id -g -u -s /block/%n"
        prio_callout            "/sbin/mpath_prio_alua %d"
        features                "1 queue_if_no_path"
        path_checker            tur
        path_selector           "round-robin 0"
        hardware_handler        "0"
        rr_weight               priorities
        no_path_retry           5
        failback                300
        rr_min_io               16
  }
}

Det er noen endringer til multipath.conf i RHEL6. Her er et eksempel for RHEL6-maskin tilkoblet SATABeast:

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]*"
}

defaults {
        user_friendly_names yes
}

multipaths {
}

devices {
  device {
        vendor                  "NEXSAN"
        product                 "SATAB.*"
        path_grouping_policy    group_by_prio
        getuid_callout          "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
        prio                    alua
        features                "1 queue_if_no_path"
        path_checker            tur
        path_selector           "round-robin 0"
        hardware_handler        "0"
        rr_weight               priorities
        no_path_retry           5
        failback                300
        rr_min_io               16
  }
}

Etter å ha laget denne filen, be multipathd om å lese den:

multipath -F ; multipath -v2

Da kan vi liste opp hvilke devices som er tilgjengelige gjennom multipath:

sap-hrprod01# multipath -ll | grep -B1 size
mpath2 (3600508b4000900f80000d00002570000) dm-10 HP,HSV210
[size=300G][features=1 queue_if_no_path][hwhandler=0]
--
mpath1 (3600508b4000900f80000d00002500000) dm-9 HP,HSV210
[size=70G][features=1 queue_if_no_path][hwhandler=0]
--
mpath0 (3600508b4000900f80000d00002490000) dm-8 HP,HSV210
[size=20G][features=1 queue_if_no_path][hwhandler=0]

Disse er nå tilgjengelige som /dev/mpath/mpath0 osv.

2.3   Lage alias

Dersom man ønsker det, kan man lage alias for disse. Nå har de bare navn mpathX, siden vi har presisert user_friendly_names yes i konfigurasjonen. For å lage et alias, må man for hvert LUN lage et innslag i konfigurasjonen, i skopet multipaths { }. Her er et par eksempler:

multipath {
      wwid                    3600508b4000900f80000d000015e0000
      alias                   smtest-backup
      path_grouping_policy    group_by_prio
      path_selector           "round-robin 0"
      failback                immediate
      rr_weight               uniform
      no_path_retry           10
      rr_min_io               100
}

multipath {
      wwid                    3600508b4000900f80000d00001610000
      alias                   smtest-transport
      path_grouping_policy    group_by_prio
      path_selector           "round-robin 0"
      failback                immediate
      rr_weight               uniform
      no_path_retry           10
      rr_min_io               100
}

OBS! Dette skal legges inn i skopet multipaths{}.

Eneste som er forskjellig mellom disse er wwid, som man får opp ved å kjøre multipath -ll, og alias, som er det navnet som skal settes.

For å laste inn ny konfigurasjon, kjør:

multipath -F ; multipath -v2

Man vil da kunne se de nye aliasene:

sap-smtest# multipath -ll | grep -B1 size
smtest-transport (3600508b4000900f80000d00001610000) dm-11 HP,HSV210
[size=50G][features=1 queue_if_no_path][hwhandler=0]
--
smtest-backup (3600508b4000900f80000d000015e0000) dm-9 HP,HSV210
[size=200G][features=1 queue_if_no_path][hwhandler=0]
--
smtest-stage (3600508b4000900f80000d000015b0000) dm-10 HP,HSV210
[size=500G][features=1 queue_if_no_path][hwhandler=0]
--
smtest-hrtransport (3600508b4000900f80000d00002aa0000) dm-18 HP,HSV210
[size=50G][features=1 queue_if_no_path][hwhandler=0]

Device-filene har også endret seg. De heter nå /dev/mpath/<alias>.

3   Lage filsystemer

3.1   Lage LVM-partisjon

Normalt skal hvert LUN være en volumgruppe. Vi lager da en LVM-partisjon på hvert LUN som tar hele LUN-et:

echo ,,8e | sfdisk /dev/mpath/<alias>

Notat

På mange nye installasjoner så kjører vi rett på device/LUN istedenfor å lage en partisjon som dekker hele disken, så det over er kun til referanse.

Etterpå, last multipath på nytt for å lage device-filer (/dev/mpath/<alias>p1):

multipath -F ; multipath -v2

Lag et fysisk volum av hver LVM-partisjon (eksempel):

sap-hrutv01# pvcreate /dev/mpath/cihru-vraid5p1
  Physical volume "/dev/mpath/cihru-vraid5p1" successfully created

Lag en volumgruppe (eksempel):

sap-hrutv01# vgcreate -s 128m vg_cihru-vraid5 /dev/mpath/cihru-vraid5p1
  Volume group "vg_cihru-vraid5" successfully created

Lag et logisk volum (eksempel):

sap-hrutv01# lvcreate -L10g -n cihru-root vg_cihru-vraid5
  Logical volume "cihru-root" created

Dersom vgs(1) og andre LVM-kommandoer gir feilmeldingen

Found duplicate PV LVxMV5u5Xg20CJ5cely0lakrYidDK55Z: using /dev/sdag not /dev/sdq

eller tilsvarende feilmelding etter at man har satt opp multipathing, så fiks /etc/lvm/lvm.conf slik:

halv2-test01# diff /etc/lvm/lvm.conf.orig /etc/lvm/lvm.conf
53c53,56
<     filter = [ "a/.*/" ]
---
>     # filter = [ "a/.*/" ]
>
>     # odberg. 2010-12-07
>     filter = [ "a/dev/mpath/.*/", "a/dev/cciss/.*/", "r/.*/" ]
84a88,89
>     # odberg, 2010-12-07
>     types = [ "device-mapper", 1]

og kjør vgscan(1) på nytt.

For Dell-maskiner, så bytt ut "a/dev/cciss/.*/" med "a/dev/sd../".

3.2   Lage filsystemer

Lag et filsystem med mke2fs (eksempel):

mke2fs -j /dev/vg_cihru-vraid5/cihru-root

4   Dele ut nye LUN

Når man har delt ut nye LUN til boksen må SCSI-bussen scannes på nytt slik at man oppdager nye devices. Følgende ninja-triks virker:

echo "- - -" > /sys/class/scsi_host/hostX/scan

Dette må gjøres for hvert SCSI-adapter (FC-adapter) i maskinen. Litt tøffere versjon:

for h in /sys/class/scsi_host/host*; do echo "- - -" > $h/scan; done

Etter dette må man legge inn alias for de nye i /etc/multipath.conf og laste inn multipath-config på nytt med:

multipath -F ; multipath -v2

Etter dette er LUN-et tilgjengelig via multipath på en normal måte, og man kan gå videre med LVM, filsystemer osv.

5   Utvide LUN

Her tar vi kun for oss utvidelse av LUN som ikke tidligere er partisjonert (dvs. at hele deviceet er brukt til LVM):

Man kan gjøre online resize av et fysisk volum og tilhørende volumgruppe. Dette er å foretrekke fremfor alternativet, som er å lage et nytt volum og melde det inn i volumgruppen. Fremgangsmåten er som følger (eksempel):

  1. Endre LUN-størrelsen på SAN-et

  2. Finn ut hvilke devicer som LUN-et består av på Linux-maskinen:

    # multipath -ll smtest-upgradetrans
    smtest-upgradetrans (3600508b4000900f80000d00003df0000) dm-12 HP,HSV210
    [size=100G][features=1 queue_if_no_path][hwhandler=0][rw]
    \_ round-robin 0 [prio=200][active]
     \_ 1:0:2:5 sdai 66:32  [active][ready]
     \_ 0:0:0:5 sde  8:64   [active][ready]
     \_ 0:0:2:5 sdp  8:240  [active][ready]
     \_ 1:0:0:5 sdy  65:128 [active][ready]
    \_ round-robin 0 [prio=40][enabled]
     \_ 1:0:1:5 sdad 65:208 [active][ready]
     \_ 1:0:3:5 sdan 66:112 [active][ready]
     \_ 0:0:1:5 sdj  8:144  [active][ready]
     \_ 0:0:3:5 sdu  65:64  [active][ready]
    

    Multipath-devicet "smtest-upgradetrans" består altså av sdai, sde, sdp, sdy, sdad, sdan, sdj og sdu.

  3. For hvert av disse, tving gjennom en rescan:

    for f in sdai sde sdp sdy sdad sdan sdj sdu; do
        echo 1 > /sys/block/$f/device/rescan
    done
    
  4. Fortell multipathd at multipath-devicet skal endre størrelse:

    multipathd -k'resize multipath smtest-upgradetrans'
    

    Det er mulig at man på RHEL6 heller skal gjøre:

    multipathd -k'resize map <mpath-device>'
    
  5. Kjør pvresize:

    pvresize /dev/mpath/smtest-upgradetrans
    

Nå er det fysiske volumet utvidet. Det er ikke nødvendig å gjøre utvidelser av volumgruppen.

Viktig

Dersom dette gjelder et filsystem i et cluster, må punkt 2, 3 og 4 gjøres på alle nodene i clusteret. I tillegg bør man gjøre pvscan og deretter vgdisplay for å sjekke at ting er blitt riktig på alle noder.

Merk også at "sd"-devicene bak multipath-devicene varierer er forskjellig på hver node, så ikke cut-and-paste samme rescan-kommandoer på alle nodene.

6   Fjerne LUN

Før man fjerne LUN fra lagringsløsningen må det ryddes pent bort fra maskinen. Eksempelvis skal vi fjerne devicet som har blitt halv2-test02-testlun:

multipath -ll halv2-test02-testlun
halv2-test02-testlun (3600508b4000900f80000d00007d20000) dm-14
HP,HSV210
size=15G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| |- 1:0:2:3 sdab 65:176 active ready running
| |- 2:0:0:3 sdad 65:208 active ready running
| |- 2:0:2:3 sdaf 65:240 active ready running
| `- 1:0:0:3 sdz  65:144 active ready running
`-+- policy='round-robin 0' prio=10 status=enabled
  |- 1:0:1:3 sdaa 65:160 active ready running
  |- 1:0:3:3 sdac 65:192 active ready running
  |- 2:0:1:3 sdae 65:224 active ready running
  `- 2:0:3:3 sdag 66:0   active ready running

Avmonter filsystem og sørg for at all I/O-aktivitet er avsluttet, og fjern volumgruppen (med logisk(e) volum):

vgremove vg_halv2-test02-testlun
Do you really want to remove volume group "vg_halv2-test02-testlun"
  containing 1 logical volumes? [y/n]: y
Do you really want to remove active logical volume testlun1? [y/n]: y
  Logical volume "testlun1" successfully removed
  Volume group "vg_halv2-test02-testlun" successfully removed

Så fjerner man det fra dm-multipath:

multipath -f halv2-test02-testlun

Fjerne devicene listet over:

for d in sdab sdad sdaf sdz sdaa sdac sdae sdag; do echo 1 > /sys/block/$d/device/delete; done

Fjerne LUN fra lagringsløsningen og etter dette laste inn multipath-config på nytt for å sjekke at det ikke henger igjen noe grums:

multipath -F ; multipath -v2

That's all, folks.

Av Trond Hasle Amundsen
Publisert 19. feb. 2013 13:56