Glusterfs

Fil des billets

01déc. 2011

Système de fichier distribué Glusterfs - volume en striping

gluster_logo

La suite des tests gluster, nous attaquons la mise en place d'un volume en striping.
Les serveurs de fichiers dispose d'une partition de 10Go qui sera exporté.

filer-1 / # df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.9G  1.4G  8.0G  15% /
udev                   10M  116K  9.9M   2% /dev
shm                   249M     0  249M   0% /dev/shm
filer-2 ~ # df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             9.9G  1.4G  8.0G  15% /
udev                   10M  116K  9.9M   2% /dev
shm                   249M     0  249M   0% /dev/shm


Configuration de base :


Il faut dans un premier temps le pool de confiance si ce dernier n'existe pas.
La procédure est décrite dans l'article volume répliqué et distribué


Configuration d'un volume en striping :


Nous allons créer le volume stripé sur 2 serveurs de stockage, le but étant d' aggreger l'espace de stockage (Raid-0).

  • La création du volume est extrêmement simple :
filer-1 ~ # gluster volume create test-volume stripe 2 transport tcp filer-1:/mnt filer-2:/mnt
Creation of volume test-volume has been successful. Please start the volume to access data.
  • On vérifie le volume
filer-2 ~ # gluster volume info
Volume Name: test-volume
Type: Stripe
Status: Created
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: filer-1:/mnt
Brick2: filer-2:/mnt
  • A présent on démarre le volume
filer-2 ~ # gluster volume start test-volume
  • On monte le volume depuis les clients
client-1 ~ # mount -t glusterfs filer-1:7997:/test-volume /glusterfs
client-1 ~ # df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             7.9G  1.6G  6.0G  22% /
udev                   10M  112K  9.9M   2% /dev
shm                   249M     0  249M   0% /dev/shm
filer-1:/test-volume   20G  2.8G   16G  15% /glusterfs

Nous disposons bien d'un volume strippé.

Test divers :

  • Test en ecriture.
client-1 ~ # for i in `seq 0 2`; do dd if=/dev/zero of=/glusterfs/wap$i.img bs=300M count=1; done
client-1 ~ # du -h /glusterfs/*
301M	/glusterfs/wap0.img
301M	/glusterfs/wap1.img
301M	/glusterfs/wap2.img
filer-1 ~ # du -h /mnt/*
151M	/mnt/wap0.img
151M	/mnt/wap1.img
151M	/mnt/wap2.img
filer-2 ~ # du -h /mnt/*        
151M	/mnt/wap0.img
151M	/mnt/wap1.img
151M	/mnt/wap2.img
  • Voyons comment réagi le volume en cas de panne sur l'un des filer.
client-1 ~ # echo 'abcdefghij' > /glusterfs/test
client-1 ~ # ls -l /glusterfs
total 8
-rw-r--r-- 1 root root 11 Nov 12 00:38 test
filer-1 / # ls -l /mnt/
total 8
-rw-r--r-- 1 root root 11 Nov 12 00:38 test
filer-1 / # cat /mnt/test 
abcdefghij
filer-1 / #
filer-2 ~ # ls -l /mnt/
total 4
-rw-r--r-- 1 root root 0 Nov 12 00:38 test
filer-2 ~ # cat /mnt/test 
filer-2 ~ #
  • Simulation de panne sur filer-2

On désactive le filer-2

filer-2 ~ # halt
Broadcast message from root (pts/0) (Sat Nov 12 00:40:50 2011):
The system is going down for system halt NOW!

On écrit sur le point de montage depuis le client

client-1 ~ # rm /glusterfs/test 
rm: cannot remove `/glusterfs/test': Transport endpoint is not connected
client-1 ~ # cat /glusterfs/test 
cat: /glusterfs/test: Transport endpoint is not connected
client-1 ~ # touch /glusterfs/test2
touch: cannot touch `/glusterfs/test2': Input/output error

On réactive filer-2 et on vérifie que tout est ok.

filer-2 ~ # ls -l /mnt/
total 4
-rw-r--r-- 1 root root 0 Nov 12 00:38 test

On écrit sur le point de montage depuis le client

client-1 ~ # touch /glusterfs/test3
client-1 ~ # ls -l /glusterfs
total 12
-rw-r--r-- 1 root root 11 Nov 12 00:38 test
-rw-r--r-- 1 root root  0 Nov 12 00:44 test3
  • Simulation de panne sur filer-1

On eteint filer-1

filer-1 / # halt
Broadcast message from root (pts/0) (Sat Nov 12 00:47:43 2011):
The system is going down for system halt NOW!

On effectue un accès depuis client-1

