Multipath : configurer plusieurs chemins pour ses accès disques externe
Contents
1 Introduction
Nous allons aborder ici 2 points :
- Les devices mapper
- Le multipathing
Nous avons besoin de comprendre comment fonctionne les device mapper avant d'attaquer le multipathing, c'est pourquoi il y aura une explication sur les 2 dans cette documentation.
Dans le noyau Linux, la carte des périphériques (device-mapper en anglais) sert de framework générique pour créer une projection d'un périphérique bloc ("mapper" le périphérique) sur un autre. Elle est à la base de LVM2 et EVMS, des RAIDs logiciels, ou encore du chiffrage de disque; et offre des fonctionnalités supplémentaires telles que l'instantané de système de fichiers (file-system snapshot).
La carte des périphériques fonctionne en traitant les données que lui transmet un périphérique bloc virtuel (fourni par elle-même), et en passant les données résultantes à un autre périphérique bloc.
Le Multipathing permet d'avoir plusieurs chemin pour accéder aux même données. Ceci a pour but d'augmenter les capacités d'accès aux données si l'équipement de stockage le permet (actif/actif) et d'assurer de la redondance en cas de panne d'un équipement, tel qu'un contrôleur. Voici a quoi ressemble une architecture faite de multipathing :
Cela fonctionne également très bien avec un seul SAN.
2 Device Mapper
Les Device mapper sont très rarement utilisés manuellement. Ce sont généralement des couches supérieurs qui les utilisent tel que LVM. Néanmoins, nous allons voir comment s'en servir.
Pour ajouter une partition dans device mapper :
dmsetup |
dmsetup create <device> <map_table> |
- device : nom du device a créer
- map_table : est un fichier qui doit contenir les règles de mapping, exemple :
map_table |
0 409600 linear /dev/sdal 0 409600 2048000 linear /dev/sda2 0 |
Si je souhaites créer un device mapper, je peux le faire en une ligne de commande également et sans fichier :
dmsetup |
echo "0 `blockdev --getsize /dev/sda1` linear /dev/sda1 0" | dmsetup create mynewdm |
Il existe plusieurs type de mapping tagets :
- linera : allocation continue
- stripped : allocation segmentée entre tous les périphériques
- erreur : pour générer des erreurs (idéale pour le dev et tests)
- snapshot - périphérique copy-on-write
- snapshot-origin : mapping vers un volume originial
- zero - sparse block devices (équivalent à /dev/null)
- multipath : multi routes pour une connection à un périphérique
Pour voir toutes les devices mapper disponibles :
dmsetup |
> dmsetup table myvg-rootvol: 0 10092544 linear 8:3 2048 |
Pour supprimer un device mapper :
dmsetup |
dmsetup remove <disk> |
Pour lister tous les devices mapper sous forme d'arbre :
dmsetup |
dmsetup ls --tree |
3 Multipathing
3.1 Installation
Le multipath n'est pas quelque chose d'installé de base, nous allons donc avoir besoin d'installer un package :
yum |
yum install device-mapper-multipath |
Puis nous allons charger les modules et passer le service en persistant :
modprobe dm_multipath modprobe dm-round-robin chkconfig multipathd on |
3.2 Configuration
Si vous n'avez pas de fichier de configuration, prenez en un dans la doc :
cp |
cp /usr/share/doc/device-mapper-multipath-0.4.9/multipath.conf /etc/ |
Multipath utilise une notion de groupes allant de 0 à 1024 (du plus prioritaire au moins). Un seul groupe est actif à la fois. Un groupe peut contenir plusieurs chemins.
Nous allons passer à la configuration de notre service de multipathing (je ne présente que les lignes essentielles) :
Je vous conseil fortement de regarder le man pour le choix des options ci dessus.
Nous allons pouvoir démarrer notre service :
service |
service multipathd start |
3.3 Utilisation
Voici l'ordre et les outis à utiliser pour la détection de disques, cette section est très importante :
- Les devices : partprobe /dev/<device> (ex: sda)
- Les device-mapper : kpartx -a /dev/<device-mapper> (ex: dm-1)
- Le multipath : partprobe /dev/mapper/<multipath> (ex: mpath0)
Si nous souhaitons voir les paths actifs :
multipath |
multipath -l |
Pour créer des partitions sur un device mapper multipathé, il faut absolument le faire sur le disque sous jassent (ex: /dev/sda) et non le device mapper multipathé ! Donc la procédure consiste a créer sa partition avec fdisk par exemple, puis faire détecter sa nouvelle partition :
partprobe /dev/sda partprobe /dev/sdb kpartx -a /dev/mapper/mpath0 |
4 FAQ
4.1 Je ne vois toujours pas mes nouveaux LUN, comment rafraichir ?
Il est possible que la création de nouveaux LUN/partition nécessite un nouveau scan pour les détecter. Nous allons avoir besoin de ce package :
yum |
yum install sg3_utils |
Puis lançons le scan :
rescan-scsi-bus.sh |
rescan-scsi-bus.sh |
Ou sinon, nous pouvons le faire directement avec /proc.
- Si c'est sur une plateforme de type SCSI :
echo |
echo "- - -" > /sys/class/scsi_host/<HBA>/scan |
- Si c'est pour une baie Fibre Optique :
echo |
echo "1" > /sys/class/fc_host/<HBA>/issue_lip echo "- - -" > /sys/class/scsi_host/<HBA>/scan |
4.2 Je n'arrive pas à voir correctement ma nouvelle partition, comment m'y prendre ?
Voici comment procéder lorsque l'on rencontre un problème lors de la création d'une partition sur un multipath. Prenons cette exemple :
- Je ne vois pas mpath0p2 sur 1 machine, alors que sur les autres machines, je les voit :
ls |
> ls /dev/mpath/
mpath0 mpath0p1 |
- Je vérifie que je vois bien ma partition sur les 2 paths (sda2 et sdb2) :
S'assurer que dans la configuration, il n'y a pas des options de blacklist qui m'empêcherait de voir correctement les devices. Pour cela, nous allons commenter toutes les parties blacklist :
/etc/multipath.conf |
#blacklist { # wwid 26353900f02796769 # devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*" # devnode "^hd[a-z]" #} |
- On voit que /dev/dm-1p1 est présent, mais pas le 2 (tout du moins qu'il y a une erreur). Je vérifie de nouveau qu'il n'y a aucune présence de mon dm-2 :
ls |
> ls -l /dev/dm-1 brw-rw---- 1 root root 253, 1 Mar 1 13:42 /dev/dm-1 |
- On voit que "253, 1" correspond à /dev/dm-1. On va faire un kpartx et partprobe sur les 2 pour rafraichir les paths :
kpartx -a /dev/dm-1 kpartx -a /dev/dm-2 partprobe /dev/mapper/mpath0 |
Même si vous avez des erreurs du type :
device-mapper: create ioctl failed: Device or resource busy
Ce n'est pas grâve, ça lui permet de rafriachir la liste des devices mapper.
- Et là ça marche :
5 Ressources
http://docs.redhat.com/docs/en-US/Red_Hat_Enterprise_Linux/5/html-single/DM_Multipath/index.html