User Tools

Site Tools


doc:appunti:linux:sa:multipath

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
doc/appunti/linux/sa/multipath.txt · Last modified: 2009/11/17 13:56 by niccolo