client-1 ~ # ls -l /glusterfs/
ls: cannot access /glusterfs/: Transport endpoint is not connected


Les fichiers sont stockés à 50% sur chacun des filers et les en cas de panne les conséquences sont catastrophique.
Le benchmark devrait être intéressant :)

11nov. 2011

Système de fichier distribué Glusterfs - Benchmark replication distribuée

gluster_logo

Après la publication de la réplication distribuée, voici les premiers benchmarks.

Le protocole de test est le suivant :

  • Serveurs : Intel Core2 Quad Q9550 - 512Mo de RAM
  • Outil : fileop
  • Pas d'optimisation particulère
  • Création d'une arborescence de fichier de 4K (création de 20 répertoires contenant 20 répertoires contenant un fichier de 4K)
  • Création d'une arborescence de fichier de 40M (création de 6 répertoires contenant 6 répertoires contenant un fichier de 40M)
  • Comparatif : Écriture en local, via gluster puis NFS


1) Génération de l'arborescence 4K:

Test en local :

client-1 ~ # time ./fileop -d /glusterfs_local/ -f 20 -s 4k -e
 .       mkdir   chdir   rmdir  create    open    read   write   close    stat  access   chmod readdir  link    unlink  delete  Total_files
A   20   23960  381779   98668   16779  442536   63848   63694  389805  555721  490175  369310   70380  178352  241133   94628       8000 
 
real    0m54.757s
user    0m0.203s
sys     0m0.520s

Test via le protocole NFS :

client-1 ~ # mount | grep /glusterfs_nfs
78.41.XXX.XXX:/nfs on /glusterfs_nfs type nfs (rw,noatime,addr=78.41.XXX.XXX)
client-1 ~ # time ./fileop -d /glusterfs_nfs/ -f 20 -s 4k -e
 .       mkdir   chdir   rmdir  create    open    read   write   close    stat  access   chmod readdir  link    unlink  delete  Total_files
A   20     190   25031     273     154    6418   62354  163237  266426   12863  394146    4618    6265    1347     313     302       8000 
 
real	4m33.915s
user	0m0.030s
sys	0m0.080s

Test via le protocole Gluster :

client-1 ~ # mount | grep '/glusterfs'
filer-1:/test-volume on /glusterfs type fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)
client-1 ~ # time ./fileop -d /glusterfs/ -f 20 -s 4k -e
 .       mkdir   chdir   rmdir  create    open    read   write   close    stat  access   chmod readdir  link    unlink  delete  Total_files
A   20    1362    3371    2398     835    2462    3411   16958    6960    2785    4124    1545    2840     945    1232    1188       8000 
 
real	1m59.461s
user	0m0.023s
sys	0m0.523s



2) Génération de l'arborescence 40M :

Test local :

client-1 ~ # time ./fileop -d /mnt/ -f 6 -s 40M -e
 .       mkdir   chdir   rmdir  create    open    read   write   close    stat  access   chmod readdir  link    unlink  delete  Total_files
A    6   71305  403178  105082   15906  113915       1      14  104410  520373  510405  367981  169848  202678  295200     875        216 
 
real	7m44.478s
user	0m27.758s
sys	0m15.576s

Test via le protocole NFS :

client-1 ~ # mount | grep /glusterfs_nfs
78.41.XXX.XXX:/nfs on /glusterfs_nfs type nfs (rw,noatime,addr=78.41.XXX.XXX)
client-1 ~ # time ./fileop -d /glusterfs_nfs/ -f 6 -s 40M -e
 .       mkdir   chdir   rmdir  create    open    read   write   close    stat  access   chmod readdir  link    unlink  delete  Total_files
A    6     306  153298     642      45    3070       1      26   90751   11435   13304    2221    8485    5251    3831     639        216 
 
real	7m23.497s
user	0m28.012s
sys	0m16.809s

Test via le protocole Gluster :

client-1 ~ # mount | grep '/glusterfs'
filer-1:/test-volume on /glusterfs type fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)
client-1 ~ # time ./fileop -d /glusterfs -f 6 -s 40M -e
 .       mkdir   chdir   rmdir  create    open    read   write   close    stat  access   chmod readdir  link    unlink  delete  Total_files
 
A    6    1528  357139    2713      26     806       1       2    2558    4536    3942    2533    4365    1259    1870     424        216 
 
real	17m1.170s
user	0m27.895s
sys	0m8.719s

29juin 2011

Système de fichier distribué Glusterfs - volume répliqué et distribué

gluster_logo

