Glusterfs

De Wiki doc


GlusterFS (GNU Cluster File System) est un système de fichiers distribué libre (GPLv2) disponible sous GNU/Linux (via FUSE) et BSD. Initialement créé par une entreprise indienne rachetée par Red Hat en 2011, le projet est aujourd'hui supporté par ce dernier.

Il permet la gestion de volumes de données sur le réseaux en se basant sur une grappe de machines, appelée pairs, en suivant le principe pair à pair. Les machines de la grappe se partages une partie d'un volume et apparaissent alors comme un de ses composant sous le nom de biques (bricks). Une brique se décrit sous la forme nomHôte:/chemin/partagé/au/volume.

<img src="https://doc.ycharbi.fr/fichiers/systèmes_de_fichiers/glusterfs/Schéma_GlusterFS.svg" alt="Schéma GlusterFS" style="display: block; height:auto; margin-left:auto; margin-right:auto;"/>

Modes de fonctionnement

GlusterFS permet l'utilisation de plusieurs modes de gestion de données. Il est ainsi possible de les répartir selon des besoins différents sur l'ensemble des briques composants la grappe.

Volume distribué

Ce mode réparti les données sur le volume en plaçant un fichier sur une seule brique à la fois. Il est conçu pour combiner l'espace de tous les disques le composant. Il n'offre alors aucune redondance mais permet une grande évolutivité de l'espace de stockage. Il s'agit du mode par défaut.

Exemple

Si 3 serveurs ont chacun un disque de 2 To, la capacité utile totale sera de 6 To en se fiant au calcul suivant :

<Taille utilisable> = <taille des briques> * <nombre de briques>

Volume répliqué

Ici le principe est inverse, chaque fichier est répliqué sur chaque brique composant le volume. La redondance est maximale mais aucun gain d'espace dû à au nombres de disques n'est occasionné.

Exemple

Si 3 serveurs ont chacun un disque de 2 To, la capacité utile totale sera de 2 To en se fiant au calcul suivant :

<Taille utilisable> = <taille des briques>

Volume répliqué distribué

Ce mode est une combinaison des deux premiers. Le nombre de briques le composant doit être un multiple du nombre de répliques. 4 pairs minimum sont nécessaires. Ce référer à la documentation officielle pour les détails.

Exemple

Si 4 serveurs ont chacun un disque de 2 To, la capacité utile totale sera de 4 To en se fiant au calcul suivant :

<Taille utilisable> = <taille des briques> * (<nombre de briques> / 2)

Volume dispersé

Le but de ce mode est de scinder les fichiers pour en disperser les fragments sur les briques composants le volume. Ceux-ci sont utilisés pour obtenir un niveau de fiabilité configurable avec un minimum de perte d'espace. Il est possible de définir le nombre de redondance tant qu'il est strictement inférieur au nombre de briques divisé par 2.

Exemple

Si 3 serveurs ont chacun un disque de 2 To, la capacité utile totale sera de 4 To en se fiant au calcul suivant :

<Taille utilisable> = <taille des briques> * (<nombre de briques> - <redondance>)

Volume dispersé distribué

Les volumes dispersés distribués sont équivalents aux volumes répliqués distribués, mais ils utilisent des sous-volumes dispersés au lieu de volumes répliqués. Le nombre de briques doit être un multiple du premier sous-volume. Un minium de 6 pairs est exigé dans ce mode.

Son objectif est de faire évoluer facilement la taille du volume et de répartir la charge sur plusieurs briques.

Exemple

Si 6 serveurs ont chacun un disque de 2 To, la capacité utile totale sera de 5 To en se fiant au calcul suivant :

<Taille utilisable> = (<taille des briques> * (<nombre de briques> - <redondance>)) / 2

Installation et mise en œuvre

installation

L'outil est disponible dans les dépôts de Debian Stable

apt install --no-install-recommends glusterfs-server

Le service est censé démarrer à l'issue

