Glusterfs
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