Red Hat et dérivées version SERVEUR

Alma Linux Rocky Linux : Installer et paramétrer GlusterFS

Table des matières

glusterfs-logo



Introduction



GlusterFS est un système de fichiers distribué qui permet de regrouper plusieurs stockages de plusieurs serveurs pour les faire apparaître comme un seul et unique système de fichiers.

Parmi les avantages de GlusterFS, on pourra noter qu'il permet d'augmenter la capacité de stockage et la disponibilité des données en regroupant les ressources des différents noeuds. Il peut se paramétrer de différentes façons :
- Distribué : les données sont réparties sur plusieurs nœuds ou serveurs pour améliorer les performances et l'efficacité en utilisant les ressources de chacun des nœuds. Les données sont réparties de manière à ce que chacun des nœuds ne soit pas surchargé. (par analogie, voyez ça comme un RAID0 sur réseau)
- Répliqué : les données sont copiées sur plusieurs nœuds ou serveurs pour assurer la disponibilité et la tolérance aux pannes. Si un des nœuds tombe en panne, les données sont toujours disponibles sur un autre nœud. (par analogie, voyez ça comme un RAID1 sur réseau)
- Distribué + Répliqué : les données sont à la fois réparties sur plusieurs nœuds pour améliorer les performances et répliquées sur plusieurs nœuds pour assurer la disponibilité et la tolérance aux pannes. C'est une combinaison des avantages des systèmes distribués et répliqués pour offrir une solution de stockage haute disponibilité et à haute performance. (par analogie, voyez ça comme un RAID10 sur réseau)

GlusterFS est très flexible et peut être utilisé dans de nombreux environnements différents afin de stocker des fichiers de tout type, y compris des fichiers multimédias, des bases de données, des applications web.

Côté vocabulaire, on parlera de nœuds et de bricks :
- Les nœuds de stockage travaillent ensemble pour fournir un accès hautement disponible et scalable aux données stockées. Les données sont stockées sur les nœuds de stockage sous forme de bricks, qui peuvent être combinées pour former des volumes de stockage en réseau. Les utilisateurs peuvent accéder aux données stockées sur les nœuds de stockage en montant les volumes de stockage sur leurs systèmes clients.
- Les données sont stockées sur les bricks, qui peuvent être répliqués, distribués ou combinés pour former un volume GlusterFS.
- Les volumes GlusterFS peuvent être montés sur les systèmes clients pour une utilisation transparente et hautement disponible du stockage en réseau.
- Un brick est un sous-système de stockage unitaire composé d'un répertoire sur un nœud de stockage. Les bricks forment la base de la construction de systèmes de stockage distribués en réseau dans GlusterFS.

Ce tutoriel a été réalisé sur Alma Linux 9.

Prérequis



Contexte du tutoriel



Dans ce tutoriel, je vais utiliser 3 serveurs. Vous devez en avoir au moins 3 pour éviter le phénomène de split brain.

Notez que le split brain est un problème qui peut se produire lorsque deux ou plusieurs nœuds pensent tous être les seuls à avoir la version correcte des données, alors qu'ils ne peuvent pas communiquer entre eux pour synchroniser les données.
Cela peut se produire typiquement en cas de coupure réseau entre 2 nœuds. Si cela se produit, chaque nœud peut effectuer des modifications sur les données sans connaître l'existence des modifications effectuées sur les autres nœuds.
Lorsque les communications entre les nœuds sont rétablies, il peut y avoir une divergence des données, ce qui peut rendre nécessaire une intervention manuelle pour résoudre les conflits.

Dans le cas de GlusterFS avec 2 nœuds, si un nœud redémarre, le stockage du deuxième ne sera pas accessible. Il nous faut donc 3 serveurs.

Cependant, pour éviter d'avoir 3 fois les données stockées (car ça prend de la place), nous allons dans ce tutoriel paramétrer :
- 2 nœuds qui vont stocker les données
- 1 nœud "arbitre".

L'arbitre ne stockera que les noms de fichiers/répertoires (c'est-à-dire l'arborescence) et les attributs étendus (métadonnées) mais aucune donnée, c'est-à-dire que la taille du fichier (comme indiqué par ls -l) sera de zéro octet. Il stockera également d'autres métadonnées gluster comme le dossier .glusterfs et son contenu.

Ainsi, lorsqu'un nœud redémarre (qu'il stocke les données ou que ce soit l'arbitre) les données sont toujours accessibles et cohérentes.

Il est conseillé de faire dialoguer les nœuds ensemble sur un réseau (ou VLAN) dédié. Mais on peut faire sans.

Caractéristiques des serveurs



Nous disposons donc de 3 serveurs :

