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.
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_names | Asetettuna Yes, järjestelmä nimeää polut muotoon mpathn |
verbosity | Kuinka paljon tulostetaan "debug" tietoa. Voidaan määritellä arvovälillä 0-6, oletuksena 2 |
udev_dir | Hakemisto johon laitenodet luodaan. |
polling_interval | Määrittelee aikavälin kuinka usein polkuja skannataan. |
getuid_callout | Määrittelee ohjelman, jolla saadaan yksilöllinen path-tunniste. |
prio | Määrittelee oletusfuktion jolla haetaan path-prioriteetti. |
path_selector | Määrittelee oletusalgoritmin jolla päätetään kuinka I/O-liikennettä lähetetään polkuja pitkin. |
path_grouping_policy | Määrittelee polkujen oletusryhmittelyn. |
prio: | Selite |
const | Asetetaan kaikille poluille prioriteetti 1 |
emc | Asetetaan EMC-levyjärjestelmien mukainen prioriteetti |
alua | Asetetaan SCSI-3 ALUA asetusten mukainen prioriteetti |
tpg_pref | Asetetaan SCSI-3 ALUA asetusten mukainen prioriteetti, käyttäen preffered port bitiä. |
ontap | Asetetaan NetApp-levyjärjestelmien mukainen prioriteetti |
rdac | Asetetaan LSI/Engenio RDAC-ohjaimen mukainen prioriteetti |
hp_sw | Asetetaan Compaq/HP-levyjärjestelmien mukainen prioriteetti active/standby tilassa. |
hds | Asetetaan Hitachi HDS-levyjärjestelmien mukainen prioriteetti. |
Path_selector: | Selite |
round-robin 0 | Kierrättää liikennettä kaikkien polkujen kautta samassa polkuryhmässä, lähettäen saman määrän dataa kaikille poluille |
queue-length 0 | Lähettää I/O-liikenteen vähiten kuormitetulle polulle |
service-time 0 | Lä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 |
failover | Yksi polku per prioriteettiryhmä |
multibus | Kaikki polut yhdessä priotiteettiryhmässä |
group_by_serial | Yksi prioriteettiryhmä per havaittu sarjanumero |
group_by_prio | Yksi prioriteettiryhmä per prioriteettiarvo. Arvot määritellään callout-käskyllä, joko globaaleissa, controller, tai multipath asetuksissa |
group_by_node_name | Yksi 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_rq | Kuinka monta I/O-pyyntöä lähtetetään polulle ennen kuin vaihdetaan seuraavalle polulle samassa polkuryhmässä. |
rr_weight | Hakemisto johon laitenodet luodaan. |
no_path_retry | Kuinka monta kertaa yritetään käyttää vikaantunutta polkua. |
path_checker | Määrittelee oletusasetuksen polkujen tilan määrittelyyn. |
failback | Määrittelee oletusasetuksen polkujen palautumiselle. |
no_path_retry: | Selite |
fail | Asetetaan polku failed tilaan välittömästi ilman uudelleen yrityksiä. |
numeroarvo | Kuinka monta kertaa yritetään failed pathia, ennen kuin lopetetaan yritykset. |
queue | Yritetään niin kauan kunnes polku on korjaantunut. |
path_checker: | Selite |
readsector0 | Luetaan laitteen ensimmäinen sektori |
tur | Lähetetään TEST UNIT READY laitteelle |
emc_clariion | Määritellään polku lähettämällä EMC Clariion EVPD mukainen kysely |
hp_sw | Tarkastetaan polun tila HP storage-järjestelmien Active/standby firmwarella |
rdac | Yksi prioriteettiryhmä per kohdenode. Kohdenodejen nimet saadaan /sys/class/fc_transport/target*/node_name |
directio | Luetaan ensimmäinen sektori suoralla I/O:lla |
failback: | Selite |
immediate | Palautuu käyttämään suurimman prioriteetin polkuryhmää, jossa on aktiivisia polkuja. |
manual | Polut palautuvat vain manuaalisesti. |
followover | Automaattinen 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
}
}