Table des matières

Récupération GlusterFS suite à la perte d'un brick

Cette page indique comment remettre en service un volume GlusterFS suite à la perte d'un node.

Situation initiale:

Il faut donc re-créer des volume, et réintégrer ce node défectueux au cluster, en étant sûr du sens de la synchronisation.

Couper les process gGluster sur le node en défaut

Pour éviter les mauvaise surprises, il faut arrêter tous les processus glusterd, et glusterfsd sur le node en défaut.

Restaurer /var/lib/glusterfs

La première étape est de restaurer le contenu du répertoire /var/lib/glusterfs si nécessaire (ce répertoire devrait toujours être sauvegardé, la procédure est plus complexe si sont contenu est perdu)

Noter l'ID du volume GlusterFS depuis le bon node

Sur le bon node, il faut récupérer l'ID du volume GlusterFS. En utilisant la commande getfattr. Dans cet exemple, le point de montage du brick est /mnt/bricks/vmstore. La commande est

getfattr -d -e hex -m. /mnt/bricks/vmstore

C'est la valeur de l'attribut trusted.glusterfs.volume-id qui nous intéresse ici

Recréer des volumes vierges sur le mauvais node

Sur le node en défaut, on peut jeter notre pool Thin et le recréer, puis recréer les volumes vides, et les formater

lvremove vg_data/vmstore
lvremove vg_data/pool
lvcreate --thin -L13T vg_data/pool
lvcreate --thin -V10T -n vmstore vg_data/pool
mkfs.xfs -L VMSTORE -i size=512 /dev/vg_data/vmstore

Puis, on remonte ces FS au même endroit qu'avant l'incident

Restaurer les attributs étendus

Sur le node en défaut, on restaure les attributs étendus utilisé par GlusterFS

setfattr -n trusted.glusterfs.volume-id -v 0x7ed967f13b3346d789080bb78c6e9199 /mnt/bricks/vmstore
setfattr -n trusted.gfid -v 0x00000000000000000000000000000001 /mnt/bricks/vmstore
Ici on utilise la valeur récupérée précédemment sur le bon node

Forcer la sélection du bon node comme source

Pour s'assurer que le bon node sera utilisé comme source de synchro, on va faire des modification au dessus du point de montage GlusterFS. Dans cet exemple, le volume est monté sur /var/lib/libvirt/images

mkdir /var/lib/libvirt/images/xxxx
rmdir /var/lib/libvirt/images/xxxx
setfattr -n trusted.non-existent-key -v abc /var/lib/libvirt/images/
setfattr -x trusted.non-existent-key /var/lib/libvirt/images/

Redémarrer glusterd sur le node en défaut

On peut maintenant relancer glusterd sur le node en défaut, il devrait se reconnecter automatiquement et commencer le heal