Glusters

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

Laisser un commentaire

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.