Multipath & Lun

De BlaxWiki
Révision datée du 20 septembre 2019 à 09:31 par Admin (discussion | contributions)
(diff) ← Version précédente | Voir la version actuelle (diff) | Version suivante → (diff)
Aller à la navigationAller à la recherche

Doc Multipath (pris ici)

Préconisation[modifier]

Il est préférable de partir sur une configuration des disques durs locaux en UUID au niveau du fstab, grub.conf. Il m'est arrivé que l'un des lun vu par le multipath prennait la "lettre" du disque local (en l'occurence /dev/sda) et donc le disque local passait en /dev/sdc et le serveur ne bootait plus (car il y avait /dev/sda3 dans le grub.conf qui n'existait pas car c'était un lun). Le cas ou un des lun est vu / déclaré par le system avant un disque local est rare, mais cela peut arriver

Commande FC[modifier]

Voir cette page

Configuration du multipath[modifier]

Installer le logiciel device-mapper-multipath ou similaire, démarrer le démon multipathd, et charger le modules (modprobe dm_multipath) Installer le package sysfs-utils (qui donne le binaire systool)

Installez l'utilitaire de la carte fibre sur le serveur (ocmanager en générale), une fois ceci fait. Les commandes diffères pour chaque carte hba, mais elles sont relativement simples. Il peut etre utile de désactiver le module de la carte fibre (modprobe -r nomdumoduledela carte) puis de le réactiver (modrobe nomdumoduledela carte); dans le dmesg on doit voir les ports de la carte passer en disabled.

Démarrez-le et relevez pour configurer chaque zone :

 * Le WWPN ('''W'''orld '''W'''ild '''P'''ort '''N'''ame) du connecteur, commençant généralement par 10:00:00.
 * Le WWN ('''W'''orld '''W'''ild '''N'''ame) du connecteur, commençant généralement par 20:00:00.

Il sera aussi nécessaire de configurer le multipath sous le serveur afin de ne voir qu'un seul chemin dans le cas où l'on a 2 fibres et donc 2 chemins qui partent vers le SAN.

Avant de configurer le multipath il faut s'assurer que multipathd est démarré (et qu'il se lancera au démarrage) et que le module dm_multipath soit chargé (depmod && modprobe dm_multipath).

Faire une conf multipath sans mettre la partie "multipaths" (celle ou l alias et le wwwid sont définis).

Le wwwid qui est dans la partie multipaths correspond à ce que ressort un multipath -l, en l'occurence 20016971202cb0005, si il n y a pas d'alias (ici VM), le wwwid est indiqué en premier sur la premiere ligne. Nec correspond au vendor, et iStorage 1000 au product.

Si le multipath -l ne retourne aucune informations (ni message d erreur ou autres), il faut juste executer multipath, et cela va creer le wwwid et l afficher. On pourra alors remodifier le multipath.conf pour mettre la partie "multipaths" avec l'alias et le wwwid

[root@~]# multipath -l
VM (20016971202cb0005) dm-0 NEC,iStorage 1000

Il est possible de générer un multipath.conf à l'aide de la commande mpathconf : mpathconf --enable --with_multipathd y --with_chkconfig y

/!\ On peut aussi lancer la commande multipathd -k pour avoir un shell multipath interactif

Connexion 1 port fibre + 1 switch fibre[modifier]

Dans ce cas, notre serveur a un seul port fibre connecté à un switch San fibre.

Résultat multipath -l[modifier]

lunkvm1 (360a98000503443744e4a68307064324a) dm-0 NETAPP,LUN
size=1.9T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=-1 status=active
| `- 1:0:0:0 sdb 8:16 active undef running
`-+- policy='round-robin 0' prio=-1 status=enabled
  `- 1:0:1:0 sdd 8:48 active undef running

lun2kvm1 (360a98000503443744e4a747841707a30) dm-1 NETAPP,LUN
size=295G features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=-1 status=active
| `- 1:0:0:3 sdc 8:32 active undef running
`-+- policy='round-robin 0' prio=-1 status=enabled
  `- 1:0:1:3 sde 8:64 active undef running


/etc/multipath.conf[modifier]

Configuration du multipath qui retourne les infos multipath -l ci dessus

blacklist {
devnode "sda"   # ici le disque local que j'exclue, à adapter suivant les disques locaux présents sur le serveur
devnode "sdb" # il faut bien mettre une ligne par device sinon ca ne fonctionne pas
}


