Un petit chapitre consacré aux 'Distributed Volumes'

Création du volume

gluster volume create distributed-volume server-05:/home/glusterfs-DV \
server-10:/home/glusterfs-DV \
server-11:/home/glusterfs-DV \
server-12:/home/glusterfs-DV

On regarde le status du volume :

gluster volume info

Volume Name: distributed-volume
Type: Distribute
Status: Created
Number of Bricks: 4
Transport-type: tcp
Bricks:
Brick1: server-05:/home/glusterfs-DV
Brick2: server-10:/home/glusterfs-DV
Brick3: server-11:/home/glusterfs-DV
Brick4: server-12:/home/glusterfs-DV

On lance le volume :

gluster volume start distributed-volume

On monte le volume :

mount -t nfs server-11:/distributed-volume /mnt/gluster-DV/

Un test rapide :

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

Ce qui donne sur le montage NFS :

ll /mnt/gluster-DV/
total 204800
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test1
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test10
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test11
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test12
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test13
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test14
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test15
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test16
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test17
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test18
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test19
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test2
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test20
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test3
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test4
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test5
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test6
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test7
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test8
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test9

On voit bien que les fichiers sont répartis sur chaque briques du volume :

server-12:~# ll /home/glusterfs-DV
total 71680
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test10
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test11
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test12
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test15
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test20
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test3
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test7

server-05:~# ll /home/glusterfs-DV
total 40960
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test1
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test2
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test5
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test9

server-10:~# ll /home/glusterfs-DV
total 51200
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test13
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test16
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test19
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test4
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test8

server-11:~# ll /home/glusterfs-DV
total 40960
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test14
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test17
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test18
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test6

Passons aux choses un peu plus fun.

demon glusterd crashé (simulé par un kill -9)

server-05:~# gluster peer status
Number of Peers: 3

Hostname: server-10
Uuid: c6f1e99f-e048-45ab-a682-5e2ca91733ef
State: Peer in Cluster (Disconnected)

Hostname: server-11
Uuid: a166c2f3-30e2-43fb-80fd-8f01c3f9842e
State: Peer in Cluster (Connected)

Hostname: server-12
Uuid: 67976b5a-54df-4184-b305-1a4a50f9474e
State: Peer in Cluster (Connected)

Ce qui se traduit sur le volume par l'impossibilité d'accéder à certains fichiers (ceux hébergés sur le nœud crashé) :

server-09:~# ll /mnt/gluster-DV/
total 153600
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test1
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test10
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test11
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test12
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test14
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test15
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test17
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test18
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test2
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test20
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test3
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test5
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test6
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test7
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test9

On relance le démon :

/etc/init.d/glusterd start
server-05:~# gluster peer status
Number of Peers: 3

Hostname: server-10
Uuid: c6f1e99f-e048-45ab-a682-5e2ca91733ef
State: Peer in Cluster (Connected)

Hostname: server-11
Uuid: a166c2f3-30e2-43fb-80fd-8f01c3f9842e
State: Peer in Cluster (Connected)

Hostname: server-12
Uuid: 67976b5a-54df-4184-b305-1a4a50f9474e
State: Peer in Cluster (Connected)

Les fichiers sont de nouveaux disponibles :

server-09:~# ll /mnt/gluster-DV/
total 204800
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test1
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test10
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test11
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test12
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test13
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test14
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test15
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test16
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test17
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test18
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test19
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test2
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test20
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test3
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test4
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test5
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test6
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test7
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test8
-rw-r--r-- 1 root root 10485760 2011-08-23 15:21 test9

Testons maintenant la création de fichiers lorsqu'une brique du volume est HS

for i in `seq 1 20`;do dd if=/dev/zero of=/mnt/gluster-DV/test2$i bs=1M count=10; done
10485760 octets (10 MB) copiés, 0,261619 s, 40,1 MB/s
[...]
dd: ouverture de `/mnt/gluster-DV/test26': Erreur d'entrée/sortie
[...]
dd: ouverture de `/mnt/gluster-DV/test213': Erreur d'entrée/sortie
dd: ouverture de `/mnt/gluster-DV/test214': Erreur d'entrée/sortie

C'est plutôt moche .... a voir si avec le client natif (FUSE) ca marche mieux. On verra ca par la suite.

Autre soucis, pour monter le volume via NFS, on mount sur une adresse IP unique (celle d'un des serveurs du gluster). En cas de crash de ce serveur, l'accès aux données est impossible. Il doit être possible via une VIP de contourner ce probleme. L'utilisation du client natif gluster permet aussi de s'affranchir de ce problème.

Testons donc le client natif glusterfs.

Pour monter le volume :

mount -t glusterfs server-11:/distributed-volume /mnt/gluster-DV/

# mount
server-11:/distributed-volume on /mnt/gluster-DV type fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)

Première constatation, ca a l'air beaucoup plus rapide que le NFS.

La même problématique apparait lorsque qu'un serveur du gluster crash, la création de fichier sur le volume échoue pour certains fichiers

Noeud final de transport n'est pas connecté

Par contre lorsque le serveur sur lequel le montage a été fait crash, l'accès aux données fonctionne toujours. C'est d'ailleur mentionné dans la doc :

Note: The server specified in the mount command is only used to fetch the gluster configuration
volfile describing the volume name. Subsequently, the client will communicate directly with the
servers mentioned in the volfile (which might not even include the one used for mount).

Par contre les fichiers présent sur ce serveurs sont du coup inaccessible sur le montage.