Jan 14 2011

Disques SAN iSCSI et multipath 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:

# yum install iscsi-initiator-utils

 
Configurer les paramètres de sécurité s’ils ont été appliqués sur le SAN

# vi /etc/iscsi/iscsid.conf
discovery.sendtargets.auth.username = My_ISCSI_USR_NAME
discovery.sendtargets.auth.password = MyPassword

 
Je n’ai pas mis de mot de passe le réseau étant sécurisé avec les vlans ou les switches dédiés. L’authentification ajoute également 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
 
Vous pouvez maintenant démarrer le service iscsi

# /etc/init.d/iscsi start

Le démarrer automatiquement après chaque reboot

# chkconfig iscsi on

 

 
Les cibles peuvent être découvertes grâce à la commande iscsiadm. Je l’ai lancé 2 fois, une fois par contrôleur.

# 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

# 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]. Exécuter « fdisk -l » 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].
 

Multipath

Installer les outils multipath:

# yum install device-mapper-multipath

 
Selon les recommandations du site HP, j’ai configuré /etc/multipath.conf comme ceci:

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:

# modprobe dm-multipath
# /etc/init.d/multipathd start
# chkconfig multipathd on

 
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.
 
Les partitions résultantes à utiliser sont les /dev/mapper/mpath[0-9].
J’initialise les disques avec LVM pour des facilités d’utilisation: je n’ai pas besoin d’utiliser fdisk après avoir agrandi un volume sur le SAN.

# pvcreate /dev/mapper/mpath0
# vgcreate myVolumeGroup /dev/mapper/mpath0
# lvcreate -n myVolume -L10G /dev/myVolumeGroup
# mke2fs -j /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
 

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 et multipath 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