Info16.fr

Le blog de B@rtounet

#Gnu/Linux

Expérimentation de NBD (Network Block device), ou comment exporter un périphérique type bloc par le réseau

27 juillet 2011 Rédigé par bartounet

Il y a quelque temps, j'ai fait un petit article sur le protocole isci et l'export de périphérique bloc via ce protocole... J'ai toutefois découvert il y a peu de temps une facon encore plus simple d'exporter un Block device par le réseau : NBD ou network block device

Je vous laisse installer le nbd-server et le nbd-client sur votre distribution préférée... Pour ma part j'ai fait les tests sur une OpenSuse 11 pour le serveur et une Ubuntu Hardy pour le client... Que se soit avec yast ou a coup d'apt-get vous installerez facilement les paquets nbd.

Bref...

Si vous avez lu mon blog en entier, vous savez comment mettre en place LVM2, dont je me suis servi pour faire mes test, c'est tellement pratique de disposer d'un périphérique block avec une simple commande...

Sur le Serveur: Commencons par créer un block device avec LVM2

xenserver:~ # lvcreate -L1G -ndisk vg0 Logical volume "disk" created

Exportons le directement via nbd

xenserver:~ # nbd-server 3000 /dev/vg0/disk

La commande est simple, on demande à nbd-server d'exporter le block-device /dev/vg0/disk via le port 3000

Nous pouvons vérifier que nbd-server écoute bien sur le port 3000 et n'attend plus que la connexion de son client

xenserver:~ # netstat -anp | grep 3000 tcp 0 0 0.0.0.0:3000 0.0.0.0:* LISTEN 16358/nbd-server

Passons maintenant au client: Sur Ubuntu j'ai dut installer lvm2, (noter que lvm2 n'est pas du tout indispensable, c'est juste que je le trouve très souple à utiliser pour mes tests, mais rien ne vous empêche de créer des periphérique via losetup et les periphérique /dev/loop) Il a fallut bien sur installer nbd-client et dans la foulée j'ai installé mdadm pour gerer le raid...

Bref, commencons par se connecter au serveur et importons notre block device...

root@bartounet:/media# nbd-client 192.168.1.115 3000 /dev/nbd2 Negotiation: ..size = 1048576KB bs=1024, sz=1048576

Ici on se connecte sur le port 3000 du serveur et on importe le nbd en local sur /deb/nbd2

Voila le tour est joué notre device /dev/nbd2 est vu comme un simple device local de notre systeme, mais est en réalité exporté par le réseau...

Comme j'aime faire quelques petits tests, nous allons pas nous arreter là, je vais tester la vitesse de ce block-device.

Pour cela rien de plus simple, un petit dd va nous permettre de voir la vitesse...

root@bartounet:/media# dd if=/dev/nbd2 of=/dev/zero bs=1M 1024+0 records in 1024+0 records out 1073741824 bytes (1,1 GB) copied, 13,3121 s, 80,7 MB/s

C'est pas mal, je sature presque mon lien réseau, puisque mes deux postes sont réliés via un réseau gigabits donc en théorie pouvant atteindre les 120Mo/s Ceci est un test en lecture sur /dev/nbd2

Pour nous en convaincre un petit iperf entre les deux machines:

root@bartounet:/media# iperf -cxenserver ------------------------------------------------------------ Client connecting to xenserver, TCP port 5001 TCP window size: 16.0 KByte (default) ------------------------------------------------------------ [ 3] local 192.168.1.100 port 35157 connected with 192.168.1.115 port 5001 [ 3] 0.0-10.0 sec 1.09 GBytes 936 Mbits/sec

En effet on a bien un lien gigabit entre les deux.. ;-)

Pour être transparent je souhaite donner les performances disques disponibles pour les deux machines:

Les configs:

Xenserver: AMD Athlon 64 X2 5000+ Black edition à 2600Mhz 2Go DDR2 2 disques sata WDC WD1600YS (raid edition 160Go) en RAID0 logiciel

xenserver:~ # dd if=/dev/md0 of=/dev/zero bs=2M 1260388352 bytes (1.3 GB) copied, 10.4169 s, 121 MB/s

Bartounet: Intel Quad Core Q6600 G0 à 2400Mhz 2Go DDR2 2 disques sata Hitachi T7K500 250Go Raid0 matériel (puce raid Asus P5WDh deluxe)

root@bartounet:/media# dd if=/dev/sda of=/dev/zero bs=2M 616562688 bytes (617 MB) copied, 4,90903 s, 126 MB/s

Pour finir je me suis dit mais pourquoi pas faire un raid entre un block-device local sur BARTOUNET et un block-device nbd.

Pour cela je crée un block-device local sur bartounet toujours à l'aide de lvm2

root@bartounet:/media# lvcreate -L1G -nraid vgxen Logical volume "raid" created

Maintenant nous pouvons creer le périphérique raid avec mdadm

root@bartounet:/media# modprobe raid0 root@bartounet:/media# mdadm --create /dev/md1 --level=0 --raid-device=2 /dev/vgxen/raid /dev/nbd2 mdadm: array /dev/md1 started.

Notre raid est bien monté

root@bartounet:/media# mdadm --detail /dev/md1 /dev/md1: Version : 00.90.03 Creation Time : Sun Jun 22 19:36:35 2008 Raid Level : raid0 Array Size : 2097024 (2048.22 MiB 2147.35 MB) Raid Devices : 2 Total Devices : 2 Preferred Minor : 1 Persistence : Superblock is persistent Update Time : Sun Jun 22 19:36:35 2008 State : clean Active Devices : 2 Working Devices : 2 Failed Devices : 0 Spare Devices : 0 Chunk Size : 64K UUID : 6b2edcd4:b994fefd:20bc8809:0761db64 (local to host bartounet) Events : 0.1 Number Major Minor RaidDevice State 0 254 1 0 active sync /dev/vgxen/raid 1 43 2 1 active sync /dev/nbd2

testons tout de suite la vitesse en lecture sur ce raid0 qui je vous rappelle est un raid0 entre un periphérique local /dev/vgxen/raid et un network block device /dev/nbd2 (exporté de Xenserver)

root@bartounet:/media# dd if=/dev/md1 of=/dev/zero 4194048+0 records in 4194048+0 records out 2147352576 bytes (2,1 GB) copied, 12,8236 s, 167 MB/s

Et voila on obtient un périphérique exploitant la vitesse des deux block device ( un local et un réseau) Marrant non ?

Bon la je me suis attaché aux performances mais rien ne vous empeche de faire du mode sécurisé en raid1 ou plus...

Information sur bartounet auteur de l'article

Les commentaires sont fermés.