Table of Contents
Multipath I/O
In Linux le funzionalità di multipath I/O sono state rimosse dai singoli driver delle schede Fibre Channel, dove erano stati tradizionalmente implementati dai vari vendor. Adesso il multipath viene gestito dal modulo kernel dm_multipath
, che funziona tramite device mapper.
Ad esempio - per le schede QLogic - il parametro ql2xfailover
del modulo qla2xxx
è deprecato (se non del tutto rimosso, come nel kernel 2.6.30).
Installazione
Oltre ai moduli kernel dei controller HBA e al modulo dm_multipath
, è necessario installare i tool userspace contenuti nel pacchetto Debian multipath-tools.
Dopo aver caricato il modulo qla2xxx
risulta disponibile un device SCSI per ogni path. Ad esempio su un sistema con due controller HBA QLogic, ciascuno dei quali connesso con due patch, vengono rilevati quattro device SCSI:
[1009446.698632] sd 0:0:0:1: [sda] 209715200 512-byte hardware sectors: (107 GB/100 GiB) [1009446.698871] sd 0:0:1:1: [sdb] 209715200 512-byte hardware sectors: (107 GB/100 GiB) [1009446.724772] sd 1:0:0:1: [sdc] 209715200 512-byte hardware sectors: (107 GB/100 GiB) [1009446.725049] sd 1:0:1:1: [sdd] 209715200 512-byte hardware sectors: (107 GB/100 GiB)
All'interno di ciascun disco esiste una partizione (sda1, sdb1, sdc1, sdd1) che occupa l'intero spazio disponibile.
In realtà si tratta di un'unico volume condiviso dalla SAN, raggiungibile tramite quattro path distinte. Prima di usarlo sotto Linux bisogna aggregare le path.
Assemblaggio
L'assemblaggio delle quattro path in un unico device (coalescing) viene eseguito da multipath(8)
, avviato automaticamente da /etc/init.d/multipath-tools-boot
. Se il probing automatico dei device multipath non funziona, si possono dare indicazioni nel file di configurazione /etc/multipath.conf
.
Per vedere i device assemblati e la topologia multipath:
multipath -ll 3600508b4000ce4cd0000d00000200000dm-0 HP ,HSV300 [size=100G][features=0][hwhandler=0] \_ round-robin 0 [prio=1][active] \_ 0:0:0:1 sda 8:0 [active][ready] \_ round-robin 0 [prio=1][enabled] \_ 0:0:1:1 sdb 8:16 [active][ready] \_ round-robin 0 [prio=1][enabled] \_ 1:0:1:1 sdd 8:48 [active][ready] \_ round-robin 0 [prio=1][enabled] \_ 1:0:0:1 sdc 8:32 [active][ready]
Informazioni simili sono fornite dal sottosistema device mapper, tramite dmsetup
:
dmsetup --tree ls 3600508b4000ce4cd0000d00000200000-part1 (254:1) └─3600508b4000ce4cd0000d00000200000 (254:0) ├─ (8:32) ├─ (8:48) ├─ (8:16) └─ (8:0)
Tra parentesi abbiamo il (major:minor) number di ogni device, in particolare (8:0) corrisponde a /dev/sda
, (8:16) a /dev/sdb
, ecc.
Il device (partizione) da utilizzare è /dev/mapper/3600508b4000ce4cd0000d00000200000-part1
, per comodità viene creato il link simbolico /dev/dm-1
.
Per disassemblare tutti i device multipath non in uso:
multipath -F
Monitoraggio
Il monitoraggio viene eseguito dal demone multipathd
, avviato automaticamente da /etc/init.d/multipath-tools
. Il file di configurazione è /etc/multipath.conf
.
Esiste una modalità command line di multipathd
, basta avviarlo con lo switch -k
(si esce con Ctrl-D). Dal prompt si dovrebbe poter mettere in stato di fail un path, ecc. Ma non funziona:
multipathd -k multipathd> show paths hcil dev dev_t pri dm_st chk_st next_check 0:0:0:1 sda 8:0 1 [undef][ready] [orphan] 0:0:1:1 sdb 8:16 1 [undef][ready] [orphan] 1:0:1:1 sdd 8:48 1 [undef][ready] [orphan] 1:0:0:1 sdc 8:32 1 [undef][ready] [orphan] multipathd> fail path sdd fail
Testing
Installare i pacchetti Debian:
- parted
- hdparm
- sysstat
Il primo contiene partprobe(8)
, necessario per rileggere senza reboot la tabella delle partizioni dopo averla modificata.
Con hdparm(8)
si può eseguire un semplice test di performance sul disco. Ecco i risultati sul disco Fibre Channel e sullo Smart Array SCSI:
hdparm -T /dev/dm-1 Timing cached reads: 3322 MB in 2.00 seconds = 1661.30 MB/sec
hdparm -T /dev/cciss/c0d0p7 Timing cached reads: 3302 MB in 2.00 seconds = 1651.03 MB/sec
Con iostat(1)
è possibile monitorare il carico e la path usata. Ecco un esempio catturato durante la copia di svariati giga di dati:
iostat 4 Device: tps Blk_read/s Blk_wrtn/s Blk_read Blk_wrtn cciss/c0d0 0.00 0.00 0.00 0 0 sda 424.50 0.00 403848.00 0 1615392 sdb 0.00 0.00 0.00 0 0 sdd 0.00 0.00 0.00 0 0 sdc 0.00 0.00 0.00 0 0 dm-0 49676.25 0.00 397412.00 0 1589648 dm-1 49675.75 0.00 397406.00 0 1589624