Multipath

Multipath on tekniikka, jolla varmistetaan palvelimen ja levyjärjestelmän välinen liikenne usealla SAN-polulla (Storage Area Network). Multipathing käyttää erilaisia algoritmeja vikasietoisuuden ja kuormantasauksen takaamiseksi. Windows-käyttöjärjestelmässä MPIO-asetuksia voidaan muuttaa Disk Managementin kautta. Oletuksena DM-Multipathing käyttää Round-robin algoritmia kuorman tasaamiseen. Round-robin on aktiivinen algoritmi, joka käyttää normaalitilanteessa kaikkia polkuja liikenteen lähettämiseen. SAN-verkko voidaan toteuttaa perinteisellä IP-verkkotekniikalla tai Fibre Channelilla (FC). Näiden lisäksi käytössä on useita tietonsiirtoprotokollia (iSCSI/FCoE), joista osa toimii kummankin tekniikan kanssa.

SAN-verkko

KUVIO 1. iSCSI-protokollaan perustuva multipath SAN-verkko

Linux - Multipath.conf

Multipath.conf -tiedosto on jaettu viitteen osaan: blacklist, blacklist_exceptions, defaults, multipaths ja devices. Asetukset voidaan määritellä useassa eri kohdassa, mutta levyjärjestelmän ohjaimen asetukset ajavat yleensä multipath.conf –tiedoston asetusten yli ja multipath.conf:ssa multipath ja devices –määrityksien sisällä olevat asetukset ajavat oletusasetusten yli. Multipath.conf -tiedoston asetuksilla ei juurikaan ole merkitystä, jos käytössä on muutama palvelin. Lähinnä asetuksissa voidaan määritellä active/active, active/passive asetukset riippuen SAN-verkon rakenteesta. Asetuksien tarkoitus on optimoida levyjärjestelmän toimintaa suurissa ympäristöissä, joissa SAN-liikenne aiheuttaa suurta kuormaa levyjärjestelmälle. Valmistajilla on omat optimoidut asetukset levy- ja käyttöjärjestelmille. SAN-verkkoa rakennettaessa järjestelmä toimii oletusasetuksilla ja usein ylläpitäjä tyytyy oletusasetuksiin, koska ne vaikuttavat toimivan. Verkon kasvaessa oletusasetusten käyttö voi aiheuttaa erilaisia I/O timeout hälytyksiä, jos hetkellinen kuorma on suuri. Esim. kaikkien palvelimien varmistukset on ajoitettu suoritettavaksi samaan aikaan.

Aiemmat multipath versiot yrittivät luoda multipath-laitteita kaikista blacklistin ulkopuolisista laitteista. find_multipath yes -optiolla multipath lisää MP-laitteet vain, jos ne täyttävät jonkin seuraavista ehdoista: MP-löytää kaksi samaa WWID:tä, joita ei ole lisätty blacklistille. Käyttäjä lisää laitteen multipath -komennolla. Polulla on sama World Wide Identifier (WWID) kuin aiemmin luodulla MP-laitteella. Multipath tallentaa WWID:t /etc/multipath/wwids -tiedostoon. Muutamia multipath.conf -tiedoston määritelmiä:

user_friendly_namesAsetettuna Yes, järjestelmä nimeää polut muotoon mpathn
verbosityKuinka paljon tulostetaan "debug" tietoa. Voidaan määritellä arvovälillä 0-6, oletuksena 2
udev_dirHakemisto johon laitenodet luodaan.
polling_intervalMäärittelee aikavälin kuinka usein polkuja skannataan.
getuid_calloutMäärittelee ohjelman, jolla saadaan yksilöllinen path-tunniste.
prioMäärittelee oletusfuktion jolla haetaan path-prioriteetti.
path_selectorMäärittelee oletusalgoritmin jolla päätetään kuinka I/O-liikennettä lähetetään polkuja pitkin.
path_grouping_policyMäärittelee polkujen oletusryhmittelyn.

prio:Selite
constAsetetaan kaikille poluille prioriteetti 1
emcAsetetaan EMC-levyjärjestelmien mukainen prioriteetti
aluaAsetetaan SCSI-3 ALUA asetusten mukainen prioriteetti
tpg_prefAsetetaan SCSI-3 ALUA asetusten mukainen prioriteetti, käyttäen preffered port bitiä.
ontapAsetetaan NetApp-levyjärjestelmien mukainen prioriteetti
rdacAsetetaan LSI/Engenio RDAC-ohjaimen mukainen prioriteetti
hp_swAsetetaan Compaq/HP-levyjärjestelmien mukainen prioriteetti active/standby tilassa.
hdsAsetetaan Hitachi HDS-levyjärjestelmien mukainen prioriteetti.

Path_selector:Selite
round-robin 0Kierrättää liikennettä kaikkien polkujen kautta samassa polkuryhmässä, lähettäen saman määrän dataa kaikille poluille
queue-length 0Lähettää I/O-liikenteen vähiten kuormitetulle polulle
service-time 0Lähettää I/O-liikenteen polulle jolla on lyhyin service time. Service time saadaan kun algoritmi vertaa jokaisen polun I/O-liikenteen määrän jaettuna suhteellisella läpäisykyvyllä

