Jan 14 2011

Disques SAN iSCSI, multipath et Partitions LVM sous Linux

Publié par à 3:24 sous Linux,Stockage

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

Connections SAN iSCSI

 
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.


2 responses so far

2 Réponses à “Disques SAN iSCSI, multipath et Partitions LVM sous Linux”

  1. moion 04 Juin 2012 at 6:43

    Perfecto !
    Un grand merci à dave.
    PS: pas super lisible votre système de captcha ;)

  2. autre teston 13 Sep 2013 at 4:54

    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

Comments RSS

Leave a Reply