Après quelques temps d'absence je reprend les différents tests gluster, nous attaquons par la mise en place d'un volume répliqué distribué. Je passerais volontairement la mise en place du volume répliqué simple car ne présentant aucun intérêt pour mes besoins.

Configuration de base :


Nous allons créer dans un premier temps le pool de confiance. Lorsque vous démarrez le premier serveur, le pool de confiance se compose de ce serveur seul, il vous suffira alors d'ajouter depuis ce serveur le 2nd serveur de stockage puis depuis des serveurs déjà présent dans le pool d'ajouter les serveurs suivants afin de les autoriser à interagir entre eux.

filer-1 ~ # gluster peer probe filer-2
Probe successful
filer-2 ~ # gluster peer probe filer-1
Probe successful


Configuration d'un volume répliqué et distribué :


Nous allons commencer par le plus simple à savoir un volume répliqué et distribué sur 2 serveurs de stockage, le but étant d'avoir du master/master (Raid-1).

  • La création du volume est extrêmement simple :
filer-2 ~ # gluster volume create test-volume replica 2 transport tcp filer-1:/mnt filer-2:/mnt
Creation of volume test-volume has been successful. Please start the volume to access data.
  • On vérifie le volume
filer-2 ~ # gluster volume info
Volume Name: test-volume
Type: Replicate
Status: Created
Number of Bricks: 2
Transport-type: tcp
Bricks:
Brick1: filer-1:/mnt
Brick2: filer-2:/mnt
  • A présent on démarre le volume
filer-2 ~ # gluster volume start test-volume
  • On monte le volume depuis les clients
client-1 ~ # mount -t glusterfs filer-1:7997:/test-volume /glusterfs
client-1 ~ # df -h
Filesystem            Size  Used Avail Use% Mounted on
/dev/sda1             7.9G  1.3G  6.3G  17% /
udev                   10M  112K  9.9M   2% /dev
shm                   249M     0  249M   0% /dev/shm
filer-1:/test-volume  9.9G  1.4G  8.1G  15% /glusterfs

Test divers :

  • On vérifie que le volume est bien redondant
client-1 ~ # touch /glusterfs/test
client-1 ~ # ls -l  /glusterfs/
total 0
-rw-r--r-- 1 root root 0 Mar  8 20:39 test
filer-1 ~ # ls -l /mnt/
total 0
-rw-r--r-- 1 root root 0 Mar  8 20:39 test
filer-2 ~ # ls -l /mnt/
total 0
-rw-r--r-- 1 root root 0 Mar  8 20:39 test
  • Simulation de panne sur filer-2

On désactive le filer-2

filer-2 ~ # halt
Broadcast message from root (pts/0) (Tue Mar  8 20:57:52 2011):
The system is going down for system halt NOW!

On écrit sur le point de montage depuis le client

client-1 ~ # rm /glusterfs/test 
client-1 ~ # touch /glusterfs/test_2
client-1 ~ # ls -l /glusterfs/
total 4
-rw-r--r-- 1 root root 0 Mar  8 22:43 test_2

On verifie que tout est ok sur le filer-1

filer-1 ~ # ls /mnt/ -l
total 4
-rw-r--r-- 1 root root 0 Mar  8 22:43 test_2

On réactive filer-2 et on vérifie que tout est ok, malheureusement, tant qu'aucun accès n'aura été fait depuis le client, la reconstruction du volume ne sera pas effectué.

filer-2 ~ # ls -l /mnt/
total 0

On effectue un accès depuis le client via un simple ls et on revérifie.

filer-2 ~ # ls /mnt/ -l
total 4
-rw-r--r-- 1 root root 0 Mar  8 22:43 test_2
  • Simulation de panne sur filer-1

On eteint filer-1

On écrit sur le point de montage depuis le client

client-1 ~ # rm /glusterfs/test_2
client-1 ~ # touch /glusterfs/test_3
client-1 ~ # ls -l /glusterfs/
total 4
-rw-r--r-- 1 root root 0 Mar  9 22:17 test_3

On effectue un accès depuis client-1 et on vérifie filer-1

filer-1 ~ # ls -l /glusterfs/
total 4
-rw-r--r-- 1 root root 0 Mar  9 22:17 test_3


On constate que le fait de monter filer-1 ne pose aucun problème en cas de panne de ce dernier, il serait donc plus juste de dire que nous avons monté le pool de confiance. :)

La prochaine étape un benchmark des performances ...

14avr. 2011

Système de fichier distribué Glusterfs - accès client

gluster_logo

Nous continuons notre série d'article Gluster en abordant les différentes possibilités d'accès client. Exceptionnellement, aucun article supplémentaire sur Gluster n'est à prévoir pour le mois à venir.

