Introduction Ă GlusterFS
13 mai 2021Concepts
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 :
- extensible
- hautement disponible
- distribué
Volumes
GlusterFS peut créer différent types de volumes :
- distribuĂ© : Ă©quivalent au RAID 0, les donnĂ©es sont rĂ©parties sur plusieurs bricks pour fournir de l’extensibilitĂ©
- répliqué : équivalent au RAID 1, les données sont dupliquées sur plusieurs bricks (généralement 2 ou 3) pour garantir de la disponibilité
- distribué et répliqué : équivalent au RAID 10, une combinaison des deux types précédents
- dispersĂ© : semblable au RAID 6 sur le principe, dans les faits ça utilise un code de correction d’erreur (“ECC”), les donnĂ©es sont dĂ©coupĂ©es, transformĂ©es et rĂ©parties sur plusieurs bricks avec un nombre prĂ©dĂ©fini de bricks pouvant ĂŞtre perdus
- distribué et dispersé : semblable au RAID 60, il agrège des volumes dispersés
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 :
- Gluster Native Client : basĂ© sur FUSE, c’est la mĂ©thode recommandĂ©e et la plus simple
- NFS : nĂ©cessite d’installer et configurer des composants supplĂ©mentaires, et notamment de s’assurer soi-mĂŞme la haute-disponibilitĂ© du NFS
- SMB/CIFS : pareil que pour le NFS
- Object Storage : pareil que pour le NFS
- libgfapi : expose une API pour interagir avec le stockage via du code directement
=> 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
- https://docs.gluster.org/en/latest/
- https://connect.ed-diamond.com/GNU-Linux-Magazine/GLMF-209/Un-systeme-de-fichiers-haute-disponibilite-avec-GlusterFS
- https://people.redhat.com/dblack/2013-10/gluster_for_sysadmins-advanced-with_demo.pdf
- https://www.redhat.com/en/about/videos/architecting-and-performance-tuning-efficient-gluster-storage-pools
- https://developers.redhat.com/blog/2017/11/20/monitoring-rhgs/
- https://developers.redhat.com/blog/2018/08/14/improving-rsync-performance-with-glusterfs/