Introduction à GlusterFS

13 mai 2021

Concepts

GlusterFS est un système de fichiers distribué, c’est à dire qu’il permet d’agréger du stockage (des “bricks”) reparti sur une grappe de machines dans un “volume” qu’il expose à des clients. Plusieurs clients peuvent monter un même volume et y accéder simultanément.

Ça permet d’avoir un stockage :

=> https://www.gluster.org/

Volumes

GlusterFS peut créer différent types de volumes :

Par rapport au “distribué et répliqué”, le “dispersé et distribué” (~RAID 60) a l’avantage de “gâcher” moins d’espace de stockage en contrepartie d’une moindre tolérance aux pannes.

Typiquement on commence souvent avec un volume répliqué ou dispersé, et lorsqu’on l’étend ça devient automatiquement distribué et répliqué/dispersé.

=> https://docs.gluster.org/en/latest/Administrator-Guide/Setting-Up-Volumes/

Clients

Pour accéder à un volume GlusterFS, il existe différentes méthodes :

=> https://docs.gluster.org/en/latest/Administrator-Guide/Setting-Up-Clients/

Installation

GlusterFS est présent dans les dépôts Debian, toutefois pour avoir une version plus récente il est possible d’utiliser les dépôts du projet :

# ajout des dépôts tiers
wget -O - https://download.gluster.org/pub/gluster/glusterfs/8/rsa.pub | apt-key add -
echo deb [arch=amd64] https://download.gluster.org/pub/gluster/glusterfs/9/LATEST/Debian/buster/amd64/apt buster main > /etc/apt/sources.list.d/gluster.list

# installation de GlusterFS
apt-get install glusterfs-server

# outils pour LVM
apt-get install lvm2 thin-provisionning-tools

# outils pour XFS
apt-get install xfsprogs

=> https://download.gluster.org/pub/gluster/glusterfs/LATEST/

Configuration

Préparation du stockage

LVM

L’utilisation de LVM est recommandée, car ça permet de bénéficier de la fonction de snapshots de GlusterFS, sinon c’est optionnel. Plus spécifiquement, il faut utiliser le “thin-provisionning” de LVM pour que ça fonctionne.

# création du groupe de volumes LVM
vgcreate data-vg /dev/sdx

# création du groupement destiné à recevoir les volumes
lvcreate --type thin-pool --extents 100%FREE --name data-vg/thin-pool

# création du volume dans le groupement
lvcreate --type thin --virtualsize 500G --thinpool data-vg/thin-pool --name thin-vol

Système de fichiers

N’importe quel système de fichiers gérant les attributs POSIX étendus est censé être supporté, XFS est celui recommandé, ext4 ou Btrfs sont également valables.

# formatage du volume en XFS
mkfs.xfs -i size=512 /dev/mapper/data--vg-thin--vol

# montage du volume
mkdir -p /data/brick
echo '/dev/mapper/data--vg-thin--vol /data/brick xfs rw,inode64,noatime,nouuid 0 2' >> /etc/fstab
mount /data/brick

Création de la grappe

En partant du principe qu’on a trois serveurs, respectivement nommés : gfs01, gfs02 et gfs03. On créer le “trusted pool” avec ceux-ci :

# sur chaque membre, démarrer le service et l'activer au démarrage
systemctl enable --now glusterd

# depuis gfs01, sonder les autres membres pour les ajouter au groupement
gluster peer probe gfs02
gluster peer probe gfs03

On peut ensuite vérifier l’état du groupement et la liste de ses membres :

gluster peer status
gluster pool list

Création du volume

C’est à cette étape qu’on choisit si on veut faire du distribué, répliqué ou dispersé. On va commencer avec de la réplication.

On créer un volume gv01 de type “replica 3”, c’est à dire que la donnée sera copiée à trois endroits, et si une machine devient indisponible, la donnée sera encore sur les deux autres :

gluster volume create gv01 replica 3 gfs01:/data/brick/gv01 gfs02:/data/brick/gv01 gfs03:/data/brick/gv01
gluster volume start gv01

On peut ensuite consulter l’état du volume :

gluster volume info

La sortie devrait avoir une ligne indiquant Status: Started. Sinon pour comprendre ce qui ne vas pas il faudra aller consulter le journal d’événements, par défaut /var/log/glusterfs/glusterd.log.

Montage du volume

Depuis les clients, il faut installer le paquet glusterfs-client dans la même version que les serveurs, et simplement monter le volume :

mkdir -p /data/gv01
mount -t glusterfs -o defaults,noatime,_netdev gfs01:/gv01 /data/gv01

Le montage se fait via gfs01, mais une fois monté même si cette machine disparaît ça continuera de fonctionner. Par contre si gfs01 est indisponible au moment du montage, ça échouera. Si on veut avoir une sécurité au montage on peut ajouter l’option backupvolfile-server=gfs02 par exemple.

Pour un montage persistent, ajouter cette ligne dans le fichier /etc/fstab :

gfs01:/gv01 /data/gv01 glusterfs defaults,noatime,_netdev 0 0

Extension du stockage

Le nombre de bricks à ajouter doit un multiple du nombre de “replica” choisit, par exemple pour une grappe en “replica 3” il faudra ajouter les membres par groupe de 3 (exemples : 3, 6, 9, 12, …).

# extension du volume
gluster volume add-brick gv01 gfs04:/data/brick/gv01 gfs05:/data/brick/gv01 gfs06:/data/brick/gv01

# vérifer l'état du volume
gluster volume info gv01

# reabalancement des donnés
gluster volume rebalance gv01 start

# vérifier l'état du rebalacement
gluster volume rebalance gv01 status

Ressources