Comprendre GlusterFS : architecture distribuée, concepts fondamentaux et gestion opérationnelle

Pourquoi envisager GlusterFS face à NFS ?

Le système de fichiers NFS souffre de plusieurs limitations structurelles :

  • Capacité figée : l'ajout de stockage se limite à l'installation de disques supplémentaires sur un seul serveur, ce qui rend l'extension vers le stockage massif impraticable.
  • Vulnérabilité au point unique de défaillance : NFS repose sur une unique copie des données. En cas de panne matérielle du serveur de stockage, les données deviennent inaccessibles ou sont perdues.
  • Goulot d'étranglement E/S : même en agrandissant le volume de stockage, les requêtes simultanées nombreuses saturent les opérations disque, créant un col de performance.

GlusterFS répond à ces problématiques par une archietcture distribuée offrant scalabilité horizontale, haute disponibilité et performances accrues. Il agrège l'espace de plusieurs serveurs de stockage en un espace de noms unifié. Plusieurs modes de disposition des données coexistent — répartition, réplication, combinaisons des deux — analogues aux niveaux RAID 0, RAID 1 et RAID 10.

Lexique essentiel de GlusterFS

Un brick associe un nœud à un système de fichiers (ou un répertoire). Par exemple, le nœud serveur-alpha disposant du système de fichiers /dev/sdb1 expose le brick serveur-alpha:/dev/sdb1.

Aucune limite théorique ne restreint le nombre de bricks par nœud. Toutefois, il est recommandé d'uniformiser la taille des bricks à travers le cluster : dans un volume répliqué, l'espace utile correspond au plus petit brick du groupe.

Les volumes et leurs variantes

Un volume constitue l'abstraction exposée aux clients. Il se compose d'un nombre arbitraire de bricks et possède un identifiant unique.

Volume distribué (DHT)

Les fichiers sont répartis entre les bricks selon un algorithme de hachage. Chaque brick conserve un sous-ensemble des données ; les répertoires racines sont présents sur tous les bricks. La défaillance d'un brick antraîne la perte des fichiers qu'il héberge. Aucun serveur de métadonnées n'est requis.

Volume répliqué (AFR)

Chaque fichier et répertoire est dupliqué de manière synchrone sur l'ensemble des bricks du volume. Le nombre de réplicas est configurable librement. Ce mode garantit la haute disponibilité et maintient la cohérence transactionnelle grâce au mécanisme de changelog.

Volume distribué-répliqué

Le mode le plus couramment déployé. Il combine la répartition des fichiers sur plusieurs groupes de bricks avec la réplication au sein de chaque groupe. Les lectures bénéficient d'une distribution de charge.

Volume strié

Les fichiers sont découpés en blocs (chunks) répartis sur plusieurs bricks. Ce mode s'avère pertinent uniquement pour les fichiers volumineux, de taille supérieure à celle d'un disque individuel. La panne d'un brick compromet les données ; il est conseillé de coupler ce mode avec la réplication.

Commandes d'administration courantes

Gestion des nœuds du cluster

# Vérifier l'état des pairs connectés (depuis un nœud donné)
$ gluster peer status

# Intégrer un nouveau nœud au pool de stockage
$ gluster peer probe serveur-delta

# Retirer un nœud (aucun brick ne doit y résider)
$ gluster peer detach serveur-delta

Création de volumes

# Volume distribué — répartition par hachage sur trois bricks
$ gluster volume create vol_rep node-a:/disques/d1 \
    node-b:/disques/d1 node-c:/disques/d1

# Volume répliqué — trois copies synchrones
$ gluster volume create vol_miroir replica 3 \
    node-a:/disques/d1 node-b:/disques/d1 node-c:/disques/d1

# Volume répliqué-distribué — deux réplicas par groupe, répartis sur trois groupes
$ gluster volume create vol_hybride replica 2 \
    node-a:/disques/d1 node-b:/disques/d1 \
    node-a:/disques/d2 node-b:/disques/d2 \
    node-a:/disques/d3 node-b:/disques/d3

