Multipath I/O je technika ktora sa pouziva pri uloznych zariadeniach a zabezpecuje viac fyzickych ciest medzi uloznym zariadenim a pocitacom.
Inak povedane predstavte si diskove pole ktore ma 2 kontrolery a je pripojene na server ktory ma 2 radice.
Na serveri je nasledne vidiet 2x, ale chceme ho vidiet iba raz a samnotny system nech na pozadi automaticky prehodi spojenie z jedneho kontroleru na druhy v pripade ak sa na diskove pole neda dostat s toho ktory prave pouziva.
Ukazeme si ako to v linuxe rozbehat.
Konkretny hardware na ktorom som multipath rozbehaval je sunfire x4100 z distribuciou debian etch z kernelom 2.6.23 a diskove pole promise vtrak e310s
prepojene su pomocou SAS (serial attached scsi)
Nazorny obrazok:
na diskovom poli je vytvorene jedno velke LV (logical volume), na servery je vidiet ako normalny scsi disk sdX
ked este multipath nie je rozbehany, vyzera to takto
zobrazime si vsetky pripojene zariadenia ktore pouzivaju scsi
redneck:~# lsscsi
[0:0:0:0] cd/dvd AMI Virtual CDROM 1.00 /dev/scd0
[1:0:0:0] disk AMI Virtual Floppy 1.00 /dev/sdb
[2:0:0:0] disk Promise VTrak E310s 0322 /dev/sda <---- diskove pole
[3:0:0:0] disk Promise VTrak E310s 0322 /dev/sdc <---- diskove pole
[4:0:0:0] disk SEAGATE ST973402SSUN72G 0400 -
[4:0:1:0] disk SEAGATE ST973402SSUN72G 0400 -
[4:1:0:0] disk LSILOGIC Logical Volume 3000 /dev/sdd
na tom vyexportovanom "disku" z pola mame nahodene linuxove LVM
tu pekne vidime ze pouzije iba jedno pripojenie
redneck:~# pvs
Found duplicate PV tS0KIb4H0CVGAspUqdWIkZSUVSwMlwib: using /dev/sdc
not /dev/sda
PV VG Fmt Attr PSize PFree
/dev/sdc vg0 lvm2 a- 2.32T 3.00G
teraz by som rad dodal, ze v linuxe su 2 implementacie multipathu, jeden cez md a druhy cez dm (device mapper)
ten cez dm je novsi, pouziva userspace programy multipath a multipathd z baliku multipath-tools
ten cez md som vobec neskusal, mal by sa dat vytvorit cez mdadm, ale ziadnu dokumentaciu som nikde nenasiel
nasledne co potrebujeme k rozbehaniu toho multipathu
staci nainstalovat multipath-tools
v debian etch je ale verzia 0.4.7 ktore mi nefungovala (zamrzalo komplet spojenie z polom), stiahol som teda z testing repozitarov poslednu verziu 0.4.8
a taktiez nejake zavislosti ako novsi dmsetup a libdevmapper
po instalacii sa rovno spustil multipathd, ten automaticky pri kazdej zmene (pridame disk/zobereme disk atd) prekonfiguruje cely multipath
taktiez kazdych X sekund kontroluje spojenie cez jednotlive kanaly a v pripade vypadku jedneho sa zacne pouzivat druhy
zatial nemame vytvoreny ziadny konfig, takze multipath sa automaticky nakonfiguroval nie ako failover ale multibus, to funguje tak ze pristupuje paralelne cez jeden aj druh radic, ale to nechceme, chceme failover
vytvorime teda /etc/multipath.conf
defaults {
udev_dir /dev
polling_interval 5
selector "round-robin 0"
path_grouping_policy failover
getuid_callout "/lib/udev/scsi_id -g -u -s /block/%n"
prio_callout "/bin/true"
path_checker directio
rr_min_io 100
rr_weight uniform
failback immediate
no_path_retry queue
user_friendly_names no
}
blacklist {
device {
vendor SEAGATE
}
device {
vendor LSILOGIC
}
device {
vendor AMI
}
}
v podstate skoro vsetko je na defaultnych hodnotach
okrem path_grouping_policy, to mame nastavene na failover, pouzije teda jedno spojenie a druhe si nechava
v blacklist povieme multipathd nech ignoruje lokalne disky a nejake virtualne zariadenia
taktiez polling_interval zabezpecuje ako casto sa bude kontrolovat spojenie ci zije, ale neviem preco pouzije sa defaultnych 20 sekund
ale to mi nevadi :)
nasledne restartneme cely server
po nabehnuti systemu voila, vsetko funguje
spustime multipathd -k
to nam da taky konzolovy pristup k beziacemu multipathd
multipathd> show paths
hcil dev dev_t pri dm_st chk_st next_check
3:0:0:0 sdc 8:32 0 [active][ready] XXXXXXXXX. 19/20
2:0:0:0 sda 8:0 0 [active][ready] XXXXXXX... 14/20
multipathd> show maps
name sysfs uuid
222330001558f8e27 dm-0 222330001558f8e27
multipathd> show topology
222330001558f8e27dm-0 Promise ,VTrak E310s
[size=2.3T][features=1 queue_if_no_path][hwhandler=0 ]
\_ round-robin 0 [prio=0][active]
\_ 3:0:0:0 sdc 8:32 [active][ready]
\_ round-robin 0 [prio=0][enabled]
\_ 2:0:0:0 sda 8:0 [active][ready]
LVM automaticky prestane pouzivat jednotlive pripojenia k diskovemu pou a pouzije vytvoreny multipath device
multipathd> redneck:~# pvs
PV VG Fmt Attr PSize PFree
/dev/dm-0 vg0 lvm2 a- 2.32T 3.00G
teraz si otestujeme ci prezije vypadok
cez multipathd -k a prikaz show paths sledujem ako to vyzera, na diskovom poli restartnem jeden z kontrolerov, ktory sa akurat pouziva
multipathd> show topology
reload: 222330001558f8e27dm-0 Promise ,VTrak E310s
[size=2.3T][features=1 queue_if_no_path][hwhandler=0 ]
\_ round-robin 0 [prio=0][active] <------- ten co je active pouziva
\_ 2:0:1:0 sda 8:0 [active][ready]
\_ round-robin 0 [prio=0][enabled]
\_ 3:0:2:0 sdc 8:32 [active][ready]
multipathd> show topology
reload: 222330001558f8e27dm-0 Promise ,VTrak E310s
[size=2.3T][features=1 queue_if_no_path][hwhandler=0 ]
\_ round-robin 0 [prio=0][enabled]
\_ 2:0:1:0 sda 8:0 [failed][faulty] <------- padol
\_ round-robin 0 [prio=0][active]
\_ 3:0:2:0 sdc 8:32 [active][ready]
multipathd> show topology
reload: 222330001558f8e27dm-0 Promise ,VTrak E310s
[size=2.3T][features=0 ][hwhandler=0 ]
\_ round-robin 0 [prio=0][enabled]
\_ 3:0:2:0 sdc 8:32 [active][ready] <------- zacal pouzivat druhy
ked nabehne spojenie s tym povodnym radicom, tak sa automaticky prida, ale nemam z testovania cut&pastnute
pred restartom toho kontroleru som spustil find na suborove systemy a monitoroval cez dstat -D sda,sdc pristup na jednotlive spojenia z diskovym polom
vyzeralo to takto:
----total-cpu-usage---- --dsk/sda-----dsk/sdc--
usr sys idl wai hiq siq|_read _writ:_read _writ
0 0 99 0 0 0| 0 0 : 848k 0
0 0 100 0 0 0| 0 0 : 660k 0
0 0 100 0 0 0| 0 0 : 832k 0
0 0 100 0 0 0| 0 0 : 752k 0
0 0 100 0 0 0| 0 0 : 716k 0
0 0 100 0 0 0| 0 0 : 672k 0
0 0 100 0 0 0| 0 0 : 736k 0
0 0 99 0 0 0| 0 0 : 696k 0
0 1 99 0 0 0| 0 0 : 904k 0
0 0 100 0 0 0| 0 0 : 696k 0
0 0 100 0 0 0|4096B 0 : 748k 0
0 0 100 0 0 0| 0 0 : 440k 0
0 0 100 0 0 0| 0 0 : 0 0
0 0 100 0 0 0| 0 0 : 0 0
0 0 100 0 0 0| 0 0 : 0 0
0 0 99 1 0 0| 0 0 : 0 0
0 0 100 0 0 0| 0 0 :4096B 0
0 0 100 0 0 0| 0 0 : 0 0
0 0 82 18 0 0| 0 0 : - 0
0 0 75 25 0 0| 0 0 : 0 0
----total-cpu-usage---- --dsk/sda-----dsk/sdc--
usr sys idl wai hiq siq|_read _writ:_read _writ
0 0 75 25 0 0| 0 0 : 0 0
0 0 75 25 0 0| 0 0 : 0 0
0 0 88 11 0 0| 308k 0 : 0 0
0 1 99 0 0 0| 812k 0 : 0 0
0 0 100 0 0 0|1224k 0 : 0 0
1 1 98 0 0 0|2720k 0 : 0 0
0 0 100 0 0 0| 852k 0 : 0 0
0 0 99 0 0 0| 852k 0 : 0 0
0 1 99 0 0 0| 772k 0 : 0 0
0 0 100 0 0 0| 648k 0 : 0 0
0 0 100 0 0 0| 648k 0 : 0 0
pekne vidime ako pouzival najskor sdc, po vypadnuti nam na chvilu zamrzol a za niekolko sekund ho prehodil na sda
(ak ste si vsimli ze vo vypise z dstat vypadlo sdc a zacalo sa pouzivat sda a v tom vyssom vypise z multipathd -k je to opacne, tak to je z dovodu ze mam cut&paste z viacerych testov a nechcelo sa mi to falsovat aby to sedelo)
to je vsetko co som chcel napisat
dobry clanok :-}
Pekne, v linuxe som sa s multipath este nehral.
Na HP-UX takyto failover multipath podporuje samotne LVM, proste ked najde "duplicitne" PV tak si to zariadenie prida ako alternate path k tomu prvemu. V konfiguracii si aj pamata ktore je "primarne" a teda vies mat kopu diskov a na polku z nich pristupovat cez 1 radic a na druhu cez druhy radic. Takze pokial funguju oba, tak mas 2nasobny performance. Ked jeden vypadne, zacne ist vsetko len cez jeden (co nemusi stihat), takze rychlost klesne, ale vsetky data su stale pristupne. Vyzera to asi takto:
[ROOT sgpux048]home/mareksu # pvdisplay /dev/dsk/c17t10d0
--- Physical volumes ---
PV Name /dev/dsk/c17t10d0
PV Name /dev/dsk/c5t10d0 Alternate Link
VG Name /dev/vg02
PV Status available
Allocatable yes
VGDA 2
Cur LV 9
PE Size (Mbytes) 4
Total PE 4340
Free PE 0
Allocated PE 4340
Stale PE 0
IO Timeout (Seconds) default
Autoswitch On
Load balancing cez viac ciest LVM nevie, ale je na to specialny soft. Vacsinou sa ale z diskovych poli exportuje viac virtualnych diskov a na nich sa robi LVM, takze nie je problem kazdemu z nich dat inu cestu ako primarnu. Samozrejme to neriesi ze kazdy z nich moze byt inac zatazeny a teda je tazke odhadnut ktore dat spolu cez jednu cestu...