Un petit chapitre consacré aux 'Striped Volumes'.

Nous disposons de 4 serveurs gluster. Dans le mode 'striped volume', nous devons créer un nombre de srtipe égal aux nombres de briques du gluster (a savoir 4 dans notre cas)

Création du volume :

gluster volume create striped-volume stripe 4 \
server-01:/home/glusterfs-SV \
server-02:/home/glusterfs-SV \
server-03:/home/glusterfs-SV \
server-04:/home/glusterfs-SV

Creation of volume striped-volume has been successful. Please start the volume to access data.

Status du volume :

# gluster volume info
Volume Name: striped-volume
Type: Stripe
Status: Created
Number of Bricks: 4
Transport-type: tcp
Bricks:
Brick1: server-01:/home/glusterfs-SV
Brick2: server-02:/home/glusterfs-SV
Brick3: server-03:/home/glusterfs-SV
Brick4: server-04:/home/glusterfs-SV

On lance le volume

# gluster volume start striped-volume
Starting volume striped-volume has been successful

On monte le volume :

mount -t glusterfs server-01:/striped-volume /mnt/gluster-SV/

Un test rapide :

for i in `seq 1 20`;do dd if=/dev/zero of=/mnt/gluster-SV/test$i bs=1M count=10; done

Alors la petite surprise, un "ls" sur chaque brique du gluster montre des fichiers de 10M sur chaque noeud. Apparemment cela viens du comportement du "ls" qui ne se base pas sur la taille du fichier mais de l offset du dernier bytes. En utilisant 'du', la par contre on a bien le comportement désiré : a savoir le fichier découpé sur toutes les briques du gluster. C'est d'ailleurs indiqué dans la FAQ

server-03:~# du -h /home/glusterfs-SV/*
2.6M	/home/glusterfs-SV/test1
2.6M	/home/glusterfs-SV/test10
2.6M	/home/glusterfs-SV/test11
2.6M	/home/glusterfs-SV/test12
2.6M	/home/glusterfs-SV/test13
2.6M	/home/glusterfs-SV/test14
2.6M	/home/glusterfs-SV/test15
2.6M	/home/glusterfs-SV/test16
2.6M	/home/glusterfs-SV/test17
2.6M	/home/glusterfs-SV/test18
2.6M	/home/glusterfs-SV/test19
2.6M	/home/glusterfs-SV/test2
2.6M	/home/glusterfs-SV/test20
2.6M	/home/glusterfs-SV/test3
2.6M	/home/glusterfs-SV/test4
2.6M	/home/glusterfs-SV/test5
2.6M	/home/glusterfs-SV/test6
2.6M	/home/glusterfs-SV/test7
2.6M	/home/glusterfs-SV/test8
2.6M	/home/glusterfs-SV/test9

Lorsqu'on accède à un fichier on viens bien du coup que toutes les briques du gluster sont sollicitées :

16:58:22.416984 IP server-02.24010 > client-01.1013:
16:58:22.416986 IP server-02.24010 > client-01.1013: 
16:58:22.416989 IP server-02.24010 > client-01.1013: 

16:58:22.363600 IP server-03.24010 > client-01.1012:
16:58:22.363603 IP server-03.24010 > client-01.1012:
16:58:22.363605 IP server-03.24010 > client-01.1012:

Du coup cassons une brique voir ce qu'il se passe :

client-01:~# cat /mnt/gluster-SV/test16
cat: /mnt/gluster-SV/test16: Transport endpoint is not connected

