F.3. Utilizzo di mdadm per configurare lo Storage Multipath e basato su RAID

In modo simile a tutti gli altri tool compresi nel set del pacchetto raidtools, il comando mdadm può essere utilizzato per eseguire tutte le funzioni necessarie relative alla gestione dei set per dispositivi multipli. In questa sezione, vi mostreremo come utilizzare mdadm:

F.3.1. Creazione di un dispositivo RAID con mdadm

Per creare un dispositivo RAID, modificare il file /etc/mdadm.conf in modo da definire i valori appropriati di DEVICE e ARRAY:

DEVICE /dev/sd[abcd]1
ARRAY /dev/md0 devices=/dev/sda1,/dev/sdb1,/dev/sdc1,/dev/sdd1

In questo esempio, la riga DEVICE utilizza un file name globbing tradizionale (consultate la pagina man (7) di glob per maggiori informazioni), per definire i seguenti dispositivi SCSI:

La riga ARRAY definisce un dispositivo RAID (/dev/md0) il quale è compreso dai dispositivi SCSI definiti dalla riga DEVICE.

Prima di utilizzare o creare qualsiasi dispositivo RAID, il file /proc/mdstat utilizza dei dispositivi SCSI attivi:

Personalities :
read_ahead not set
Event: 0
unused devices: <none>

Successivamente, utilizzate la configurazione sopra riportata, insieme al comando mdadm, in modo da poter creare un array RAID 0:

mdadm -C /dev/md0 --level=raid0 --raid-devices=4 /dev/sda1 /dev/sdb1 /dev/sdc1 \
/dev/sdd1
Continue creating array? yes
mdadm: array /dev/md0 started.

Una volta creato, è possibile interrogare il dispositivo RAID in qualsiasi momento, in modo da ottenere le informazioni sullo stato. Il seguente esempio mostra un output del comando mdadm --detail /dev/md0:

/dev/md0:
Version : 00.90.00
Creation Time : Mon Mar  1 13:49:10 2004
Raid Level : raid0
Array Size : 15621632 (14.90 GiB 15.100 GB)
Raid Devices : 4
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Mon Mar  1 13:49:10 2004
State : dirty, no-errors
Active Devices : 4
Working Devices : 4
Failed Devices : 0
Spare Devices : 0

Chunk Size : 64K

      Number   Major   Minor   RaidDevice State
         0       8        1        0      active sync   /dev/sda1
         1       8       17        1      active sync   /dev/sdb1
         2       8       33        2      active sync   /dev/sdc1
         3       8       49        3      active sync   /dev/sdd1
           UUID : 25c0f2a1:e882dfc0:c0fe135e:6940d932
         Events : 0.1

F.3.2. Creazione di un dispositivo Multipath con mdadm

In aggiunta alla creazione degli array RAID, mdadm può essere utilizzato per sfruttare la possibilità di un hardware in grado di supportare più di un percorso I/O per LUN SCSI individuali (unità disco). L'obiettivo dello storage multipath è quello di fornire una disponibilità di dati continua, nel caso in cui si verificasse un errore hardware oppure una saturazione del percorso individuale. Poichè questa configurazione contiene dei percorsi multipli (ognuno dei quali si comporta come un controller virtuale indipendente), in grado di accedere un LUN SCSI comune (unità disco), il kernel di Linux è in grado di rilevare ogni unità condivisa durante l'"attraversamento" di ogni percorso. In altre parole, LUN SCSI (unità disco) conosciuto come /dev/sda, risulta essere accessibile come /dev/sdb, /dev/sdc, e così via a seconda della configurazione specifica.

Per fornire un dispositivo singolo accessibile anche quando è presente un errore sul percorso I/O, oppure a causa della sua saturazione, mdadm include un parametro aggiuntivo nella propria opzione ––level. Questo parametro — multipath — dirige il livello md nel kernel di Linux, in modo da ridirezionare le richieste I/O da un percorso ad un altro, nel caso si verifichi un errore nel percorso I/O.

Per creare un dispositivo multipath, modificare il file /etc/mdadm.conf, in modo da definire i valori per le righe DEVICE e ARRAY, che riflettono la configurazione del vostro hardware.

NotaNota Bene
 

Diversamente dall'esempio RAID precedente (dove ogni dispositivo specificato in /etc/mdadm.conf deve rappresentare unità disco fisiche diverse), ogni dipspositivo presente in questo file, si riferisce alla stessa unità disco condivisa.

Il comando utilizzato per la creazione di un dispositivo multipath è simile al comando utilizzato per creare un dispositivo RAID, la sola differenza è la sostituzione del parametro del livello RAID con il parametro multipath:

mdadm -C /dev/md0 --level=multipath --raid-devices=4 /dev/sda1 /dev/sdb1  
 /dev/sdc1 /dev/sdd1
Continue creating array? yes
mdadm: array /dev/md0 started.

A causa della lunghezza della linea di comando mdadm, la stessa è stata suddivisa in due linee.

In questo esempio, l'hardware consiste in un LUN SCSI presentato come quattro dispositivi SCSI separati, ognuno dei quali in grado di accedere lo stesso storage tramite un percorso diverso. Una volta creato il dispositivo multipath /dev/md0, tutte le operazioni I/O che si riferiscono a /dev/md0, vengono dirette su /dev/sda1, /dev/sdb1, /dev/sdc1, o /dev/sdd1 (a seconda di quale percorso è funzionante e attivo).

La configurazione di /dev/md0 può essere esaminata in modo più approfondito, utilizzando il comando mdadm --detail /dev/md0 in modo da identificare il dispositivo multipath:

/dev/md0:
Version : 00.90.00
Creation Time : Tue Mar  2 10:56:37 2004
Raid Level : multipath
Array Size : 3905408 (3.72 GiB 3.100 GB)
Raid Devices : 1
Total Devices : 4
Preferred Minor : 0
Persistence : Superblock is persistent

Update Time : Tue Mar  2 10:56:37 2004
State : dirty, no-errors
Active Devices : 1
Working Devices : 4
Failed Devices : 0
Spare Devices : 3

    Number   Major   Minor   RaidDevice State
       0       8       49        0      active sync   /dev/sdd1
       1       8       17        1      spare   /dev/sdb1
       2       8       33        2      spare   /dev/sdc1
       3       8        1        3      spare   /dev/sda1
           UUID : 4b564608:fa01c716:550bd8ff:735d92dc
         Events : 0.1

Un'altra caratteristica di mdadm è la possibilità di forzare un dispositivo (sia come membro di un array RAID o come un percorso in una configurazione multipath), alla sua rimozione da una configurazione operativa. Nel seguente esempio, /dev/sda1 viene segnalato con un errore, quindi viene rimosso, per poi essere reintegrato all'interno della configurazione stessa. Per una configurazione multipath, queste azioni non hanno alcun impatto su qualsiasi attività I/O presente:

# mdadm /dev/md0 -f /dev/sda1
mdadm: set /dev/sda1 faulty in /dev/md0
# mdadm /dev/md0 -r /dev/sda1
mdadm: hot removed /dev/sda1
# mdadm /dev/md0 -a /dev/sda1
mdadm: hot added /dev/sda1
#