Cómo realizar operaciones de autocuración y reequilibrio en el sistema de archivos Gluster - Parte 2


En mi artículo anterior sobre "Introducción a GlusterFS (Sistema de archivos) e instalación - Parte 1", fue solo una breve descripción general del sistema de archivos y sus ventajas, describiendo algunos comandos básicos. Vale la pena mencionar las dos características importantes, Self-Heal y Re-Balance, en este artículo sin las cuales la explicación sobre GlusterFS no será de utilidad. Familiaricémonos con los términos Autocuración y Reequilibrio.

Esta función está disponible para volúmenes replicados. Supongamos que tenemos un volumen replicado [recuento mínimo de réplicas 2]. Suponga que debido a algunas fallas, uno o más ladrillos entre los ladrillos de réplica caen por un tiempo y el usuario elimina un archivo del punto de montaje que se verá afectado solo en el ladrillo en línea.

Cuando el bloque fuera de línea se conecte en un momento posterior, es necesario eliminar ese archivo de este bloque, es decir, se debe realizar una sincronización entre los ladrillos de réplica denominada recuperación. Lo mismo ocurre con la creación/modificación de archivos en bloques sin conexión. GlusterFS tiene un demonio de autocuración incorporado para solucionar estas situaciones cada vez que los ladrillos se conectan.

Considere un volumen distribuido con solo un ladrillo. Por ejemplo, creamos 10 archivos en el volumen a través del punto de montaje. Ahora todos los archivos residen en el mismo bloque, ya que solo hay un bloque en el volumen. Al agregar un bloque más al volumen, es posible que tengamos que reequilibrar el número total de archivos entre los dos bloques. Si un volumen se expande o se reduce en GlusterFS, los datos deben reequilibrarse entre los distintos ladrillos incluidos en el volumen.

Realización de autocuración en GlusterFS

1. Cree un volumen replicado con el siguiente comando.

$ gluster volume create vol replica 2 192.168.1.16:/home/a 192.168.1.16:/home/b

Nota: La creación de un volumen replicado con ladrillos en el mismo servidor puede generar una advertencia por la que debe continuar ignorando la misma.

2. Inicie y monte el volumen.

$ gluster volume start vol
$ mount -t glusterfs 192.168.1.16:/vol /mnt/

3. Cree un archivo desde el punto de montaje.

$ touch /mnt/foo

4. Verifique lo mismo en dos réplicas de ladrillos.

$ ls /home/a/
foo
$ ls /home/b/
foo

5. Ahora envíe uno de los ladrillos fuera de línea matando el demonio glusterfs correspondiente utilizando el PID obtenido de la información de estado del volumen.

$ gluster volume status vol
Status of volume: vol
Gluster process					Port	Online	Pid 
------------------------------------------------------------------------------ 
Brick 192.168.1.16:/home/a			49152	  Y	3799 
Brick 192.168.1.16:/home/b			49153	  Y	3810 
NFS Server on localhost				2049	  Y	3824 
Self-heal Daemon on localhost			N/A	  Y	3829

Nota: Vea la presencia de un demonio de recuperación automática en el servidor.

$ kill 3810
$ gluster volume status vol
Status of volume: vol 
Gluster process					Port	Online	Pid 
------------------------------------------------------------------------------ 
Brick 192.168.1.16:/home/a			49152	  Y	3799 
Brick 192.168.1.16:/home/b			N/A	  N	N/A 
NFS Server on localhost				2049	  Y	3824 
Self-heal Daemon on localhost			N/A	  Y	3829

Ahora el segundo ladrillo está desconectado.

6. Elimine el archivo foo del punto de montaje y verifique el contenido del ladrillo.

$ rm -f /mnt/foo
$ ls /home/a
$ ls /home/b
foo

Verá que foo todavía está allí en el segundo ladrillo.

7. Ahora vuelva a poner el ladrillo en línea.

$ gluster volume start vol force
$ gluster volume status vol
Status of volume: vol 
Gluster process					Port	Online	Pid 
------------------------------------------------------------------------------ 
Brick 192.168.1.16:/home/a			49152	  Y	3799 
Brick 192.168.1.16:/home/b			49153	  Y	4110 
NFS Server on localhost				2049	  Y	4122 
Self-heal Daemon on localhost			N/A	  Y	4129

Ahora el ladrillo está en línea.

8. Verifique el contenido de los ladrillos.

$ ls /home/a/
$ ls /home/b/

El daemon de autocuración ha eliminado el archivo del segundo bloque.

Nota: En el caso de archivos más grandes, la operación de autocuración puede tardar un poco en realizarse correctamente. Puede verificar el estado de curación usando el siguiente comando.

$ gluster volume heal vol info

Realización de reequilibrio en GlusterFS

1. Cree un volumen distribuido.

$ gluster create volume distribute 192.168.1.16:/home/c

2. Inicie y monte el volumen.

$ gluster volume start distribute
$ mount -t glusterfs 192.168.1.16:/distribute /mnt/

3. Cree 10 archivos.

$ touch /mnt/file{1..10}
$ ls /mnt/
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9

$ ls /home/c
file1  file10  file2  file3  file4  file5  file6  file7  file8  file9

4. Agregue otro ladrillo al volumen distribuir .

$ gluster volume add-brick distribute 192.168.1.16:/home/d
$ ls /home/d

5. Vuelva a equilibrar.

$ gluster volume rebalance distribute start

volume rebalance: distribute: success: Starting rebalance on volume distribute has been successful.

6. Verifique el contenido.

$ ls /home/c
file1  file2  file5  file6  file8 

$ ls /home/d
file10  file3  file4  file7  file9

Los archivos se han vuelto a equilibrar.

Nota: Puede verificar el estado de reequilibrio emitiendo el siguiente comando.

$ gluster volume rebalance distribute status
Node           Rebalanced-files     size          scanned    failures    skipped   status	run time in secs 
---------      -----------          ---------     --------   ---------   -------   --------     ----------------- 
localhost          5                0Bytes           15          0         0       completed         1.00 
volume rebalance: distribute: success:

Con esto planeo concluir esta serie sobre GlusterFS. No dude en comentar aquí sus dudas con respecto a las funciones Self-Heal y Re-Balance.