19 mars 2024

Tuto V.2018 : Partie IX, stockage de fichiers avec GlusterFS

EDIT :
Attention, je ne recommande plus l’usage de GlusterFS (problème de performance).
Du coup, je vous recommande mon article sur DRBD, HearBeat et NFS.

Neuvième partie du tutoriel sur la virtualisation Xen et OpenVswitch sont dans une Debian.
Notre architecture commence à prendre forme. Nous avons vu la mise en place du DNS dans la partie précédente.
Maintenant, nous allons résoudre le problème du stockage. Dans notre cas,  nous voulons quelque chose de redondant.
Nous allons utiliser GlusterFS, système assurant une haute disponibilité au niveau bloc. Vous allez voir, c’est « con comme la lune » comme on dit par chez moi…

I – Préparatifs

A – Création VMs

dom0# xen-create-image --hostname gluster1 --role debugo --size 5G --memory 1G--swap 1G --vcpus=1 --ip=99.99.99.99
dom0# xen-create-image --hostname gluster2 --role debugo --size 5G --memory 1G--swap 1G --vcpus=1 --ip=99.99.99.99

Vous remarquez que pour des machines sensées stocker des données, 5G de disque dur, cela risque de faire court. L’idée, c’est de mettre le stockage sur d’autres LVM, dédié à cela.
Pour GlusterFs, le système de fichier XFS est recommandée. On va donc installer ce qu’il faut sur l’hyperviseur

dom0#  apt-get install xfsprogs

Puis nous allons créer deux nouveaux LV dédiés au stockage (chacun sera rattaché à une vm gluster) :

dom0# lvcreate -L +100G -n gluster1xfs vg0
dom0# lvcreate -L +100G -n gluster2xfs vg0

Création du FS sur chacun :

dom0# mkfs.xfs /dev/vg0/gluster1xfs
dom0# mkfs.xfs /dev/vg0/gluster2xfs

Modifions maintenant le fichier de config /etc/xen/gluster1.cfg :

disk        = [
                  'phy:/dev/vg0/gluster1-disk,xvda2,w',
                  'phy:/dev/vg0/gluster1-swap,xvda1,w',
                  'phy:/dev/vg0/gluster1xfs,xvda3,w',]
...
vif         = [ 'vifname=gluster1.0,ip=10.20.1.51 ,mac=00:16:3E:A0:51:20,bridge=brint.20',
                'vifname=gluster1.1,ip=10.99.1.51 ,mac=00:16:3E:A0:51:99,bridge=brint.99']

Fichier /etc/xen/gluster2.cfg :

disk        = [
                  'phy:/dev/vg0/gluster2-disk,xvda2,w',
                  'phy:/dev/vg0/gluster2-swap,xvda1,w',
                  'phy:/dev/vg0/gluster2xfs,xvda3,w',]
...
vif         = [ 'vifname=gluster2.0,ip=10.20.1.52 ,mac=00:16:3E:A0:52:20,bridge=brint.20',
                'vifname=gluster2.1,ip=10.99.1.52 ,mac=00:16:3E:A0:52:99,bridge=brint.99']

Interfaces réseaux de gluster1 :

dom0# mount /dev/vg0/gluster1-disk /mnt/vm/
dom0# nano /mnt/vm/etc/network/interfaces

Collez cela :

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
 address 10.20.1.51
 netmask 255.255.255.0
auto eth1
iface eth1 inet static
 address 10.99.1.51
 netmask 255.255.255.0

Et démontez :

dom0# umount /mnt/vm

Interfaces réseaux de gluster2 :

dom0# mount /dev/vg0/gluster2-disk /mnt/vm/
dom0# nano /mnt/vm/etc/network/interfaces

Collez cela :

auto lo
iface lo inet loopback
auto eth0
iface eth0 inet static
 address 10.20.1.52
 netmask 255.255.255.0
auto eth1
iface eth1 inet static
 address 10.99.1.52
 netmask 255.255.255.0

Et démontez :

dom0# umount /mnt/vm

 

B – Ajout des VMs dans le DNS

