Section précédente - Étapes de construction de GlusterFS
Cet article décrit deux problèmes GlusterFS que vous pourriez rencontrer et fournit des étapes pour les résoudre :
- Réparation des volumes répliqués
- Résoudre un problème de cerveau divisé
Réparer les volumes répliqués
Lorsqu'une brique d'un volume répliqué est déconnectée, le glusterd
les démons sur les nœuds restants gardent une trace de tous les fichiers non répliqués sur la brique hors ligne. Lorsque la brique hors ligne redevient disponible, le cluster lance un processus de réparation, en répliquant les fichiers mis à jour sur cette brique. Le démarrage de ce processus peut prendre jusqu'à 10 minutes, selon l'observation.
Vous pouvez afficher des informations sur les fichiers à répliquer en exécutant la commande suivante :
gluster volume heal volumeName info
Vous pouvez afficher des informations sur les fichiers répliqués pendant le processus de réparation. Vous pouvez également afficher des informations sur les fichiers modifiés indépendamment sur le nœud hors ligne (split-brain) ou sur les fichiers dont la réplication a échoué pour une raison quelconque. Ajoutez les options suivantes à la commande précédente :
gluster volume heal volumeName info healed
gluster volume heal volumeName info heal-failed
gluster volume heal volumeName info split-brain
Vous pouvez également forcer la guérison manuellement en appelant la commande suivante. Si vous utilisez l'argument optionnel full
, tous les fichiers qui ne sont pas marqués comme devant être réparés sont également synchronisés.
gluster volume heal volumeName
Facultatif :
gluster volume heal volumeName full
Résoudre un problème de split-brain
Un esprit divisé Le problème se produit lorsque l'un des nœuds répliqués se déconnecte (ou est déconnecté du cluster) et qu'un fichier sur l'une de ses briques est mis à jour. Une fois que le nœud a rejoint le cluster GlusterFS, le processus de guérison échoue en raison du conflit causé par deux versions différentes du fichier.
Dans l'exemple suivant, ce problème est déclenché manuellement puis résolu. Le nœud appelé gluster4
est déconnecté, et un des fichiers stockés sur sa brique est modifié :
[root@gluster1 ~]# cat /mnt/gluster/gvol0/testfile.txt
This is version 1 of the file
[root@gluster4 ~]# ifdown eth2
##Wait just a little bit for the other nodes to see it disconnected
[root@gluster1 ~]# gluster peer status | grep -A2 glus4
Hostname: glus4
Uuid: 734aea4c-fc4f-4971-ba3d-37bd5d9c35b8
State: Peer in Cluster (Disconnected)
[root@gluster4 ~]# echo "This is new content" >> /var/lib/gvol0/brick4/testfile.txt
[root@gluster4 ~]# cat /var/lib/gvol0/brick4/testfile.txt
This is version 1 of the file
This is new content
[root@gluster1 ~]# cat /mnt/gluster/gvol0/testfile.txt
This is version 1 of the file
[root@gluster4 ~]# ifup eth2
##Wait just a little bit for the other nodes to see it reconnected
[root@gluster1 ~]# gluster peer status | grep -A2 glus4
Hostname: glus4
Uuid: 734aea4c-fc4f-4971-ba3d-37bd5d9c35b8
State: Peer in Cluster (Connected)
Maintenant, le processus de guérison est déclenché :
gluster volume heal gvol0 full
gluster volume heal gvol0 info split-brain
Gathering list of split brain entries on volume gvol0 has been successful
Brick glus1:/var/lib/gvol0/brick1
Number of entries: 1
at path on brick
-----------------------------------
2014-05-16 19:55:19 /testfile.txt
Brick glus2:/var/lib/gvol0/brick2
Number of entries: 0
Brick glus3:/var/lib/gvol0/brick3
Number of entries: 0
Brick glus4:/var/lib/gvol0/brick4
Number of entries: 0
[root@gluster1 ~]# cat /mnt/gluster/gvol0/testfile.txt
cat: /mnt/gluster/gvol0/testfile.txt: Input/output error
[root@gluster4 ~]# cat /mnt/gluster/gvol0/testfile.txt
cat: /mnt/gluster/gvol0/testfile.txt: Input/output error
Notez que le testfile.txt Le fichier est répertorié, ce qui signifie que GlusterFS ne sait pas quelle version du fichier est la bonne. Il est important de résoudre ce problème car il peut dérouter les clients et les faire planter.
Chaque brique GlusterFS a un dossier caché, glusterfs , qui contient un ID GlusterFS hexadécimal (GFID) de chaque fichier sous forme de lien codé en dur. Dans notre exemple, gluster4 est une réplique du nœud gluster1. L'exemple suivant montre les GFID de testfile.txt sur gluster1 et gluster4 :
[root@gluster1 ~]# getfattr -m . -d -e hex /var/lib/gvol0/brick1/testfile.txt
# file: var/lib/gvol0/brick1/testfile.txt
trusted.afr.gvol0-client-0=0x000000000000000000000000
trusted.afr.gvol0-client-1=0x000000000000000000000000
trusted.afr.gvol0-client-2=0x000000000000000000000000
trusted.afr.gvol0-client-3=0x000000000000000000000000
trusted.gfid=0xa702251de4c547e2ba2f96b896a43718
[root@gluster4 ~]# getfattr -m . -d -e hex /var/lib/gvol0/brick4/testfile.txt
# file: var/lib/gvol0/brick4/testfile.txt
trusted.afr.gvol0-client-0=0x000000000000000000000000
trusted.afr.gvol0-client-1=0x000000000000000000000000
trusted.afr.gvol0-client-2=0x000000000000000000000000
trusted.afr.gvol0-client-3=0x000000000000000000000000
trusted.gfid=0xa702251de4c547e2ba2f96b896a43718
Sur l'un des nœuds, le fichier lui-même, ainsi que le fichier GFID associé (dans ce cas, a702251d-e4c5-47e2-ba2f-96b896a43718), doivent être supprimés du montage sous-jacent. Ce n'est qu'alors que le processus de guérison peut être déclenché à nouveau. Il est essentiel de comprendre quelle copie du fichier vous souhaitez enregistrer. Si possible, enregistrez une copie complète du fichier dans un emplacement en dehors de GlusterFS, supprimez le fichier de tous les nœuds, déclenchez un processus de réparation et recopiez le fichier sur le point de montage. Cette méthode est plus brutale, mais elle fonctionne si le processus de guérison ne parvient toujours pas à réparer correctement le fichier via la réplication.
[root@gluster4 ~]# rm -vf /var/lib/gvol0/brick1/.glusterfs/a7/02/a702251d-e4c5-47e2-ba2f-96b896a43718
[root@gluster4 ~]# rm -vf /var/lib/gvol0/brick1/testfile.txt
[root@gluster4 ~]# gluster volume heal gvol0 full
[root@gluster1 ~]# cat /var/lib/gvol0/brick1/testfile.txt
This is version 1 of the file
[root@gluster4 ~]# cat /var/lib/gvol0/brick4/testfile.txt
This is version 1 of the file
Section suivante - GlusterFS HA et équilibrage de charge