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.