path_grouping_policy:Selite
failoverYksi polku per prioriteettiryhmä
multibusKaikki polut yhdessä priotiteettiryhmässä
group_by_serialYksi prioriteettiryhmä per havaittu sarjanumero
group_by_prioYksi prioriteettiryhmä per prioriteettiarvo. Arvot määritellään callout-käskyllä, joko globaaleissa, controller, tai multipath asetuksissa
group_by_node_nameYksi prioriteettiryhmä per kohdenode. Kohdenodejen nimet saadaan /sys/class/fc_transport/target*/node_name


rr_min_io Kuinka monta I/O-pyyntöä lähtetetään polulle ennen kuin vaihdetaan seuraavalle polulle samassa polkuryhmässä. Kernelversio vanhempi kuin 2.6.31
rr_min_io_rqKuinka monta I/O-pyyntöä lähtetetään polulle ennen kuin vaihdetaan seuraavalle polulle samassa polkuryhmässä.
rr_weightHakemisto johon laitenodet luodaan.
no_path_retryKuinka monta kertaa yritetään käyttää vikaantunutta polkua.
path_checkerMäärittelee oletusasetuksen polkujen tilan määrittelyyn.
failbackMäärittelee oletusasetuksen polkujen palautumiselle.

no_path_retry:Selite
failAsetetaan polku failed tilaan välittömästi ilman uudelleen yrityksiä.
numeroarvoKuinka monta kertaa yritetään failed pathia, ennen kuin lopetetaan yritykset.
queueYritetään niin kauan kunnes polku on korjaantunut.

path_checker:Selite
readsector0Luetaan laitteen ensimmäinen sektori
turLähetetään TEST UNIT READY laitteelle
emc_clariionMääritellään polku lähettämällä EMC Clariion EVPD mukainen kysely
hp_swTarkastetaan polun tila HP storage-järjestelmien Active/standby firmwarella
rdacYksi prioriteettiryhmä per kohdenode. Kohdenodejen nimet saadaan /sys/class/fc_transport/target*/node_name
directioLuetaan ensimmäinen sektori suoralla I/O:lla

failback:Selite
immediatePalautuu käyttämään suurimman prioriteetin polkuryhmää, jossa on aktiivisia polkuja.
manualPolut palautuvat vain manuaalisesti.
followoverAutomaattinen palautuminen tapahtuu, kun polkuryhmän ensimmäinen polku tulee aktiiviseksi. Tämä estää noden automaattisen failbackin, kun toinen node pyytää failbackia.

Esimerkki 1. Polut on jaettu prioriteettiryhmien mukaan failover asetuksella. Ensimmäinen listatuista poluista on aktiivinen. Verkkoliitäntä enp0s10 ajetaan alas, siirtyy seuraava polku aktiiviseksi.

# multipath -ll
yellow (3624bf45e4ff0c7395ba5ba91598f31ca) dm-3 NEXENTA ,COMSTAR
size=40G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=1 status=active
| `- 3:0:0:0 sdb 8:16 active ready running 
|-+- policy='round-robin 0' prio=1 status=enabled
| `- 4:0:0:0 sdc 8:32 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
  `- 5:0:0:0 sdd 8:48 active ready running
# ifconfig enp0s10 down
# multipath -ll
yellow (3624bf45e4ff0c7395ba5ba91598f31ca) dm-3 NEXENTA ,COMSTAR
size=40G features='1 queue_if_no_path' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=0 status=enabled
| `- 3:0:0:0 sdb 8:16 failed faulty running
|-+- policy='round-robin 0' prio=1 status=active
| `- 4:0:0:0 sdc 8:32 active ready  running
`-+- policy='round-robin 0' prio=1 status=enabled
  `- 5:0:0:0 sdd 8:48 active ready  running

Esimerkki 2. Polut on samassa ryhmässä multibus asetuksella. Kaikki polut ovat active -tilassa. Verkkoliitäntä enp0s10 ajetaan alas, ensimmäinen polku ajetaan faulty -tilaan.

# multipath -ll
yellow (3624bf45e4ff0c7395ba5ba91598f31ca) dm-3 NEXENTA ,COMSTAR
size=40G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  |- 3:0:0:0 sdb 8:16 active ready running
  |- 4:0:0:0 sdc 8:32 active ready running
  `- 5:0:0:0 sdd 8:48 active ready running
# ifconfig enp0s10 down
# multipath -ll
yellow (3624bf45e4ff0c7395ba5ba91598f31ca) dm-3 NEXENTA ,COMSTAR
size=40G features='1 queue_if_no_path' hwhandler='0' wp=rw
`-+- policy='round-robin 0' prio=1 status=active
  |- 3:0:0:0 sdb 8:16 failed faulty running
  |- 4:0:0:0 sdc 8:32 active ready  running
  `- 5:0:0:0 sdd 8:48 active ready  running


# vi /etc/multipath.conf
defaults {
        user_friendly_names yes
        find_multipaths yes
}

blacklist {
       wwid 26353900f02796769
        devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
        devnode "^hd[a-z]"
}
multipaths {
        multipath {
                wwid                    3624bf45e4ff0c7395ba5ba91598f31ca
                alias                   yellow
                path_grouping_policy    failover
                path_selector           "service-time 0"
                failback                manual
                rr_weight               priorities
                no_path_retry           fail
                prio                    alua
        }
        multipath {
                wwid                    36589cfc0000005d3245c0964236ef69b
                alias                   red
                rr_weight               priorities
                failback                immediate
                no_path_retry           5

        }
}