Test de GlusterFS

Présentation

C’est un outil de file system distribué qui se situe au dessus de la couche FS. A ne pas confondre avec les FS partagés tels que GFS2 ou ocfs2 par exemple. Ici un FS distribué serat en XFS, ext3, …
Il permet de faire de la concaténation ou du réplica entre des FS de plusieurs serveurs. Et gére les accés clients concurents.

Mise en place

J’ai mis en place deux VM qui serviront de serveur de fichiers: node1 et node2

Installation du cluster

  • Packages à installer:
    • serveurs
      via yum il suffit d’installer
      1
      2
      yum install glusterfs{-fuse,-server}
      service glusterd start
    • clients:
      1
      yum install glusterfs-fuse
  • Mise en place du cluster
    A cette étape glusterfsd tourne sur chaque serveur. Maintenant il les faut les associer en cluster:
1
2
3
4
5
6
# Attacher une machine au pool de stockage (a faire sur les 2)
gluster peer probe node1
gluster peer probe node2

# Afficher les machines reconnus sur le cluster
gluster peer status

ATTENTION: pour que cela marche il faut bien sur désactiver le firewall ou ouvrir les ports utilisés par gluster fs. Sinon “gluster peer probe” retournerat ue impossibilité de se connecter au noeux.

Création d’un volume partagé

Glusterfs permet trois types de volume (ou une association des 3)

  • Volumes distribués: Les fichiers sont répartis aléatoirement entre chaque brique de stockage du volume.

  • Volumes repliqués: Une ou plusieurs copies des fichiers sont disponibles sur plusieurs briques du volume

  • Volumes agrégés par bande (striped): Les données sont découpées et réparties entre plusieurs briques du volume.

Pour mes besoins, je ne m’interesserait qu’aux volumes repliqués.

  • Préparation des FS:
    Il faut créer les FS à partager sur l’ensemble des noeuds
    1
    2
    3
    4
    5
    pvcreate /dev/vdb
    vgcreate node*_data /dev/vdb
    lvcreate -L 1G -n lvexport node*_data
    mkfs.ext4 /dev/mapper/node*_data-lvexport
    mkdir -p /export && mount /dev/mapper/node*_data-lvexport /export
    Création d’un volume gvol1 de type replica (2 replica):
    1
    2
    gluster volume create gvol1 replica 2 transport tcp node1.hedwy.fr:/export/ node2.hedwy.fr:/export/
    gluster volume start gvol1
    On peut ajouter des acl sur le volume pour éviter un montage par n’importe qui:
    1
    gluster volume set gvol1 auth.allow 192.168.*
    Etat de gvol1
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    gluster volume info
    Volume Name: gvol1
    Type: Replicate
    Volume ID: c5111d8c-58e1-40f4-9ebc-ab362cebbfcf
    Status: Started
    Number of Bricks: 1 x 2 = 2
    Transport-type: tcp
    Bricks:
    Brick1: node1.hedwy.fr:/export
    Brick2: node2.hedwy.fr:/export
    Options Reconfigured:
    auth.allow: 192.168.*
  • Montage sur le client:
    1
    mount.glusterfs  192.168.100.191:/gvol1 /mnt/glusterfs
  • Note: erreur lors de la création du volume
    lors de la création glusterfsd peut se bloquer en affirmant que le FS est déja un volume glusterfs ou est contenu dans un volume alors que ce n’est pas le cas:
    1
    2
    3
    4
    setfattr -x trusted.glusterfs.volume-id /export
    setfattr -x trusted.gfid $brick_pat
    setfattr -x trusted.gfid /export
    rm /export/.glusterfsd

    Tests

    Le volume créé c’est comporté exactement comme attendu lors de mes tests:
  • Agrandissement: Aprés un agrandissement classique des deux FS /export, le volume monté à eut sa taille également augmentée
  • Ecriture:
    Ras lors de l’écriture/suppression/modification dans /mnt/glusterfs ou dans /export. Il faut juste noter que la synchro n’est réalisée qu’a partir du momment ou le volume glusterfs est monté au moins une fois (sinon les modif faites dans /export ne sont pas repercutées sur l’autre noeud).
  • Tolérance aux pannes: RAS de ce coté aussi. Tout se passe bien tant que l’on fait attention lors du redémarrage (si les deux noeuds sont HS).

Conclusions

Plutôt simple à mettre en place et à administrer (malgrés les problèmes liés aux différences de versions entre serveurs et clients). Ce n’est pourtant pas ce que je cherche.
En effet, lorsqu’un serveur est également client on se retrouve avec deux arborescence de montées.

Sources

Pour mon test j’ai utilisé ensentiellement deux tuto:
http://www.howtoforge.com/high-availability-storage-with-glusterfs-3.2.x-on-centos-6.3-automatic-file-replication-mirror-across-two-storage-servers
http://petitcodeur.fr/sysadmin/installation-glusterfs-centos.html