systemctl status glusterd

Création d'une grappe

La création d'une grappe s'effectue à l’association de pairs (machines) depuis l'un d'eux. 3 machines sont utilisées dans notre exemple. Elle se trouvent dans le même LAN et portent les noms srv1; srv2; srv3 (ajoutés dans /etc/hosts).

Sur l'une des machines de la future grappe (ici srv1)

gluster peer probe srv2
gluster peer probe srv3

ATTENTION

L'aspect sécurité de la solution n'est pas quelque chose de très pris au sérieux. En témoigne la section dédiée de la documentation officielle. Le service écoute sur toutes les interfaces sans authentification (il va sans dire que le trafic n'est pas non plus chiffré...). Il suffit alors à un attaquant de s'ajouter de lui même dans la grappe pour avoir accès aux données. L'utilisation d'IPSec en mode transport est à privilégier dans un réseau de production.

Il est possible de lister les pairs de la grappe avec la commande

gluster pool list

Création d'un volume

Le mode de fonctionnement d'un volume est définit par les paramètres de répartition passés à la commande de sa création. Nous utiliserons un volume dispersé pour la suite de la documentation.

le répertoire partagé doit existé sur tous les pairs

mkdir -p /srv/gluster/volume1

Exécuter sur un des pairs

gluster volume create volume1 disperse 3 redundancy 1 srv1:/srv/gluster/volume1 srv2:/srv/gluster/volume1 srv3:/srv/gluster/volume1 force

ou (méthode simplifiée)

gluster volume create volume1 disperse 3 redundancy 1 srv{1..3}:/srv/gluster/volume1 force

ou (méthode encore plus simplifiée)

gluster volume create volume1 disperse 3 srv{1..3}:/srv/gluster/volume1 force

L'utilisation du paramètre force permet d'utiliser la commande avec l'utilisateur root.

Voici un autre exemple pour un volume répliqué

gluster volume create volume1 replica 3 srv1:/srv/gluster/volume1 srv2:/srv/gluster/volume1 srv3:/srv/gluster/volume1 force

Vous noterez que le mot clé disperse est remplacé par replica dans ce mode.

INFORMATION

Pour rappel, dans ce mode, le nombre de réplication doit être égale au nombre de machines déclarées par la suite.

Gestion des volumes

Démarrer un volume

gluster volume start volume1

Montage du volume

Tous les pairs peuvent monter le volume en local via le réseau. Pour les machines ne faisant pas parties de la grappe, un protocole de partage réseau, tel que NFS ou SMB, doit être utilisé.

Montage non persistant

mount.glusterfs localhost:/volume1 /mnt

Montage persistant :

echo 'localhost:/volume1 /mnt glusterfs defaults,_netdev,backupvolfile-server=localhost 0 0' >> /etc/fstab
mount localhost:/volume1

Lister les volumes

gluster volume list

Supervision

GlusterFS écrit son journal dans /var/log/glusterfs/glusterd.log.

Il n'existe pas de solution de supervision intégrée à l'outil. Il est cependant assez simple d'imaginer une alerte automatisée en ordonnançant la commande de statut des pairs

gluster --mode=script peer status | grep -B2 Disconnected

INFORMATION

L'ajout de l'option --mode=script à une commande CLI garanti l'exécution de la commande sans demande de confirmation.

Remplacement d'une machine

Dans le cas de la défaillance d'un des pairs, son remplacement s'effectue par l'ajout d'une nouvelle machine suivit du retrait de l'ancienne.

Ajout d'une nouvelle machine

gluster peer probe srv4

Récupération du nom de la brique à remplacer

gluster volume info all

Remplacement de la brique (penser à le faire pour tous les volumes la comprenant)

gluster volume replace-brick volume1 srv3:/srv/gluster/volume1 srv4:/srv/gluster/volume1 commit force

Suppression du pair de la grappe

gluster peer detach srv3

Sources