client-01:~# dd if=/dev/zero of=/mnt/gluster-SV/test777 bs=1M count=100
dd: opening `/mnt/gluster-SV/test777': Input/output error

Plus aucun fichier n'est accessible ... et impossible de créer le moindre fichier.

Après relance de la brique HS (et un petit laps de temps), tout refonctionne comme avant

Essayons maintenant de rajouter une brique au volume. Sur un striped volume, on ne peux rajouter qu'un multiple du nombre de stripe (4 dans notre cas). Idem pour les replicated volume.

Du coup on va rajouter 4 briques à notre volume :

server-01:~# gluster volume add-brick striped-volume \
server-01:/home/glusterfs-SV2 \
server-02:/home/glusterfs-SV2 \
server-03:/home/glusterfs-SV2 \
server-04:/home/glusterfs-SV2
# gluster volume info

Volume Name: striped-volume
Type: Distributed-Stripe
Status: Started
Number of Bricks: 2 x 4 = 8
Transport-type: tcp
Bricks:
Brick1: server-01:/home/glusterfs-SV
Brick2: server-02:/home/glusterfs-SV
Brick3: server-03:/home/glusterfs-SV
Brick4: server-04:/home/glusterfs-SV
Brick5: server-01:/home/glusterfs-SV2
Brick6: server-02:/home/glusterfs-SV2
Brick7: server-03:/home/glusterfs-SV2
Brick8: server-04:/home/glusterfs-SV2

On passe du coup en "Distributed-Stripe". Pas moyen a priori d'augmenter uniquement le nombre de stripe en rajoutant une brique.

Si on recrée des fichiers, ils sont distribués entre les 2 groupes de stripes :

client-01:~# for i in `seq 1 10`;do dd if=/dev/zero of=/mnt/gluster-SV/test3$i bs=1M count=10; done

server-01:~# du -h /home/glusterfs-SV2/*
2.6M	/home/glusterfs-SV2/test33
2.6M	/home/glusterfs-SV2/test34
2.6M	/home/glusterfs-SV2/test35
2.6M	/home/glusterfs-SV2/test38
2.6M	/home/glusterfs-SV2/test39

server-01:~# du -h /home/glusterfs-SV/*
2.6M	/home/glusterfs-SV/test1
2.6M	/home/glusterfs-SV/test10
2.6M	/home/glusterfs-SV/test11
2.6M	/home/glusterfs-SV/test12
2.6M	/home/glusterfs-SV/test13
2.6M	/home/glusterfs-SV/test14
2.6M	/home/glusterfs-SV/test15
2.6M	/home/glusterfs-SV/test16
2.6M	/home/glusterfs-SV/test17
2.6M	/home/glusterfs-SV/test18
2.6M	/home/glusterfs-SV/test19
2.6M	/home/glusterfs-SV/test2
2.6M	/home/glusterfs-SV/test20
2.6M	/home/glusterfs-SV/test3
2.6M	/home/glusterfs-SV/test31
2.6M	/home/glusterfs-SV/test310
2.6M	/home/glusterfs-SV/test32
2.6M	/home/glusterfs-SV/test36
2.6M	/home/glusterfs-SV/test37
2.6M	/home/glusterfs-SV/test4
2.6M	/home/glusterfs-SV/test5
2.6M	/home/glusterfs-SV/test6
2.6M	/home/glusterfs-SV/test7
2.6M	/home/glusterfs-SV/test8
2.6M	/home/glusterfs-SV/test9

Tant qu'on est dans l'ajout de brique testons les commandes de rebalancing

server-01:~# gluster volume rebalance striped-volume start
starting rebalance on volume striped-volume has been successful

server-01:~# gluster volume rebalance striped-volume status
rebalance step 2: data migration in progress : rebalanced 2 files of size 20971520 (total files scanned 12)

server-01:~# gluster volume rebalance striped-volume status
rebalance completed: rebalanced 9 files of size 94371840 (total files scanned 41)

Ce qui donne du coup

server-01:~# du -h /home/glusterfs-SV/*
2.6M	/home/glusterfs-SV/test1
2.6M	/home/glusterfs-SV/test13
2.6M	/home/glusterfs-SV/test15
2.6M	/home/glusterfs-SV/test16
2.6M	/home/glusterfs-SV/test19
2.6M	/home/glusterfs-SV/test2
2.6M	/home/glusterfs-SV/test31
2.6M	/home/glusterfs-SV/test310
2.6M	/home/glusterfs-SV/test32
2.6M	/home/glusterfs-SV/test36
2.6M	/home/glusterfs-SV/test37
2.6M	/home/glusterfs-SV/test4
2.6M	/home/glusterfs-SV/test5
2.6M	/home/glusterfs-SV/test7
2.6M	/home/glusterfs-SV/test8
2.6M	/home/glusterfs-SV/test9

root@server-01:~# du -h /home/glusterfs-SV2/*
2.6M	/home/glusterfs-SV2/test10
2.6M	/home/glusterfs-SV2/test11
2.6M	/home/glusterfs-SV2/test12
2.6M	/home/glusterfs-SV2/test14
4.0K	/home/glusterfs-SV2/test15
2.6M	/home/glusterfs-SV2/test17
2.6M	/home/glusterfs-SV2/test18
2.6M	/home/glusterfs-SV2/test20
2.6M	/home/glusterfs-SV2/test3
2.6M	/home/glusterfs-SV2/test33
2.6M	/home/glusterfs-SV2/test34
2.6M	/home/glusterfs-SV2/test35
2.6M	/home/glusterfs-SV2/test38
2.6M	/home/glusterfs-SV2/test39
2.6M	/home/glusterfs-SV2/test6
4.0K	/home/glusterfs-SV2/test7

Par contre coté client, on voit apparaitre des fichiers un peu étranges :

-rw-r--r-- 1 root root 10485760 2011-09-01 12:24 test15
-rw-r--r-- 1 root root 10485760 2011-09-02 13:50 .test15.gfs10485760

-rw-r--r-- 1 root root 10485760 2011-09-01 12:23 test7
-rw-r--r-- 1 root root 10485760 2011-09-02 13:49 .test7.gfs10485760

La FAQ indique qu'il s'agit de fichier temporaire crées lors du rebalancing lorsque ces fichiers sont utilisés et qu'on peu les effacés si le fichier original est correct ... Plutôt étrange.