Multipath
| Fiche express | |
|---|---|
| Domaine | SAN — multipathing Linux (device-mapper-multipath) |
| Démon | multipathd
|
| Contexte | Linux (RHEL/CentOS/OEL) — gestion des chemins multiples vers une LUN SAN |
| Voir aussi | Multipath (configuration) · HBA · Sg3 utils · Systool |
Le multipathing (MPIO, Multi-Path I/O) permet de gérer plusieurs chemins physiques (HBA, switch, port de baie) vers une même LUN, pour la tolérance de panne et/ou l'agrégation de bande passante. Sous Linux, il repose sur device-mapper-multipath, piloté par le démon multipathd. Voir Multipath (configuration) pour le détail du fichier /etc/multipath.conf selon la distribution et la baie.
Installation
yum install device-mapper-multipath sg3_utils sysfsutils
vi /etc/multipath.conf
modprobe dm-multipath scsi_dh_alua scsi_dh_emc
/etc/init.d/multipathd start
chkconfig multipathd on
Création d'un mpath
mpathconf --enable --with_multipathd y --with_chkconfig y --user_friendly_names n
Lire la sortie de multipath -ll
Format d'une ligne : host:channel:id:lun devnode major:minor [path_status][dm_status]
[size=10G][features=0][hwhandler=0][rw]
\_ round-robin 0 [prio=12][active]
\_ 0:0:1:3 sdac 65:192 [active][ready]
\_ 1:0:0:3 sdd 8:48 [active][ready]
\_ 0:0:0:3 sdv 65:80 [active][ready]
\_ round-robin 0 [prio=3][enabled]
\_ 0:0:2:3 sdaj 66:48 [active][ready]
\_ 1:0:1:3 sdj 8:144 [active][ready]
\_ 1:0:2:3 sdq 65:0 [active][ready]
Rescan des LUN
Mode RHEL automatique
yum install sg3_utils
rescan-scsi-bus.sh
Mode RHEL manuel
Sur une carte de type SCSI, attendre 10 secondes entre chaque scan :
echo "- - -" > /sys/class/scsi_host/<HBA>/scan
for i in $(ls /sys/class/scsi_host | grep ^host); do echo "- - -" > /sys/class/scsi_host/$i/scan; done
Pour les noyaux 2.6 à 2.6.9 (RHEL 4) :
for i in $(ls /sys/class/scsi_host/); do
echo 1 >> /sys/class/scsi_host/$i/issue_lip
echo "- - -" >> /sys/class/scsi_host/$i/scan
done
Mode QLogic
./ql-dynamic-tgt-lun-disc.sh # scan
./ql-dynamic-tgt-lun-disc.sh -s
./ql-dynamic-tgt-lun-disc.sh --scan
./ql-dynamic-tgt-lun-disc.sh -s -r # remove
./ql-dynamic-tgt-lun-disc.sh --scan --refresh
./ql-dynamic-tgt-lun-disc.sh -i # interactif
./ql-dynamic-tgt-lun-disc.sh --interactive
Mode Emulex
lun_scan all
Mode HP
hp_rescan.sh
Résultat du scan
Le résultat des scans apparaît dans le journal noyau :
dmesg
Récupérer les informations de chemin (l'identifiant du disque, ex. sdbg, est repéré dans le dmesg) :
multipath -ll
multipath -ll | grep -B8 sdbg
multipath -ll | grep -A8 sdbg
Ou bien :
multipath -F
multipath -v2
Afficher les chemins côté NetApp :
sanlun lun show
Créer un PV sur une machine physique
Côté baie (NetApp) : augmenter le volume, créer une nouvelle qtree, créer la LUN sur cette qtree.
Côté machine : vérifier les hostX du contrôleur SCSI :
cat /sys/class/scsi_host/hostX/model_name
Pour créer un disque derrière un disque multipath, il faut impérativement partitionner sur le volume natif (ex. /dev/sda), puis détecter les modifications sur les autres chemins :
fdisk /dev/sda
partprobe /dev/sda
partprobe /dev/sdb
kpartx -a /dev/mapper/mpath0
Créer le PV sans partition (ne pas oublier l'alignement, non traité dans cet exemple) :
pvcreate /dev/mapper/mpath4
vgextend datavg /dev/mapper/mpath14
lvextend -L +200G /dev/datavg/mylv
resize2fs /dev/datavg/mylv # ext2/3/4
Augmentation d'une LUN à chaud
Côté baie (NetApp)
Augmenter le volume et/ou la LUN depuis l'interface NetApp.
Côté système
Faire reconnaître l'augmentation :
sanlun lun show
multipath -ll
Vérifier :
parted -s /dev/sdak print
fdisk -l /dev/sdak
Déclencher le rescan sur tous les disques (attendre 10 secondes entre chaque) :
for i in $(ls /sys/block/ | grep ^sd); do echo "1" > /sys/block/$i/device/rescan; done
Puis répercuter l'augmentation sur la table multipath et le PV :
multipath /dev/mpath/mpath4
multipathd -k'resize map mpath4'
multipath -ll
pvs
pvresize /dev/dm-28
Déplacer un PV vers un autre
Préparer les espaces au préalable, puis :
pvmove /dev/dm-24 /dev/dm-28
Suppression / démontage
Supprimer un PV
vgreduce publishvg /dev/dm-24
pvs
pvremove /dev/dm-26
pvremove /dev/dm-25
pvremove /dev/dm-24
pvs
df -h
Démonter un multipath
Supprimer le LVM :
vgremove vgname
pvremove /dev/dm-5
Supprimer les entrées multipath côté applicatif :
multipath -F
multipath -f mpath15
Supprimer les périphériques côté système :
echo 1 > /sys/block/sdba/device/delete
echo 1 > /sys/block/sdbb/device/delete
echo 1 > /sys/block/sdbc/device/delete
echo 1 > /sys/block/sdbd/device/delete
Vérifier :
multipath -ll
multipath -ll -v4 mpath15
service multipathd restart
Autres actions possibles :
dmsetup remove Mpath5
dmsetup remove -f /dev/mapper/lun09
Console de diagnostic
multipathd -k
> show config
> reconfigure # garantit que multipathd a détecté tous les multipaths
> show paths
> CTRL-D
Afficher la configuration active :
/sbin/mpathconf
Tuning du failover
vi /etc/modprobe.conf
options qla2xxx ql2xmaxqdepth=16 ql2xloginretrycount=30 qlport_down_retry=64
État de la carte FC
cat /sys/class/scsi_host/host0/state
cat /sys/class/scsi_host/host0/total_isp_aborts
cat /sys/class/scsi_host/host0/pci_info # nombre de ports sur la carte
cat /sys/class/scsi_host/host0/model_name
cat /sys/class/scsi_host/host0/model_desc
Voir aussi HBA pour l'inspection détaillée d'une carte FC.
État d'un disque / device-mapper
dmsetup table
dmsetup table --major 253 --minor 3
dmsetup info
dmsetup info -c -o name,major,minor --major 253 --minor 0 # commande avancee, a ne pas lancer sans en comprendre l'effet
dmsetup ls --target=multipath # lister les peripheriques multipath
Réinitialiser toutes les correspondances multipath (utile après modification de /etc/multipath.conf) :
multipath -F
Lister en détail tous les disques connus, leurs groupes multipath et leurs réglages (-ll force aussi multipathd à rescanner les nouveaux périphériques) :
multipath -v3 -ll
Éteindre / réactiver un disque :
dmsetup suspend --noflush device_name
dmsetup resume device_name
État d'un port distant :
cat /sys/class/fc_remote_ports/rport-H:B:R/port_state
cat /sys/block/sdab/device/state
Vérification de la route MPIO (ALUA)
/sbin/mpath_prio_ontap /dev/dm-18
/sbin/mpath_prio_alua /dev/dm-18
Codes retour : 50 = optimized, 30 = non-optimized, 3 = erreur.
Exclure un disque local du multipath
Dans un multipath, on ne doit avoir aucune erreur :
multipath -v2
Afficher l'identifiant du disque :
/lib/udev/scsi_id --whitelisted --device=/dev/sda
Puis ajouter cet identifiant à la section blacklist du fichier de configuration :
blacklist {
wwid "<identifiant_du_disque_local>"
}
Correspondance device-mapper / sdX
cat /proc/diskstats
dmsetup ls --tree
lsblk
FCoE
Voir aussi
- Multipath (configuration) — fichier /etc/multipath.conf par distribution/baie
- HBA — cartes FC et sysfs
- Sg3 utils — validation ALUA
- Systool — inspection FC/SCSI via systool
- Rdac — handler alternatif pour certaines baies (LSI/NetApp E-Series)