Jan 14 2011
Disques SAN iSCSI, multipath et Partitions LVM sous Linux
Voici comment configurer des disques iSCSI en quelques pas sur Linux. Même si l’installation a été effectuée sur une Redhat Enterprise 5.5 connectée à une baie HP MSA 2012i, toute la configuration reste générique et reste applicable à n’importe quel SAN.
J’ajouterai un article pour voir si les performances sous Linux et Windows sont au rendez-vous sur une même baie iSCSI, vu qu’il semble y avoir beaucoup de problèmes reportés sur le net.
iSCSI Setup
Tout d’abord, l’installation du package iscsi tools est requise:
redhat $ yum install iscsi-initiator-utils
debian $ apt-get install open-iscsi
Configurer les paramètres de sécurité s’ils ont été appliqués sur le SAN. Sur Ubuntu/Debian, changez aussi startup à auto.
$ vi /etc/iscsi/iscsid.conf
node.session.auth.authmethod = <CHAP most of the time>
node.session.auth.username = <ISCSI_USERNAME>
node.session.auth.auth.password = <Password>
discovery.sendtargets.auth.authmethod = <CHAP most of the time>
discovery.sendtargets.auth.username = <ISCSI_USERNAME>
discovery.sendtargets.auth.password = <Password>
debian $ vi /etc/iscsi/iscsid.conf
# node.startup = manual
node.startup = automatic
Vous n’êtes pas obligés de mettre un mot de passe si le réseau est sécurisé avec des vlans ou des switches dédiés. L’authentification ajoute une couche de complexité lors de dépannage.
Le nom d’hôte apparaîtra sur le SAN en accord avec la configuration sur le serveur. Par défaut InitiatorName= iqn.1994-05.com.redhat:2ea02d8870eb, il peut être changé pour un nom d’hôte plus court pour une config plus simple.
Il est éditable dans /etc/iscsi/initiatorname.iscsi. Idem s’il n’est pas trouvé automatiquement.
Vous pouvez maintenant démarrer le service iscsi, de façon permanente.
$ systemctl enable iscsi
$ systemctl start iscsi
$ systemctl enable iscsid
$ systemctl start iscsid
Les cibles peuvent être découvertes grâce à la commande iscsiadm. L’exécution sur 1 IP est normalement suffisante.
$ iscsiadm -m discovery -t sendtargets -p 10.0.0.1
$ iscsiadm -m discovery -t sendtargets -p 10.0.0.2
On peut ensuite les afficher
$ iscsiadm -m node
10.1.0.1:3260,2 iqn.1986-03.com.hp:storage.msa2012i.0919d81b4b.a
10.0.0.1:3260,1 iqn.1986-03.com.hp:storage.msa2012i.0919d81b4b.a
10.1.0.2:3260,2 iqn.1986-03.com.hp:storage.msa2012i.0919d81b4b.b
10.0.0.2:3260,1 iqn.1986-03.com.hp:storage.msa2012i.0919d81b4b.b
Et s’y connecter (le service devrait le faire automatiquement aussi)
$ iscsiadm -m node -T iqn.1986-03.com.hp:storage.msa2012i.0919d81b4b.a --login
Logging in to [iface: default, target:
iqn.1986-03.com.hp:storage.msa2012i.0919d81b4b.a, portal: 10.0.0.1,3260] (multiple)
Logging in to [iface: default, target:
iqn.1986-03.com.hp:storage.msa2012i.0919d81b4b.a, portal: 10.1.0.1,3260] (multiple)
Login to [iface: default, target:
iqn.1986-03.com.hp:storage.msa2012i.0919d81b4b.a, portal: 10.0.0.1,3260] successful.
Login to [iface: default, target:
iqn.1986-03.com.hp:storage.msa2012i.0919d81b4b.a, portal: 10.1.0.1,3260] successful.
$ iscsiadm -m node -T iqn.1986-03.com.hp:storage.msa2012i.0919d81b4b.b --login
Logging in to [iface: default, target:
iqn.1986-03.com.hp:storage.msa2012i.0919d81b4b.b, portal: 10.0.0.2,3260] (multiple)
Logging in to [iface: default, target:
iqn.1986-03.com.hp:storage.msa2012i.0919d81b4b.b, portal: 10.1.0.2,3260] (multiple)
Login to [iface: default, target:
iqn.1986-03.com.hp:storage.msa2012i.0919d81b4b.b, portal: 10.0.0.2,3260] successful.
Login to [iface: default, target:
iqn.1986-03.com.hp:storage.msa2012i.0919d81b4b.b, portal: 10.1.0.2,3260] successful.
Chaque nouveau disque iscsi devrait être listé en tant que /dev/sd[a-z] ou encore /dev/mapper. Exécuter « fdisk -l » ou « lsblk » pour les afficher. Dans un environnement SAN à 2 contrôleurs, Chaque partition est affichée comme 2 disques séparés. Lire la section Multipath pour configurer la partition physique. Si le SAN est équippé d’un seul contrôleur, vous pouvez travailler directement avec vos /dev/sd[a-z] (pas recommandé évidemment!).
Multipath
Installer les outils multipath:
redhat $ yum install device-mapper-multipath
debian $ apt-get install multipath-tools
Selon les recommandations du site HP, j’ai configuré /etc/multipath.conf comme ceci. Vous devez consulter le site web de votre fournisseur pour la configuration spécifique de votre matériel.
blacklist {
devnode "^(ram|raw|loop|fd|md|dm-|sr|scd|st)[0-9]*"
}
defaults {
user_friendly_names yes
}
devices {
device {
vendor "HP"
product "MSA2[02]12fc|MSA2012i"
getuid_callout "/sbin/scsi_id -g -u -s /block/%n"
hardware_handler "0"
path_selector "round-robin 0"
path_grouping_policy multibus
failback immediate
rr_weight uniform
no_path_retry 18
rr_min_io 100
path_checker tur
}
}
Laisser la section device commentée ne semble avoir aucun effet, donc cette configuration devrait fonctionner pour n’importe quel NAS pourvu que le matériel /dev/sd[a-z] ne soit pas blacklisté.
Activer le service multipath:
redhat $ modprobe dm-multipath
toute distrib $ systemctl enable multipathd
toute distrib $ systemctl start multipathd
Multipath device mapper va regrouper les disques avec des wwid (world wide id) identiques automatiquement. Pour afficher la topologie multipath:
$ multipath -ll
mpath1 (3600c0ff000d8239a6b082b4d01000000) dm-17 HP,MSA2012i
[size=9.3G][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=2][active]
\_ 8:0:0:30 sde 8:64 [active][ready]
\_ 9:0:0:30 sdf 8:80 [active][ready]
mpath0 (3600c0ff000d8239a1846274d01000000) dm-15 HP,MSA2012i
[size=1.9G][features=1 queue_if_no_path][hwhandler=0][rw]
\_ round-robin 0 [prio=2][active]
\_ 9:0:0:29 sdb 8:16 [active][ready]
\_ 8:0:0:29 sdd 8:48 [active][ready]
Si rien ne s’affiche, exécuter multipath -v3 pour debugguer. Il est probable que les disques sont blacklistés.
Partitionnement LVM
Les partitions résultantes à utiliser sont les /dev/mapper/mpath[0-9] dans mon cas.
J’initialise les disques avec LVM pour des facilités d’utilisation: LVM permet de changer la taille des partitions à chaud, étendre une partition sur un autre disque, faire des snapshots, etc… LVM est un must, si vous ne l’utilisez pas, commencez de suite!
$ pvcreate /dev/mapper/mpath0
$ vgcreate myVolumeGroup /dev/mapper/mpath0
$ lvcreate -n myVolume -L10G /dev/myVolumeGroup
$ mkfs.ext4 /dev/myVolumeGroup/myVolume
Operations sur les LUNs
Ajouter un LUN
Une fois qu’un LUN a été créé sur le SAN, le serveur ne détectera le disque qu’après rafraichissement
$ iscsiadm -m node --rescan
Les disques iSCSI maintenant visibles, multipath créera la nouvelle partition automatiquement.
Suppression d’un LUN
Après avoir démonté les systèmes de fichiers relatif au disque, supprimer les LUNs sur le SAN et exécuter « multipath -f mpath? » pour le matériel en question
Agrandir un volume
LVM est remarquable puisque l’on peut retailler un volume physique plutôt que d’en recréer un à chaque fois et de l’ajouter à un volume group. Ainsi, on garde une configuration claire sur le serveur et le SAN.
Rafraichir la taille des disques
$ iscsiadm -m node --rescan
Vérifier avec fdisk -l que la taille du disque correspond à la taille sur le SAN
$ /etc/init.d/multipathd reload
Vérifier avec multipath -ll que la taille de la partition a bien augmenté
$ pvresize /dev/mapper/mpath0
Le nouvel espace disque devrait être disponible. Vous pouvez agrandir le volume avec lvresize, -r pour étendre le système de fichiers également.
Répartition de charge et bascule
Sous cette configuration, le trafic est réparti sur les 2 NICs. Si une interface tombe, tout le trafic transite via le 2nd lien.
J’ai lancé la copie d’un très gros fichier sur les disques iscsi et arrêté l’une des interfaces. La charge CPU est montée très vite puis redescendue dès que le timeout de la bascule a expiré. La copie en cours a alors repris sur le 2nd lien. Sachant cela, paramétrer la valeur du timeout aussi basse que possible, ex 5 sec.
Perfecto !
Un grand merci à dave.
PS: pas super lisible votre système de captcha ;)
Pour compléter la partie « Répartition de charge et bascule » voilà un petit test que j’ai fait chez moi qui illustre bien cette partie
Test avancé du multipath
1 . Test de répartition
Test pour voir si le trafic est bien répartit entre les 2 interfaces (50/50)
// Création d’un fichier « vide » de 1 Go
# dd if=/dev/zero of=fichier1 bs=1M count=1024
Installer l’outil « iftop ».
Ouvrir deux terminals avec les commandes « iftop -i eth0 » et « iftop -i eth1 »
Le test consiste à copier le fichier de 1 Go sur la baie (via le point de montage :
/data) et de vérifier avec « iftop » la répartition entre les deux interfaces.
// Utilisation de « time » pour connaitre le temps de transfert
~# time cp fichier1 /data
2 . Test de tolérance de panne
On effectue le même test, et on crée une « panne » en désactivant une interface
( # rm /data/fichier1 )
# cp fichier1 /data
// Désactivation de « eth0 » pendant le transfert
# ifdow eth0
Le transfert n’est pas interrompu, pas de perte de connexion du disque.
Les commandes « iftop » indique une répartition différente.
Vérification de l’état du multipathing :
# multipath -ll
// Il n’y a qu’un chemin pour accéder au disque
Réactivation de la carte :
# ifdup eth0
Vérification de l’état du multipathing :
# multipath -ll
// Les deux chemins d’accès au disque sont à nouveau actif