GNU/Linux >> Tutoriales Linux >  >> Linux

Solucionar problemas de GlusterFS

Sección anterior - Pasos de compilación de GlusterFS

Este artículo describe dos problemas de GlusterFS que puede encontrar y brinda pasos para resolverlos:

  • Recuperación de volúmenes replicados
  • Solucionar un problema de cerebro dividido

Reparar volúmenes replicados

Cuando cualquier ladrillo en un volumen replicado se desconecta, el glusterd los demonios en los nodos restantes realizan un seguimiento de todos los archivos que no se replican en el ladrillo fuera de línea. Cuando el bloque fuera de línea vuelve a estar disponible, el clúster inicia un proceso de recuperación y replica los archivos actualizados en ese bloque. El inicio de este proceso puede demorar hasta 10 minutos, según la observación.

Puede ver información sobre qué archivos replicar ejecutando el siguiente comando:

 gluster volume heal volumeName info

Puede ver información sobre los archivos replicados durante el proceso de recuperación. También puede ver información sobre archivos modificados de forma independiente en el nodo fuera de línea (split-brain) o archivos que fallaron en la replicación por cualquier motivo. Agregue las siguientes opciones al comando anterior:

gluster volume heal volumeName info healed

gluster volume heal volumeName info heal-failed

gluster volume heal volumeName info split-brain

También puede forzar la curación manualmente invocando el siguiente comando. Si usa el argumento opcional full , todos los archivos que no están marcados como que necesitan reparación también se sincronizan.

gluster volume heal volumeName

Opcional:

gluster volume heal volumeName full

Solucionar un problema de cerebro dividido

Un cerebro dividido El problema ocurre cuando uno de los nodos replicados se desconecta (o se desconecta del clúster) y se actualiza un archivo en uno de sus ladrillos. Después de que el nodo se reincorpora al clúster de GlusterFS, el proceso de recuperación falla debido al conflicto causado por dos versiones diferentes del archivo.

En el siguiente ejemplo, este problema se activa manualmente y luego se soluciona. El nodo llamado gluster4 se desconecta y uno de los archivos almacenados en su bloque se modifica:

[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)

Ahora se activa el proceso de curación:

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

Observe que el testfile.txt aparece en la lista, lo que significa que GlusterFS no sabe qué versión del archivo es la correcta. Es importante solucionar este problema porque puede confundir a los clientes y hacer que se bloqueen.

Cada ladrillo GlusterFS tiene una carpeta oculta, glusterfs , que contiene un ID de GlusterFS hexadecimal (GFID) de cada archivo como un enlace codificado. En nuestro ejemplo, gluster4 es una réplica del nodo gluster1. El siguiente ejemplo muestra los GFID de testfile.txt en gluster1 y 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

En uno de los nodos, el archivo en sí, así como el archivo GFID asociado (en este caso, a702251d-e4c5-47e2-ba2f-96b896a43718), deben eliminarse del montaje subyacente. Solo entonces se puede desencadenar de nuevo el proceso de curación. Es fundamental comprender qué copia del archivo desea guardar. Si es posible, guarde una copia completa del archivo en una ubicación fuera de GlusterFS, elimine el archivo de todos los nodos, active un proceso de reparación y vuelva a copiar el archivo sobre el punto de montaje. Este método es más de fuerza bruta, pero funciona si el proceso de reparación aún no puede corregir correctamente el archivo a través de la replicación.

[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

Siguiente sección - GlusterFS HA ​​y equilibrio de carga


Linux
  1. ¿Encontrar archivos duplicados?

  2. ¿Excluir directorio en Buscar?

  3. ¿Por qué Nullglob no es predeterminado?

  4. Solucionar problemas de SSH

  5. ¿Escribir en un archivo .txt?

Comando rm en Linux

Comando Mv en Linux

CÓMO UTILIZAR EL COMANDO DE COLA

Cómo usar el comando principal

Openssl generando Sha-256?

Ejemplos de comandos diff de Linux