WEB01 : 192.168.21.108 (Serveur Web)
WEB02 : 192.168.21.102 (Serveur Web)
GLUSTER3 : 192.168.21.110 (Arbitre n'ayant pas de serveur Web)

Les serveurs WEB01 et WEB02 disposent d'un disque de 32Go (/dev/sdb) .
C'est sur ce disque que les données seront stockées et répliquées sur les nœuds.

Installation



Avant toute chose, assurez-vous que les 3 serveurs sont à jour :

Code BASH :
dnf upgrade


Ensuite sur les 3 serveurs, on va installer le dépôt EPEL + le paquet centos-release-gluster pour installer ces 2 dépôts :

Code BASH :
dnf install epel-release centos-release-gluster


Notez que les dépôts sont actifs une fois installés.
Sur EL9 le paquet centos-release-gluster10 sera installé
Sur EL8 le paquet centos-release-gluster9 sera installé

Sur les 3 serveurs, installez glusterfs-server :

Code BASH :
dnf install glusterfs-server


Configuration



Sur les 3 serveurs, éditez le fichier hosts et ajoutez les entrées des 3 serveurs :

Code BASH :
vi /etc/hosts


Code :
192.168.21.108  WEB01
192.168.21.103  WEB02
192.168.21.110  GLUSTER3


Démarrez le service glusterfs-server :

Code BASH :
systemctl enable --now glusterd


Si le parefeu est actif, ouvrez le service glusterfs :

Code BASH :
firewall-cmd --add-service=glusterfs --permanent
firewall-cmd --reload


Si SELinux est actif, il n'y a rien à faire

Sur les serveurs on va créer un point de montage /gluster pour y stocker les données :

Code BASH :
mkdir /gluster


Sur les serveurs qui contiennent les données, je vais monter notre disque additionnel qui va contenir les données :

Code BASH :
vi /etc/fstab 

Code :
UUID=62ec07d6-0686-4287-a92a-7d9725ce4469       /gluster        ext4    defaults        0 0


On monte le tout :
Code BASH :
mount -a


Cette étape de montage d'un volume séparé est facultative sur l'arbitre, puisqu'il ne contiendra que les métadonnées des fichiers qui n'occupent pas de place sur le disque.

Ensuite, on va créer un sous dossier sur nos 3 serveurs qui sera la racine du système de fichiers GlusterFS qui stockera nos données (ici pour un site web) :
Code BASH :
mkdir /gluster/www


Maintenant, on va initier la connexion entre les différents nœuds.
Les commandes suivantes ne sont à saisir sur sur 1 des 3 serveurs (Je me positionne sur WEB01) .

On va appairer les 2 autres serveurs :
Code BASH :
gluster peer probe WEB02
gluster peer probe GLUSTER3


Si tout se passe bien, les commandes retournent peer probe: succes.

On peut vérifier l'état avec la commande suivante :

Code BASH :
gluster peer status


Qui retourne :

Code :
Number of Peers: 2

Hostname: WEB02
Uuid: 73a836aa-428a-4696-927a-fda3f92e8bbf
State: Peer in Cluster (Connected)

Hostname: GLUSTER3
Uuid: 868527d7-ae0c-4635-aac6-cfe9e5d4c7c5
State: Peer in Cluster (Connected)


Maintenant que les 3 nœuds sont connectés, on va créer notre volume.
Voici la commande :

Code BASH :
gluster volume create wwwgfs replica 2 arbiter 1 transport tcp WEB01:/gluster/www WEB02:/gluster/www GLUSTER3:/gluster/www force


On notera que :
- wwwgfs est le nom du volume
- replica 2 arbiter 1 signifie que les données sont répliquées sur 2 nœuds et qu'on a un arbitre
- WEB01:/gluster/www WEB02:/gluster/www GLUSTER3:/gluster/www sont les emplacements où les données (ou métadonnées) seront stockées. Les 2 premiers stockent les données, le troisième est l'arbitre.

On démarre ensuite le volume :

Code BASH :
gluster volume start wwwgfs


Si tout se passe bien, la commande retourne volume start: wwwgfs: success

On peut avoir des infos sur le volume via la commande :

Code BASH :
gluster volume info


Qui retourne ceci dans notre cas :

Code :
Volume Name: wwwgfs
Type: Replicate
Volume ID: 81e05e44-6ded-4942-b778-aae79d416c14
Status: Started
Snapshot Count: 0
Number of Bricks: 1 x (2 + 1) = 3
Transport-type: tcp
Bricks:
Brick1: WEB01:/gluster/www
Brick2: WEB02:/gluster/www
Brick3: GLUSTER3:/gluster/www (arbiter)
Options Reconfigured:
cluster.granular-entry-heal: on
storage.fips-mode-rchecksum: on
transport.address-family: inet


Montage du volume GlusterFS



Evidemment, on va pas accéder aux données directement par le dossier /gluster/www !

On va sur chacun des serveurs monter ce volume dans le dossier de notre choix (ici dans /var/www/html)

Pour celà on modifie le fichier fstab :

Code BASH :
vi /etc/fstab 


Sur WEB01 :
Code :
WEB01:/wwwgfs    /var/www/html    glusterfs    defaults,_netdev,context="system_u:object_r:httpd_sys_rw_content_t:s0"    0 0


Sur WEB02 :
Code :
WEB02:/wwwgfs    /var/www/html    glusterfs    defaults,_netdev,context="system_u:object_r:httpd_sys_rw_content_t:s0"    0 0


Dans les options, on précisera :
- _netdev : Pour que le montage se fasse une fois le réseau opérationnel
- context="system_u:object_r:httpd_sys_rw_content_t:s0" : utilisant SELinux, j'ajoute le contexte SELinux qui correspond à un contenu accessible en lecture écriture pour un serveur Web. Si SELinux est désactivé chez vous, vous pouvez ne pas le mettre.

Puis on monte le volume GlusterFS :

Code BASH :
mount -a


Avec la commande df on peut vérifier que tout est bien monté :

Code :
Sys. de fichiers            Taille Utilisé Dispo Uti% Monté sur
devtmpfs                      4,0M       0  4,0M   0% /dev
tmpfs                         982M       0  982M   0% /dev/shm
tmpfs                         393M    5,5M  387M   2% /run
/dev/mapper/rootvg-rootlv     9,8G    1,5G  7,8G  16% /
/dev/sda1                     974M    197M  710M  22% /boot
/dev/sdb1                      32G     13M   30G   1% /gluster
/dev/mapper/rootvg-varloglv   974M    9,5M  897M   2% /var/log
/dev/mapper/rootvg-homelv    1014M     40M  975M   4% /home
tmpfs                         197M       0  197M   0% /run/user/0
WEB01:/wwwgfs                  32G    334M   30G   2% /var/www/html


Infos complémentaires pour cet exemple



J'ai récupéré le CMS PluXML. J'ai décompressé les fichiers dans /var/www/html.
Sur un de mes nœud on constate que le /gluster/www contient bien nos fichiers :

Code BASH :
ls -l /gluster/www/


Code :
total 140
-rw-r--r--. 2 apache root    56  1 août  20:37 config.php
drwxr-xr-x. 7 apache root  4096  1 août  20:37 core
drwxr-xr-x. 6 apache root  4096  1 août  20:37 data
-rw-r--r--. 2 apache root  1631  1 août  20:37 feed.php
-rw-r--r--. 2 apache root  3247  1 août  20:37 index.php
-rw-r--r--. 2 apache root 14905  1 août  20:37 install.php
-rw-r--r--. 2 apache root 35149  1 août  20:37 LICENSE
drwxr-xr-x. 2 apache root  4096  1 août  20:37 plugins
drwxr-xr-x. 2 apache root  4096  1 août  20:37 readme
-rw-r--r--. 2 apache root  4020  1 août  20:37 sitemap.php
drwxr-xr-x. 3 apache root  4096  1 août  20:37 themes


On notera que sur l'arbitre, les fichiers sont bien là mais n'occuppent aucune place :

Code :
total 72
-rw-r--r--. 2 48 root    0  1 août  20:37 config.php
drwxr-xr-x. 7 48 root 4096  1 août  20:37 core
drwxr-xr-x. 6 48 root 4096  1 août  20:37 data
-rw-r--r--. 2 48 root    0  1 août  20:37 feed.php
-rw-r--r--. 2 48 root    0  1 août  20:37 index.php
-rw-r--r--. 2 48 root    0  1 août  20:37 install.php
-rw-r--r--. 2 48 root    0  1 août  20:37 LICENSE
drwxr-xr-x. 2 48 root 4096  1 août  20:37 plugins
drwxr-xr-x. 2 48 root 4096  1 août  20:37 readme
-rw-r--r--. 2 48 root    0  1 août  20:37 sitemap.php
drwxr-xr-x. 3 48 root 4096  1 août  20:37 themes


Dans notre cas ici, on a 2 serveurs WEB. Lorsque les fichiers sont modifiés sur un serveur WEB, sont modifiés dans la foulée sur l'autre.

Pour compléter sur la haute disponibilité de cet exemple vous pouvez :
- Ajouter 2 entrées A sur le DNS pointant sur chaque serveur WEB
- Paramétrer une VIP avec Pacemaker et Corosync
Cette page a été vue 1910 fois