GlusterFS - découverte et prise en main

Tut's Linux juil. 27, 2020

Présentation rapide du système de fichiers GlusterFS, avec quelques lignes de commandes pour prendre en main l'outil.


Principes de base

Un système de fichiers distribué et répliqué, accessible en LAN ou WAN fonctionnant en mode "client serveur". L'intérêt est d'avoir un stockage identique entre les serveurs d'un même cluster. Ces machines ont toutes un daemon glusterd qui est le binaire "serveur".

GlusterFS vient s'exécuter dans le monde "fichiers". Il n'a pas pour vocation de remplacer EXT4 ou autre, il vient "par-dessus". Pas besoin de charger des modules dans le noyau Linux, tout est exploité dans les "userspace" Linux. En tant que client, les outils FUSE et mount sont exploités, permettant de créer/monter des filesystem depuis l'environnement utilisateur. Les données sont stockées dans un sous-volume du GlusterFS, intitulé brick. Chaque brick est alors mis en place sur chaque serveur selon la configuration du cluster.

Pour s'assurer de l'intégrité des données, chaque fichier aura un hash unique, pas de métadonnée.

Les 2 modes de fonctionnement :

  • mode distribué - les données sont réparties sur les différents serveurs qui composent le cluster GlusterFS. Il n'y a pas de redondance des données. Si un stockage tombe en panne, c'est la perte des données sur le noeud en panne. (équivalent au RAID-0)
  • mode répliqué - les données sont les mêmes sur tous les noeuds des serveurs du cluster (copie exacte). Ce type de mise en place nécessite au moins 2 serveurs (noeuds). Si un noeud est HS, l'autre prendra le relais et "distribuera" les mêmes données que le noeud en panne. Les données sont saisies dans une "brick" (nom communément donné pour un sous-volume). (équivalent au RAID-1)