On va maintenant ajouter ces deux vms dans le dns.
Connectez vous à la vm dns et modifiez les fichiers db.debugo.intra20, db.debugo.intra99 et db.debugo.intra.rev. Pensez à incrémenter vos sérials.
Rechargez avec :

dns# rndc reload

 

II – Installation Serveur Glusterfs

Retournons sur l’hyperviseur pour démarrer nos deux vms :

dom0# xen create /etc/xen/gluster1.cfg
dom0# xen create /etc/xen/gluster2.cfg

Sur les deux machines, faites ces manipulations à l’identique.
Création du point de montage :

glusterX# mkdir /stockage
glusterX# mount /dev/xvda3 /stockage/

Ajoutez le point de montage dans le fichier /etc/fstab :

/dev/xvda3 /stockage/ xfs rw,relatime,attr2,inode64,noquota

Puis création du répertoire GFS (glusterfs n’aime pas qu’on monte un point de montage directement en cluster).

glusterX# mkdir /stockage/gfs

On passe à l’installation du paquet, toujours sur nos deux VMs :

glusterX# apt-get intall glusterfs-server
glusterX# service glusterfs-server start

Puis sur le premier nœud :

gluster1# gluster peer probe 10.20.1.52

(Renseignez l’ip du second nœud)
Vérifiez avec cela sur les deux noeuds :

glusterX# gluster peer status

En cas d’erreur :

glusterX# gluster peer detach ADRESSEIP

On va maintenant créer le volume gfsvol au sein de GlusterFS

gluster1# gluster volume create gfsvol replica 2 10.20.1.51:/stockage/gfs 10.20.1.52:/stockage/gfs

On vérifie avec :

glusterX# gluster volume info

Le status est en created.
Ne reste plus qu’a démarrer le cluster :

gluster1# gluster volume start gfsvol

Regardez avec :

glusterX# gluster volume info

Le status est passé en started.
On va ajouter le réseau qu’on autorise :

gluster1# gluster volume set gfsvol auth.allow 10.20.1.\*

Vous pouvez avoir des infos sur le cluster avec cette commande également :

glusterX# gluster volume status

 

III – Client GlusterFS

Pour le Client, on va utiliser la machine Web crée pour le test du proxy interne :

dom0# ssh web

On créer le point de montage

web# mkdir /stockage

Ensuite, installez simplement le client gluster :

web# apt-get install glusterfs-client
mount -t glusterfs 10.20.1.51:/gfsvol /stockage

Rajoutons l’enregistrement dans /etc/fstab :

10.20.1.51:/gfsvol  /stockage    glusterfs       defaults,_netdev        0       0

Et maintenant, vous pouvez accéder à votre stockage.
Un df -h vous montrera l’espace dont vous disposez.
L’œil attentif remarquera que lorsque je monte le volume, je passe par l’IP du premier nœud…. Que se passe t’il s’il tombe ?
L’IP du second et la configuration du cluster sont automatiquement transmise au client lors de la connexion à ce même cluster.
Même si vous ne voyez que des références au premier nœud, ne vous en faites pas, s’il tombe, vos machines sauront ou aller…

IV – Tests

Testez en créant des fichiers, répertoires en passant par le client.
Coupez une machine, faites des modifs, redémarrez, tout doit être synchro de manière automatique.
Si ce n’est pas le cas :

glusterX# gluster volume heal info

 

V – Augmentation du stockage

Si vous devez agrandir votre stockage, stoppez une vm, redimensionnez le disque avec :

dom0# lvextend -L +100G /dev/vg0/gluster1xfs -r

L’option -r permet de redimensionner le File System dans la foulée.
Redémarrez la vm, vérifiez la synchro. Puis éteignez l’autre vm et :

dom0# lvextend -L +100G /dev/vg0/gluster2xfs -r

Puis redémarrez la seconde VM, vérifiez la synchro.
Vérifiez sur le client, l’espace a augmenté.

Maintenant, passons à la partie base de données SQL avec un cluster MariaDB avec Haproxy en amont.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *