Info16.fr

Le blog de B@rtounet

#Gnu/Linux

Mise en place du protocole iscsi (Target Linux/OpenSuse-10.3, Initiator Windows XP Sp2)

27 juillet 2011 Rédigé par bartounet

Sous le vocable iSCSI (à prononcer i-skeuzi, i-skozi, aïe-skeuzi ou aïe-skozi selon que vous adoptez une prononciation française ou anglophone), se cache un protocole réseau qui encapsule le protocole SCSI dans des paquets TCP. TCP/IP est alors utilisé comme protocole de transport ce qui permet à une machine d’accéder à des périphériques distants connectés à l’infrastructure réseau existante. Le protocole iSCSI (voir RFCA) utilise l’architecture client/serveur, mais possède sa propre terminologie : le client est appelé « initiator » le serveur est appelé « target » Je vais essayer dans ce billet de monter une petite Archi entre une Target Linux et un initiator Windows Xp L’initiator peut être une carte Ethernet spécialisée, munie d’un composant supplémentaire qui va gérer le protocole iSCSI. Cette carte sera appelée un « iSCSI-HBA ». Mais, on peut aussi déployer une solution logicielle pure qui nécessite seulement un driver spécifique dont le rôle sera de traduire les ordres SCSI en paquets réseau. C’est cette solution que nous allons mettre en œuvre dans cet article. La target (cible) est normalement un périphérique de stockage doté d’une interface iSCSI. Qu’est-ce-qu’une interface iSCSI ? Eh bien en fait, les constructeurs proposent, outre la connectivité Fibre Channel, un ou plusieurs ports Ethernet avec support au niveau de l’OS et éventuellement des cartes réseau, du protocole iSCSI. Mais pour ceux qui ne disposent pas d’un tel matériel, nous verrons comme émuler une target avec Linux ! Initiator et target sont considérés comme les nœuds d’un réseau iSCSI. Le driver iSCSI transporte les commandes SCSI sur le réseau plutôt que d’utiliser un bus SCSI directement connecté ou bien une connexion en FC. ISCSI Mon protocole de test: Serveur 1: La target iscsi (opensuse 10.3) AMD Athlon(tm) 64 X2 Dual Core Processor 5000+ Black Edition (2600Mhz) 2Go ddr2 Crucial Balistic (4-4-4-12) Carte Mère Asus M3A 1 HDD SAMSUNG HD160JJ pour le systeme 2 HDD Western digital WDC WD1600YS (raid edition) en Raid 0 ----> pour stockage LVM Lan intégré à la carte Mère chipset Atlansic Gigabit Serveur 2: L'initiator Intel Q6600 Quad Core (2400Mhz) 2Go ddr2 Crucial Balistic Carte mère P5WDH Deluxe 2 HDD hitachi 7200Tpm 250Go T7K500 en Raid0 matériel Lan Marvell Yukon 88E8053 PCI-E Gigabit Ethernet Controller Bref, c'etait juste pour être précis sur le protocole de test.... Lorsque l’initiator souhaite établir une session TCP avec la target, il a besoin de connaître le port TCP de la target. L’association (adresse IP, port TCP) est appelé un « portal ». Il y a donc un portal sur l’initiator et la target. Le port par défaut sur la target est le 3260. Notons qu’un initiator peut établir plusieurs connexions TCP avec la même cible. L’ensemble de ces connexions définit une « session iSCSI ». Pour l'installation j'ai été cherché les sources de l'application iscsi-target qui au moment ou j'écris ces lignes est en version 0.4.16 [http://sourceforge.net/project/showfiles.php?group_id=108475&package_id=117141&release_id=585138|http://sourceforge.net/project/showfiles.php?group_id=108475&package_id=117141&release_id=585138|fr] Après avoir téléchargé iscsi target on l'extrait
xenserver:~ # tar xvfz iscsitarget-0.4.16 xenserver:~ # cd iscsitarget-0.4.16/
Il va maintenant falloir compiler et installer le logiciel... Il y a tout de même des prérequis: La target doit avoir un kernel linux au minimum 2.6.16 On doit disposer d'un compilateur gcc, des entetes de notre noyeau et des fichiers d’en-têtes de la bibliothèque OpenSSL. Après ces petites verification on compile et on installe:
xenserver:~/iscsitarget-0.4.16 # make xenserver:~/iscsitarget-0.4.16 # make install
On a donc maintenant: # iscsi_trgt.ko : un module noyau qui émule une cible iSCSI et implémente le protocole ; # un démon ietd (IET = iSCSI Enterprise Target) ; # une commande de contrôle ietadm ; # quelques fichiers de configuration On peut tout de suite crée une target iscsi... Pour cela rien de plus simple: Il faut savoir que les adresses iscsi peut vent avoir 2 formes: Les adresses iSCSI peuvent avoir deux formats (voir [RFCB]) : * Le format iqn (iSCSI Qualified Name) : c’est une chaîne préfixée par « iqn. » et suivie d’une date (au format AAAA-MM), du nom de l’autorité qui a attribué le nom (c’est le nom de domaine à l’envers), puis une chaîne unique qui identifie le nœud. Par exemple : iqn.2007-07.org.zereso:serveur1:123456789ABCDEF.12345. * Le format eui (Enterprise Unique Identifier) : c’est une chaîne préfixée par « eui. » et suivie de 16 chiffres hexadécimaux. Par exemple : eui.00803A4B887A8D05. On va donc aller éditer le fichier ietd.conf
xenserver:~/iscsitarget-0.4.16 # vi /etc/ietd.conf
# iqn.yyyy-mm.[:identifier] # # "yyyy-mm" is the date at which the domain is valid and the identifier # is freely selectable. For further details please check the iSCSI spec. Target iqn.2008-04.lan.appart:storage.disk # Users, who can access this target. The same rules as for discovery # users apply here. # Leave them alone if you don't want to use authentication. #IncomingUser joe secret #OutgoingUser jim 12charpasswd # Logical Unit definition # You must define one logical unit at least. # Block devices, regular files, LVM, and RAID can be offered # to the initiators as a block device. Lun 0 Path=/dev/vg0/luniscsi,Type=blockio # Alias name for this target # Alias Test # various iSCSI parameters # (not all are used right now, see also iSCSI spec for details) #MaxConnections 1 #InitialR2T Yes #ImmediateData No #MaxRecvDataSegmentLength 8192 #MaxXmitDataSegmentLength 8192 #MaxBurstLength 262144 #FirstBurstLength 65536 #DefaultTime2Wait 2 #DefaultTime2Retain 20 #MaxOutstandingR2T 8 #DataPDUInOrder Yes #DataSequenceInOrder Yes #ErrorRecoveryLevel 0 #HeaderDigest CRC32C,None #DataDigest CRC32C,None # various target parameters #Wthreads 8
Le fichier parle de lui même j'ai déclaré une cible qui est Target iqn.2008-04.lan.appart:storage.disk et un périhpérique cible en mode bloc appelé une LUN qui est /dev/vg0/luniscsi,Type=blockio Avant de démarrer le demon iscsi-target, je vais quand même créer mon disque puisqu'il n'existe pas encore ;-) Pour cela j'utilise l'excellent systèmes LVM2 Le système de LVM insère des sous-couches entre la partition de disque et votre système de fichier (là où sont vos données). Ces sous-couches vont vous permettre de modifier dynamiquement la taille des systèmes de fichier, sans mettre en péril vos données. Ainsi vous pourrez ajouter, enlever de l'espace disque d'un filesystem à la volée, rajouter un système de fichier... sans modification de la table des partitions. crééons notre disque:
xenserver:~/iscsitarget-0.4.16 # lvcreate -L5G -nluniscsi vg0 Logical volume "luniscsi" created
(il faut bien sur avoir préalabement configurer son système disque pour fonctionner avec le systeme lvm2 et creee les volume groups) J'ai donc un volume logique de 5G qui n'est autre que ma LUN qui va pouvoir être exportée sur le réseau vers l'initiator. démarrons alors le demon target iscsi
xenserver:~/iscsitarget-0.4.16 # /etc/init.d/iscsi-target start
à partir de là on va pouvoir aller s'occuper de l'initiator... Mais comme on est sérieux on va aller quand même vérifier que nos cilbe sont biens exportées pour cela on va directement regarder dans:
xenserver:~/iscsitarget-0.4.16 # cat /proc/net/iet/volume tid:1 name:iqn.2008-04.lan.appart:storage.disk lun:0 state:0 iotype:blockio iomode:wt path:/dev/vg0/luniscsi
Ouf on retrouve bien notre target associé à notre lun... Maintenant passons sous Windows... Je mettrais à jour plus tard ce post, pour monter aussi l'initiator sous Gnu/Linux, mais ce n'est pour l'instant pas ma priorité, puisque pour ma part j'utilise que des clients Windows, qui se connectent sur du serveur Gnu/Linux... Sous Windows Xp Sp2 l'initiator isci n'est pas installé par défaut, j'ai installé pour ma part Initiator-2.06 [http://www.microsoft.com/Downloads/details.aspx?familyid=12CB3C1A-15D6-4585-B385-BEFD1319F825&displaylang=en|http://www.microsoft.com/Downloads/details.aspx?familyid=12CB3C1A-15D6-4585-B385-BEFD1319F825&displaylang=en|fr] Uns fois installé on lance l'initiateur iscsi. On ajoute l'ip de notre target iscsi1 iscsi2 On va voir dans le gestionnaire des disques Et miracle notre lun est apparu comme un disque à part entière iscsi3 Après une creation de partition et un formatage en ntfs iscsi4 Notre LUN iscsi est bien monté sur notre initiator... On peut maintenant l'utiliser comme les autres disques... Pour finir mon test, j'ai voulu quand même vérifier le débit de cette lun. Comme nous l'avons vu plus haut, la lun est basé sur un logical volume crée sur mon raid0 (raid0 logiciel Linux) de deux disques Western Digital WD1600YS Pour savoir quelles sont les performances de départ, voici un petit dd sur le raid en question
xenserver:~ # dd if=/dev/md0 of=/dev/zero bs=16M 125+0 records in 124+0 records out 2080374784 bytes (2.1 GB) copied, 19.9423 s, 104 MB/s
C'est un raid0 sur deux disques qui vont chacun à 63Mo/s en vitesse séquentielle... Cela dépend des tests, en raid0 la vitesse varie entre 100 et 126Mo/s Faisons le test de vitesse sur la lun sous Windows... speed On peut voir qu'on monte à environ 60Mo/s sur la Lun, ce qui n'est pas mal mais qui pourrait etre mieux... En effet le lien réseau entre les deux n'est pas limité... La preuve avec iperf entre l'initiator et la target
C:\>iperf.exe -w512k -c192.168.1.115 ------------------------------------------------------------ Client connecting to 192.168.1.115, TCP port 5001 TCP window size: 512 KByte ------------------------------------------------------------ [1916] local 192.168.1.100 port 2500 connected with 192.168.1.115 port 5001 [ ID] Interval Transfer Bandwidth [1916] 0.0-10.3 sec 1.10 GBytes 922 Mbits/sec
On pourrait tunner notre pile tcp/ip pour atteindre de bien meilleurs résultats, notemment en activant les jumbo Frames (Paquets géants) mais la carte nic intégré à l'asus M3A ne semble pas le supporter... Elle ne supporte pas non plus le TCP Checksum offloader (toe)... les réglages sont donc assez restreints....

Information sur bartounet auteur de l'article

Les commentaires sont fermés.