defaults {
        udev_dir                /dev
        polling_interval        5
        path_selector           "round-robin 0"
        path_grouping_policy    failover
        #getuid_callout          "/sbin/scsi_id -g -u -s /block/%n"
        #getuid_callout         "/lib/udev/scsi_id --whitelisted --device=/dev/%n"
        prio                    const
        #path_checker           readsector0
        rr_min_io               100
        rr_weight               uniform
        #max_fds                        8192
        failback                immediate
        no_path_retry           fail
        user_friendly_names     no
}
devices {
        device {
                vendor                  "NETAPP"
                product                 "7350"
                path_grouping_policy    failover
                path_checker            tur
                failback                immediate
        }
}

multipaths {
        multipath {
        wwid                    360a98000503443744e4a68307064324a
        alias                   lunkvm1
        }
        multipath {
        wwid                    360a98000503443744e4a747841707a30
        alias                   lun2kvm1
        }
}

Connexion 2 port fibre + 2 switch fibre[modifier]

Dans ce cas, notre serveur a une carte fibre qui comporte 2 ports, de chaque port part une fibre qui est reliée à un switch San fibre différents (donc 2 switch), cela nous fait donc en tout 4 chemins

Résultat multipath -l[modifier]

Ici le nom / alias "vm_netapp" apparait car il a été défini dans le multipath.conf

[root@hv1.ent-bourgogne.tetra ~]# multipath -l
vm_netapp (360a9800042597977713f45502d4c6270) dm-0 NETAPP,LUN
size=2.0T features='0' hwhandler='0' wp=rw
|-+- policy='round-robin 0' prio=0 status=active
| `- 0:0:1:1 sdb 8:16 active undef running
|-+- policy='round-robin 0' prio=0 status=enabled
| `- 1:0:1:1 sde 8:64 active undef running
|-+- policy='round-robin 0' prio=0 status=enabled
| `- 0:0:0:1 sda 8:0  active undef running
`-+- policy='round-robin 0' prio=0 status=enabled
  `- 1:0:0:1 sdd 8:48 active undef running

/etc/multipath.conf[modifier]

Configuration du multipath qui retourne les infos multipath -l ci dessus

#blacklist {
#       devnode "^sdc[0-9]*"
#}

defaults {
        udev_dir                /dev
        polling_interval        5
        path_selector           "round-robin 0"
        path_grouping_policy    failover
        prio                    const
        rr_min_io               100
        rr_weight               uniform
        failback                immediate
        no_path_retry           fail
        user_friendly_names     no
}

devices {
        device {
                vendor "NETAPP"
                product "LUN"
                path_grouping_policy    failover
                path_checker            tur
                failback                immediate
        }
}


multipaths {
        multipath {
                wwid                    360a9800042597977713f45502d4c6270
                alias                   vm_netapp
        }
}

Rescan des lun / FC[modifier]

Si l'on branche à chaud les fibres ou qu'il y a une modif de conf coté netapp ou switch fibre, on peut relancer un scan en faisant la commance ci dessous. Si on a deja des lun en place et en prod, cela ne pete rien.

Resize du Lun[modifier]


Dans notre cas, on a un Lun sur le netapp, qui est monté avec multipath sur un kvm, une partition a été créé dans ce lun, et un pv est créé sur cette partition

[root@kvmcdr01b.m2o ~]# multipath -ll
LunVM (360a9800038303172393f46466f596173) dm-2 NETAPP  ,LUN
size=600G features='4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handle' hwhandler='1 alua' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| |- 7:0:1:1 sdg 8:96  active ready running
| `- 8:0:0:1 sdh 8:112 active ready running
`-+- policy='round-robin 0' prio=10 status=enabled
  |- 7:0:0:1 sdf 8:80  active ready running
  `- 8:0:1:1 sdi 8:128 active ready running

[root@kvmcdr01b.m2o ~]# pvs
  PV                         VG         Fmt  Attr PSize   PFree
  /dev/mapper/LunVM1         vol_kvm    lvm2 a--  600.07g 580.07g


Une fois le lun agrandi sur le netapp, on va rescan les hosts scsi & fc, et aussi rescan les disques (sinon le multipath ne se met pas à jour au niveau taille) :

echo "1" > /sys/class/fc_host/host8/issue_lip
echo "1" > /sys/class/fc_host/host7/issue_lip
echo "- - -" > /sys/class/scsi_host/host7/scan
echo "- - -" > /sys/class/scsi_host/host8/scan

echo 1 > /sys/block/sdf/device/rescan
echo 1 > /sys/block/sdg/device/rescan
echo 1 > /sys/block/sdh/device/rescan
echo 1 > /sys/block/sdi/device/rescan

