Bonjour à tous,
Aujourd’hui, nous allons nous intéresser au stockage et plus précisément au stockage distribué ou parallèle..
Alors, kezako le stockage distribué et bien pour faire simple (c’est une image), c’est un peu comme si vous aviez un raid mais avec vos disques se trouvant un peu partout dans votre entreprise ou en dehors de celle-ci.
Votre système ne voyant qu’un seul disque mais avec une très forte résilience aux pannes physiques et logiques.
Je vous renvoie à la définition de Wikipédia concernant Gluster et le stockage parallèle.
https://fr.wikipedia.org/wiki/GlusterFS
J’ai longuement hésité avant de faire cet article car il n’est pas forcément évident d’en comprendre le fonctionnement ses atouts et ses faiblesses.
Il est possiblement déroutant de se faire à l’idée d’avoir un volume de monté sur sa machine (mais pas que) dont le fonctionnement est reparti sur un ensemble de serveurs.
A la suite de cette présentation et installation de Gluster un autre article verra le jour concernant Scalio de Dell, c’est un peu dans le même registre avec des trucs assez sympas.
De quoi avons nous besoin pour mettre en place Gluster ?
De trois vm (quorum) ou serveurs, de deux disques et d’une connexion réseau à minima.
Pour le dimensionnement des vm, du basique,
1vcpu, 1Gio de ram et deux disques de 8gio chacun.
Pour l’OS, Ubuntu dans sa dernière version LTS, la 20.
Le réseau sera le suivant 172.20.255.0 (J’utilise un vlan spécifique)
La nomenclature des vm se fera de cette manière,
- glusterfs-1 >> 172.20.255.40
- glusterfs-2 >> 172.20.255.41
- glusterfs-3 >> 172.20.255.42
Cette première partie fera appel à de la virtualisation mais dans la seconde partie, nous utiliserons ce tuto pour déployer une architecture parallèle basique dans le cloud.
Je ne vais pas m’intéresser à la mise en place des vm et passer directement à l’installation de Gluster.
1 – Préparation des vm
Pour bien commencer, il faudra bien vérifier que les vm puissent bien communiquer entre elles, résolution de nom compris.
Soit en modifiant le fichier hosts soit en ayant votre propre DNS interne.
Même si j’ai mon propre resolver, j’ai quand même choisi la méthode du fichier hosts.
Voici comment le configurer correctement, à faire sur chaque fichier hosts.
Pour glusterfs-1 :
Pour glusterfs-2 :
Et ainsi de suite pour chaque node.
A la suite de ça, je vous conseille de générer une clé ssh sur chacune de vos vm, les clés ainsi générées seront à partager sur chaque vm gluster, il faudra ensuite s’assurer du bon fonctionnement de la connexion ssh via ces mêmes clés.
2 – Installation de Glusterfs
Alors à la date de l’article, la version utilisée dans les repos Ubuntu est la 7.2 (7.6 sur le ftp de Gluster).
sudo apt install glusterfs-common glusterfs-server
Il faudra démarrer le service et le rendre permanent.
sudo systemctl start glusterd.service && sudo systemctl enable glusterd.service
On vérifie que le service est bien lancé.
systemctl status glusterd.service
3 – Création d’un probe
Il faut savoir que je peux mettre en place un probe de n’importe quel node (vm/serveur).
Pour bien faire, je vais lancer l’exécution des commandes depuis le 1er node, glusterfs-1.
La commande de base est la suivante : gluster peer
Ajoutons donc les nodes.
gluster peer probe glusterfs-2
gluster peer probe glusterfs-3
Vous devriez obtenir un retour comme sur la capture suivante.
Il est possible de lancer la commande avec une adresse ip en lieu et place d’un nom d’hôte.
Il faudra répéter l’opération pour chaque node.
On peut maintenant voir le statut de notre « cluster » avec la commande
gluster peer status
Vous pouvez vous faire une idée de la chose en observant les captures.
Une chose qui peut dérouter c’est le nombre de « Peers »
Il faudra à chaque fois retrancher la machine d’exécution de la commande (ici glusterfs-1) du total des nodes, ici 3 machines donc peers = 2
Pour supprimer un node, rien de plus simple avec la commande gluster peer et l’option « detach » + ip ou nom d’hôte.
gluster peer detach glusterfs-2
4 – Volume Gluster
Nous allons maintenant créer notre replica avec nos nodes et la commande gluster volume.
Si vous décidez d’utiliser un répertoire dans le home de l’utilisateur root, il vous faudra utiliser l’option force à la fin de la commande.
Pour comprendre la commande, gfvol0 est le nom que je veux donner au volume (un peu comme avec lvm2).
Replica correspond au nombre de nodes que je veux utiliser.
Le reste étant le chemin du dossier.
sudo gluster volume create gfvol0 replica 3 glusterfs-1:/export/sdb1/brick glusterfs-2:/export/sdb1/brick glusterfs-3:/export/sdb1/brick
Voila le message que vous allez avoir en lançant la commande ci-dessus
volume create: glvol0 : failed: The brick glusterfs-1:/home/gluster/gluster_partage is being created in the root partition. It is recommended that you don’t use the system’s root partition for storage backend. Or use ‘force’ at the end of the command if you want to override this behavior.
Pour éviter cela, on va utiliser notre deuxième partition.
Commençons par la créer
sudo fdisk /dev/sdb
On va la formater en XFS
sudo mkfs.xfs -i size=512 /dev/sdb1
Mise en place de la partie fstab
echo "/dev/sdb1 /export/sdb1 xfs defaults 0 0" >> /etc/fstab
On met en place les dossiers correspondants à notre fstab qui serviront à notre montage volume
mkdir -p /export/sdb1 && mount -a && mkdir -p /export/sdb1/brick
On peut passer maintenant à la mise en place de notre replica avec la commande que nous avons pu voir plus haut.
gluster volume create gfvol0 replica 3 glusterfs-1:/export/sdb1/brick glusterfs-2:/export/sdb1/brick glusterfs-3:/export/sdb1/brick
On vérifie que l’opération se soit bien déroulée avec la commande suivante.
gluster volume info
Vous devriez obtenir ceci à un détail près, la partie auth.allow.
Cette ligne signifie que j’ai autorisé certains réseaux à accéder à mon replica.
Allez dans la partie TIPS en fin de tuto pour connaître la procédure.
On peut donc maintenant démarrer notre volume gluster gfvol0
gluster volume start gfvol0
5 – La partie client
Oui, je ne l’avais pas précisé au début de l’article mais il vous faudra mettre en place un client avec GUI ou pas.
Pour changer un peu, j ‘ai pris une distribution Fedora 31.
La seule chose à changer sera l’ajout dans Iptables des IP de vos serveurs.
Pour commencer il faudra installer le client gluster, ici, sous Fedora, ça donne ceci (il trouvera seul la version client):
yum install glusterfs-client
Ensuite, il vous faudra mettre en place un dossier sur lequel le point de montage se fera.
Pour moi se sera /home/techwire/partage.
Restera ensuite à monter le volume avec la commande suivante
mount -t glusterfs glusterfs-1:/gfvol0 /home/techwire/partage
glusterfs étant le filesyteme
glusterfs-1, le node principal (il faudra renseigner le hosts du client avec les nodes du replica).
gfvol0 étant le nom du volume du replica, voir plus haut.
Vous devriez obtenir ceci avec la commande df.
Et voila, vous pouvez vous amuser à couper un de vos nodes et d’écrire sur le client, le volume sera toujours up et fonctionnel et les fichiers seront présents dans vos deux nodes restants.
Rallumez celui éteint et les fichiers apparaîtront aussi sur celui-ci (ça peu prendre du temps en fonction du réseau, du poids des fichiers et de leurs nombres).
Voila, c est la fin de ce tuto concernant Glusterfs, à bientôt, je l’espère.
Tips
Tips 1 : Si vous rencontrez des soucis lors de l’attachement des nodes, il faudra procéder à la séparation des nodes avec la commande peer detach et vérifier avec la commande peer status que 0 peers s’affiche bien.
TIPS 2 : Pour autoriser une IP ou une plage IP à se connecter à notre stockage, il vous suffira de taper cette commande et de rajouter l’IP ou la plage IP à la fin de la commande.
gluster volume set gfvol0 auth.allow
Tips : 3
Si vous voulez tester, vous pouvez lancer la commande suivante sur le client et couper l’un des nodes, il faudra un peu de temps mais le client va poursuivre le bench. au redémarrage du node coupé, celui-ci affichera le fichier du bench.
dd if=/dev/zero of=/home/techwire/partage/bench.img bs=1G count=2 oflag=dsync