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.