Il est possible de mixer les deux modes de fonctionnement pour avoir un stockage répliqué et distribué, permettant ainsi le meilleur des deux mondes (nécessite toutefois l'infrastructure qui va bien...).

Avantages : création d'un montage GlusterFS très rapide et simple, indépendant du matériel. Pas besoin d'avoir des droits administrateur ou élevés dans le noyau pour la mise en place.

Inconvénients : pas de système de cache


Informations complémentaires

Une commande GlusterFS lancée sur une machine du cluster enverra l'information sur toutes les machines du cluster. Par formalisme, il est souhaitable de lancer les commandes depuis le serveur "master".

Les données étant répliquées entre les serveurs, le stockage utilisé sera le même partout, sur tous les serveurs. Veillez donc à avoir suffisamment d'espace disque sur chacune des machines.

Cet outil est exploité plutôt en interne d'un SI. En effet, la réplication étant de type asynchrone, la connexion entre les serveurs doit être fiable et surtout rapide. L'exploitation de GlusterFS depuis un accès WAN est possible, mais les perfomances s'en retrouveront dégradées dans certaines situations, si les fichiers sont lourds et que l'écriture est fréquente (selon les retours sur le web).

  • RedHat est derrière le projet depuis 2013 mais est toujours maintenu par "Gluster core team"
  • à ce jour, la version 8.0 de GlusterFS est stable, sortie le 6 juillet 2020
  • Respect strict des normes POSIX

Pré-requis

  • Avoir un OS à jour, un FQDN et une adresse IP fixe (idéalement, une carte réseau dédiée)
  • Disposer d'une seconde grappe de disque dur sur chaque serveur où placer le contenu/volume pour le GlusterFS
  • Avoir renseigner le fichier /etc/hosts avec les IP et noms des serveurs pour le cluster
  • S'assurer que les machines peuvent communiquer entre-elles (pare-feu, IPTables etc...)

Installation sur 2 VM Debian 10

Opérations sur tous les serveurs

  • Installer les outils nécessaires : apt install glusterfs-server nfs-common software-properties-common lvm2 --no-install-recommends
  • L'installation se fait en quelques instants, pas besoin de redémarrer l'OS. Le service est OFF par défaut, penser à l'allumer (systemctl start glusterd && systemctl enable glusterd). La commande gluster peer status doit retourner "Number of peers: 0".

Sur le serveur "maître" = gluster peer probe ipOuNomDNSDeuxiemeServeur qui doit avoir le retour suivant : "peer probe: success."
Depuis le second serveur, effectuer la commande gluster peer status et s'assurer que le retour de la commande affiche bien le nom du premier serveur.

  • Ajouter une table de partition sur le disque : cfdisk /dev/sdb
  • Créer le LVM : pvcreate /dev/sdb1
  • vgcreate lvmgfsNOMLVM /dev/sdb1
  • lvcreate -l 100%VG -n gbrick1 lvmgfsNOMLVM
  • Créer une partition : mkfs.xfs -i size=512 /dev/lvmgfs/gbrick1
  • Ajouter une entrée dans le /etc/fstab : echo '/dev/lvmgfs/gbrick1 /glusterfs/vol0 xfs defaults 0 0' >> /etc/fstab
  • Créer et monter un dossier où seront "stockées" les données : mkdir -p /glusterfs/vol0 && mount /glusterfs/vol0

Opérations sur le serveur maître

  • Créer le dossier pour accueillir le volume GlusterFS : mkdir /glusterfs/vol0/brick1
  • Créer le volume : gluster volume create gvol0 replica 2 transport tcp servergfs:/glusterfs/vol0/brick1 servergfs2:/glusterfs/vol0/brick2 force # Le retour doit être "volume create: gvol0: success: please start the volume to access data"
  • gluster volume start gvol0 # Le retour doit être "volume start: gvol0: success"
root@servergfs:/gfs/sdb1# ps aux | grep gluster
root      4884  0.0  0.4 590860 16924 ?        Ssl  15:52   0:00 /usr/sbin/glusterd -p /run/glusterd.pid --log-level INFO

root      7918  0.0  0.5 977728 21344 ?        Ssl  17:17   0:00 /usr/sbin/glusterfsd -s servergfs --volfile-id gvol0.servergfs.gfs-sdb1-data -p /var/run/gluster/vols/gvol0/servergfs-gfs-sdb1-data.pid -S /var/run/gluster/6620383ed0803079.socket --brick-name /gfs/sdb1/data -l /var/log/glusterfs/bricks/gfs-sdb1-data.log --xlator-option *-posix.glusterd-uuid=cb70782c-7e00-478e-bb52-71fc05886af1 --process-name brick --brick-port 49152 --xlator-option gvol0-server.listen-port=49152

root      7941  0.0  0.2 442712 10776 ?        Ssl  17:17   0:00 /usr/sbin/glusterfs -s localhost --volfile-id gluster/glustershd -p /var/run/gluster/glustershd/glustershd.pid -l /var/log/glusterfs/glustershd.log -S /var/run/gluster/596bcc68a0e7e1e7.socket --xlator-option *replicate*.node-uuid=cb70782c-7e00-478e-bb52-71fc05886af1 --process-name glustershd

root      7984  0.0  0.0   6208   892 pts/0    R+   17:18   0:00 grep gluster

root@servergfs:/gfs/sdb1# gluster volume info
Volume Name: gvol0
Type: Replicate
Volume ID: 39508649-f7b5-465c-9297-5225e9396e52
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: servergfs:/gfs/sdb1/data
Brick2: servergfs2:/gfs/sdb1/data
Options Reconfigured:
transport.address-family: inet
nfs.disable: on
performance.client-io-threads: off

Opérations sur le serveur secondaire

  • Créer le dossier dans le volume GlusterFS : mkdir /glusterfs/vol0/brick2 ; ce dernier ne doit pas avoir le même numéro de "brick" par rapport aux autres serveurs du cluster - pour plus d'informations, voir la documentation officielle à cette adresse : (<https://docs.gluster.org/en/latest/Administrator Guide/Brick Naming Conventions/>)

Client (exemple)

Les clients ne sont pas les serveurs du cluster - un client = un utilisateur du SI.

apt install glusterfs-client --no-install-recommends
modprobe fuse
mkdir /mnt/glusterfs
mount -t glusterfs servergfs:/gvol0 /mnt/glusterfs

Commandes à retenir

  • Voir le status des noeuds du cluster : gluster peer status
  • Affiche les informations complètes du volume : gluster volume info NomVolumeGlusterFS

Source

Mots clés

Julien HOMMET

Bercé par l'informatique depuis mon plus jeune âge, je transforme ma passion en expertise.