Bonjour à tous,
Aujourd'hui, un billet portant sur le multipathing disk.
La situation : un cluster de Proxmox 5 (Debian 9) hébergé sur un châssis Nec FlexPower (Intel MFSYS35) composé de 3 lames. Le châssis possède 2 contrôleurs SAS sur lequel un storage pool est créé qui acceuille les lun pour le stockage des VMs.
Pour pouvoir utiliser les deux contrôleurs en actif/passif, il est nécessaire d'installer un paquet :
root@guerech:~# apt install multipath-tools
Si le stockage où est installé l'OS est également un lun (ce qui est mon cas), un second paquet est nécessaire :
root@guerech:~# apt install multipath-tools-boot
Il est nécessaire de créer le fichier de configuration /etc/multipath.conf.
Avant de l'écrire, il est nécessaire de récupérer certaines informations comme le vendeur et le type de baie :
root@guerech:~# cat /sys/block/sda/device/vendor
Intel
root@guerech:~# cat /sys/block/sda/device/model
Multi-Flex
Il reste à obtenir les id des disques. Dans mon cas ayant 2 contrôleurs, chaque lun sera présent avec 2 disques :
root@guerech:~# /lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sda
222ff000155ae54b3
root@guerech:~# /lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdb
222bb0001558b0b23
root@guerech:~# /lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdc
222ff000155ae54b3
root@guerech:~# /lib/udev/scsi_id --whitelisted --replace-whitespace --device=/dev/sdd
222bb0001558b0b23
On voit donc que le lun0 est présent via les disques sda et sdc, le lun1 avec les disques sdb et sdd.
Il reste le fichier de configuration /etc/multipath.conf à écrire :
devices {
device {
vendor "Intel"
product "Multi-Flex"
path_grouping_policy "group_by_prio"
uid_attribute "ID_SERIAL"
prio "alua"
path_checker tur
path_selector "round-robin 0"
hardware_handler "1 alua"
failback immediate
rr_weight uniform
rr_min_io 100
no_path_retry queue
features "1 queue_if_no_path"
product_blacklist "VTrak V-LUN"
}
}
multipaths {
multipath {
wwid 222ff000155ae54b3
alias system_lun0
}
multipath {
wwid 222bb0001558b0b23
alias data_lun0
}
}
Un petit détail des différentes options :
- vendor : nom du constructeur de la baie
- product : modèle de la baie
- path_grouping_policy : définit la méthode de sélection du chemin
- uid_attribute : attribut pour udev définissant l'identifier du chemin unique
- prio : génère les paramètres de path depuis ALUA-SCSI3
- path_checker : définit la méthode utilisée pour tester les paths
- path_selector : définit le type d'algorithmes utiliser pour choisir le prochain chemin
- hardware_handler : le gestionnaire de matériel pour gérer les lun
- failback : spécifie un failback immédiat sur le chemin avec la priorité la plus haute
- rr_weight : définit les priorités de sélection de chemin
- rr_min_io : définit le nombre d'I/O avant de changer de chemin
- no_path_retry : laisse les I/O en queue en attendant le rétablissement du chemin
- features : définit les fonctionnnalités pour mapper les périphériques
- product_blacklist : spécifie une regex pour blacklister certains devices
- alias : définit un nom au lun donné
Il est possible de voir un détails des options ici :
https://www.mankier.com/5/multipath.conf
https://help.ubuntu.com/lts/serverguide/multipath-dm-multipath-config-file.html
Il est possible de lister les différents lun de présent :
root@guerech:~# multipath -ll
data_lun0 (222bb0001558b0b23) dm-1 Intel,Multi-Flex
size=920G features='2 queue_if_no_path retain_attached_hw_handler' hwhandler='1 alua' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| `- 0:0:0:1 sdb 8:16 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 0:0:1:1 sdd 8:48 active ready running
system_lun0 (222ff000155ae54b3) dm-0 Intel,Multi-Flex
size=80G features='2 queue_if_no_path retain_attached_hw_handler' hwhandler='1 alua' wp=rw
|-+- policy='round-robin 0' prio=50 status=active
| `- 0:0:0:0 sda 8:0 active ready running
`-+- policy='round-robin 0' prio=1 status=enabled
`- 0:0:1:0 sdc 8:32 active ready running
J'ai créé un LVM par-dessus, il est à créer sur /dev/mapper/data_lun0 :
root@guerech:~# fdisk -l /dev/mapper/data_lun0
Disk /dev/mapper/data_lun0: 920 GiB, 987842478080 bytes, 1929379840 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
root@guerech:~# pvs
PV VG Fmt Attr PSize PFree
/dev/mapper/data_lun0 vmdata lvm2 a-- 920.00g 0
Il ne reste plus qu'à l'utiliser comme vous le souhaitez!
Have a nice day.