systemctl reload multipathd


[root@kvmcdr01b.m2o ~]# multipath -ll
LunVM (360a9800038303172393f46466f596173) dm-2 NETAPP  ,LUN
size=800G features='4 queue_if_no_path pg_init_retries 50 retain_attached_hw_handle' hwhandler='1 alua' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| |- 7:0:1:1 sdg 8:96  active ready running
| `- 8:0:0:1 sdh 8:112 active ready running
`-+- policy='round-robin 0' prio=10 status=enabled
  |- 7:0:0:1 sdf 8:80  active ready running
  `- 8:0:1:1 sdi 8:128 active ready running

Resize du PV[modifier]

[root@kvmcdr01b.m2o ~]# parted /dev/mapper/LunVM
Error: The backup GPT table is not at the end of the disk, as it should be.  This might mean that another operating system believes the disk is smaller.  Fix, by moving the backup to the end (and removing
the old backup)?
Fix/Ignore/Cancel? Fix

Warning: Not all of the space available to /dev/mapper/LunVM appears to be used, you can fix the GPT to use all of the space (an extra 419291136 blocks) or continue with the current setting?
Fix/Ignore? Fix

Number  Start   End    Size   File system  Name     Flags
 1      1049kB  644GB  644GB               primary  lvm


## !! Les 2 warning ci dessus sont normaux, il faut lui demander de fixer"


(parted) print free
Model: Linux device-mapper (multipath) (dm)
Disk /dev/mapper/LunVM: 859GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End     Size    File system  Name     Flags
        17.4kB  1049kB  1031kB  Free Space
 1      1049kB  644GB   644GB                primary  lvm
        644GB   859GB   215GB   Free Space

(parted) resizepart
Partition number? 1
End?  [644GB]? 100%

(parted) print
Model: Linux device-mapper (multipath) (dm)
Disk /dev/mapper/LunVM: 859GB
Sector size (logical/physical): 512B/4096B
Partition Table: gpt
Disk Flags:

Number  Start   End    Size   File system  Name     Flags
 1      1049kB  859GB  859GB               primary  lvm

 
[root@kvmcdr01b.m2o ~]# pvs
  PV                         VG         Fmt  Attr PSize   PFree
  /dev/mapper/LunVM1         vol_kvm    lvm2 a--  600.07g 580.07g
 
 [root@kvmcdr01b.m2o ~]# pvresize /dev/mapper/LunVM1
  Physical volume "/dev/mapper/LunVM1" changed
  1 physical volume(s) resized or updated / 0 physical volume(s) not resized

[root@kvmcdr01b.m2o ~]# pvscan
  PV /dev/mapper/LunVM1           VG vol_kvm         lvm2 [800.00 GiB / 780.00 GiB free]

Et faire un partprobe pour que les partitions des disques (sdf1; sdg1...) voient bien la bonne taille. Le partprobe est à faire sur les 2 KVM

Et faire un lsblk pour voir tous les disques dans les multipath et leur taille

Suppression du multipath[modifier]

On peut supprimer un lien multipath directement avec la commande multipath -f  $nomalias (ici multipath -f VM), il faudra apres bien sur nettoyer le fichier multipath.conf à la main

Montage des disques[modifier]

 - /etc/init.d/multipath restart => Prise en compte des alias créés dans le fichier de configuration
 - Les alias doivent apparaître dans le répertoire /dev/mapper/
 - Faire un fdisk sur chaque /dev/mapper/ALIAS
 - Faire un mkfs sur chaque /dev/mapper/ALIAS

[root@~]# ll /dev/mapper/
total 0
crw-rw---- 1 root root 10, 58 Dec 16  2011 control
lrwxrwxrwx 1 root root      7 Dec 16 12:38 lunkvm2 -> ../dm-0
lrwxrwxrwx 1 root root      7 Dec 16 12:38 lunkvm2p1 -> ../dm-1

lunkvm2 correspond à notre alias définit dans le multipath.conf (c est en quelque sorte sda) et lunkvm2p1 correspond à la premiere partition de lunkvm2 qui a été créé en faisant un 
fdisk /dev/mapper/lunkvm2 (c est comme sda1). Apres la création de la partition avec fdisk, si dans /dev/mapper on a tj uniquement l alias et pas la partition (donc que lunkvm2 et pas 
lunkvm2p1), il faut faire un /etc/init.d/multipathd restart

Modifier le fichier /etc/fstab puis monter les partitions comme une partition classique en mettant /dev/mapper/lunkvm2p1