Multipath

De wiki.nexiat.fr
Aller à la navigation Aller à la recherche
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

http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html/Online_Storage_Reconfiguration_Guide/fcoeconfig.html

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)