Nous disposons de 2 possibilités pour accéder au système de fichier :

  • Gluster Native Client :

gluster_client

Cette méthode est la plus recommandée, son utilisation permet des accès parallèles, le standard POSIX est alors utilisé. Il offre également les meilleures performances.

  • Utilisation d'un protocole NFS ou CIFS :

gluster_other

1. Le client effectue la demande d'accès à un serveur jouant le rôle de répartiteur.
2. Le répartiteur va alors interroger l'un des noeud (nous l'appellerons noeud master dans l'exemple) du cluster.
3. Si l'information n'est pas contenu dans le noeud master, ce dernier va interroger le noeud disposant de la bonne information.
4. L'information est alors transmise au noeud master.
5. Le noeud master va alors transmettre l'information directement au client, attention si l'information est fragmenté sur plusieurs noeuds, le noeud master transmettra chaque bride d'informations au client qui s'occupera de les réagréger.

06avr. 2011

Système de fichier distribué Glusterfs - Base

gluster_logo

Suite à mon article précédent, nous allons débuter par l'installation de Gluster sur Gentoo.

Pré-requis kernel :

File systems  --->
[*] FUSE (Filesystem in Userspace) support

Préparation :


  • On s'assure que tout les /etc/hosts soient renseignés.


  • On s'assure qu'aucune perte réseau n'existe entre chaque noeud et entre chaque client et noeud.
filer-2 ~ # ping -c 10000 -f filer-1 2>&1 | grep '% packet loss'
10000 packets transmitted, 10000 received, 0% packet loss, time 869ms


Installation :


  • On installe glusterfs sur tout les noeuds et sur les clients.
filer-2 ~ # USE="extras fuse" emerge -av glusterfs
Calculating dependencies... done!
[ebuild  N    ] sys-fs/fuse-2.8.5  492 kB
[ebuild  N    ] sys-cluster/glusterfs-3.1.1  USE="extras fuse -emacs (-infiniband) -static-libs -vim-syntax" 2,024 kB
  • On lance glusterfs sur les différents noeuds et on l'ajoute au rc.
filer-2 ~ # /etc/init.d/glusterd start
filer-2 ~ # rc-update -a glusterd default

Voila pour cette partie qui était la plus facile, les articles suivants seront plus intéressant et aborderons les différentes configurations possible.

30mars 2011

Système de fichier distribué Glusterfs

gluster_logo

Je vais débuter une série d'article qui seront publiées chaque semaine sur la mise en place de Gluster.

Gluster est un logiciel libre de système de fichiers distribué en parallèle (scale-out), capable de monter jusqu'à plusieurs pétaoctets et de gérer plusieurs milliers de clients.

Gluster est un système de fichiers de cluster/réseaux. Gluster est livré avec deux éléments, un serveur et un client.

Le serveur de stockage (ou chaque serveur d'un cluster) fait tourner glusterfsd et les clients utilisent la commande mount ou glusterfs client pour monter les systèmes de fichiers servis, en utilisant FUSE. Les Serveurs sont déployés comme des briques de stockage, chaque serveur exécutant un daemon glusterfsd qui exporte un système de fichier local comme un «volume».
Le processus client glusterfs, se connecte aux serveurs avec un protocole spécifique (implémenté au-dessus de TCP/IP, InfiniBand ou SDP) et regroupe les volumes distants en un unique volume.

gluster

* Évolutivité et performance :


L'architecture scale-out permet d'agréger des ressources en fonction des besoins de capacité et de performance sans interruption. Gluster permet également un rééquilibrer de la charge après ajout ou suppression des serveurs de données. La fonction Gluster Elastic Hash supprime la nécessité d'un serveur de métadonnées et élimine donc un goulot d'étranglement au travers d'une réelle parallélisation des accès aux données. (équilibrage de charge)

* Haute Disponibilité :


Les serveurs peuvent être géré en miroir de type RAID-1. Après une panne matérielle, glusterfs reconstruira automatiquement en tache de fond le volume défaillant. Glusterfs n'utilise pas un format propriétaire pour stocker des fichiers sur le disque des serveurs de données.

* Gluster Elastic Hash :


Plutôt que d'utiliser un serveur de métadonnées, Glusterfs utilise un algorithme de hachage afin de localiser les données dans le pool de stockage. Tous les systèmes de stockage du pool ont donc la possibilité de connaître précisément l'emplacement de n'importe quelle données sans avoir besoin d'interroger un autre serveur du pool.

* Gluster Manager Console :


Gluster offre une interface web (Python, Ruby, PHP) avancée afin de permettre la gestion et l'automatisation des différents serveurs de données.