# Volume strié — découpage en trois blocs
$ gluster volume create vol_stripe stripe 3 \
    node-a:/disques/d1 node-b:/disques/d1 node-c:/disques/d1

Inspection et cycle de vie d'un volume

# Afficher les métadonnées complètes d'un volume
$ gluster volume info vol_rep

# Consulter l'état opérationnel (bricks, services NFS, tâches en cours)
$ gluster volume status vol_rep

# Démarrer un volume après sa création
$ gluster volume start vol_rep

# Arrêter un volume (les clients ne peuvent plus y accéder)
$ gluster volume stop vol_rep

# Supprimer définitivement un volume (nécessite l'arrêt préalable)
$ gluster volume delete vol_rep

Ajout et retrait de bricks

# Ajouter un brick à un volume distribué
$ gluster volume add-brick vol_rep node-d:/disques/d1

# Pour un volume répliqué, ajouter un multiple du nombre de réplicas
$ gluster volume add-brick vol_miroir \
    node-d:/disques/d1 node-d:/disques/d2

# Initier la suppression d'un brick (migration automatique des données)
$ gluster volume remove-brick vol_rep node-d:/disques/d1 start

# Suivre la progression de la migration
$ gluster volume remove-brick vol_rep node-d:/disques/d1 status

# Valider la suppression une fois la migration achevée
$ gluster volume remove-brick vol_rep node-d:/disques/d1 commit

Remplacement de brick

# Lancer le remplacement — copie des données de l'ancien vers le nouveau
$ gluster volume replace-brick vol_rep \
    node-a:/disques/d1 node-a:/disques/d2 start

# Vérifier l'avancement de la copie
$ gluster volume replace-brick vol_rep \
    node-a:/disques/d1 node-a:/disques/d2 status

# Annuler le remplacement si nécessaire
$ gluster volume replace-brick vol_rep \
    node-a:/disques/d1 node-a:/disques/d2 abort

# Confirmer le remplacement une fois la copie terminée
$ gluster volume replace-brick vol_rep \
    node-a:/disques/d1 node-a:/disques/d2 commit

L'extension du cluster s'effectue en ajoutant d'abord le nœud, puis ses bricks. La réduction suit le chemin inverse : on retire les bricks (avec migration des données), puis on détache le nœud.

Quotas par répertoire

# Activer la gestion des quotas sur un volume
$ gluster volume quota vol_rep enable

# Définir une limite de 15 Go sur le répertoire /donnees
$ gluster volume quota vol_rep limit-usage /donnees 15GB

# Lister tous les quotas configurés
$ gluster volume quota vol_rep list

# Consulter le quota d'un répertoire spécifique
$ gluster volume quota vol_rep list /donnees

# Désactiver les quotas
$ gluster volume quota vol_rep disable

Exemple complet de mise en œuvre

# Création du volume et démarrage
$ gluster volume create stockage node-p:/espace/d1 node-q:/espace/d1 force
$ gluster volume start stockage

# Montage côté client
$ mount -t glusterfs 10.0.0.50:stockage /mnt/stockage

# Création de sous-répertoires
$ mkdir /mnt/stockage/projets
$ mkdir /mnt/stockage/archives

# Activation et configuration des quotas
$ gluster volume quota stockage enable
$ gluster volume quota stockage limit-usage /projets 12GB
$ gluster volume quota stockage limit-usage /archives 25GB

# Montage individuel des sous-répertoires quota
$ mount -t glusterfs 10.0.0.50:stockage/projets /mnt/stockage/projets
$ mount -t glusterfs 10.0.0.50:stockage/archives /mnt/stockage/archives

# Vérification avec df
$ df -h
10.0.0.50:stockage        120G   45G   75G  38% /mnt/stockage
10.0.0.50:stockage/projets  12G    0   12G   0% /mnt/stockage/projets
10.0.0.50:stockage/archives 25G    0   25G   0% /mnt/stockage/archives

Étiquettes: GlusterFS stockage distribué système de fichiers distribué haute disponibilité volume répliqué

Publié le 23 juillet à 21h43