En esta entrada voy a explicar como crear un Cluster de GlusterFS de 4 nodos, creando un volumen replicado distribuido, o bien un replicado (2×4 o 4×4)

Primeros pasos – Instalación de servicios y preparación entorno

Suponemos un entorno en el que disponemos de 4 nodos, los cuales vamos a llamar mi-nodo1.acens.net, mi-nodo2.acens.net, mi-nodo3.acens.net y mi-nodo4.acens.net.

El primer paso consiste en la instalación de los repositorios y servicios necesarios para desplegar GlusterFS. Este paso se debe realizar en TODOS los nodos.

rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY*
yum -y install epel-release
yum -y install centos-release-gluster
yum -y install glusterfs-server

Seguidamente, debemos comprobar la conectividad entre ambos servidores, si se utiliza direccionamiento privado, no habrá problemas, en caso de usar direccionamiento público y existir firewall entre medias, es necesario habilitar los puertos TCP 111 y 24007-24100.

Una vez comprobada la configuración, estableceremos en el fichero hosts una relación de los nodos y sus IPs. Puede realizarse este paso a nivel de DNS, pero como se entiende que el almacenamiento se realizará en direccionamiento privado, usaremos el fichero hosts.

Para el ejemplo:

192.168.0.1 mi-nodo1.acens.net
192.168.0.2 mi-nodo2.acens.net
192.168.0.3 mi-nodo3.acens.net
192.168.0.4 mi-nodo4.acens.net

Este paso deberá realizarse en todos los nodos.

Por último, desactivamos SELinux y levantamos los servicios en todos los nodos:

service glusterd start
chkconfig glusterd on

Conformación del Cluster o Trusted Storage Pool

El siguiente paso consiste en incluir en nuestro Cluster todos los nodos. Este paso se realizará SOLO en uno de los nodos, el cual será nuestro nodo “maestro” en la práctica (pese a que no existe nodo maestro en GlusterFS)

gluster peer probe mi-nodo2.acens.net
gluster peer probe mi-nodo3.acens.net
gluster peer probe mi-nodo4.acens.net

Si todo ha ido bien, deberíamos ver los tres nodos activos desde nuestro nodo “maestro” con los comandos:

gluster peer status
gluster pool list

De fallar alguno, muy probablemente sea debido a SELinux no desactivado correctamente, o bien por problemas de conectividad/Firewall.

Creación del volumen

Tras conformar el clúster y la relación de confianza, podemos comenzar el despliegue de un volumen a partir de “bricks”, o carpetas del filesystem de cada servidor.

La creación del volumen se realiza a partir de estos bricks de cada servidor, por lo que los bricks pueden estar ubicados en una partición concreta, en la raíz, en un volumen LVM, etc.

Este paso se debe realizar SOLO en un nodo, ya sea el “maestro” u otro.

En el ejemplo, suponemos que disponemos de una partición LVM montada en /datos en todos los servidores, por lo que vamos a desplegar los brick en /datos/brick

gluster volume create my_volumen replica 4 transport tcp mi-nodo1.acens.net:/datos/brick mi-nodo2.acens.net:/datos/brick mi-nodo3.acens.net:/datos/brick mi-nodo4.acens.net:/datos/brick force

Con el comando de arriba, crearemos un volumen replicado “my_volumen” en base a los 4 bricks de cada nodo, y establecemos una réplica de 4, es decir, cada nodo tendrá los datos replicados.

Si quisiésemos crear almacenamiento distribuido replicado, cambiaríamos la réplica a 2, por lo que los datos se distribuirían 2×2, es decir, cada pareja de nodos se distribuirían los datos como si de un RAID 0 se tratase.

gluster volume create my_volumen replica 2 transport tcp mi-nodo1.acens.net:/datos/brick mi-nodo2.acens.net:/datos/brick mi-nodo3.acens.net:/datos/brick mi-nodo4.acens.net:/datos/brick force

Una vez creado el volumen, hay varios aspectos a tener en cuenta, y son, el acceso a dicho volumen desde IPs que no conformen el cluster (por ejemplo, nodos que no queremos que tengan copia pero accedan al volumen)

gluster volume set my_volumen auth.allow 192.168.0.*


Y el Timeout del volumen ante caídas de un nodo, es decir, el timeout que se establece para que se compruebe la “salud” de los nodos ante caídas:

gluster volume set my_volumen network.ping-timeout 5


Con esto, ante una caída, el volumen se reconformará en base a los nodos disponibles en 5 segundos.

Inicialización del volumen y montaje

Una vez el volumen está listo, lo levantaremos con:

gluster volume start my_volumen

Una vez el volumen está levantado, comprobaremos su estado con el comando:

gluster volume info

Si todo ha ido bien, el volumen estará listo, los bricks estarán generados en cada nodo, y estaremos preparados para montar este volumen como si de un NFS se tratase.

Podemos montar este volumen en nuestros cuatro nodos que conforman el cluster, para que sea usado por ellos, y también podemos montarlo en máquinas “cliente” que no conformen el cluster “activamente”.

Para el primer caso, lo realizaremos mediante el siguiente comando, montándolo en la ruta /mnt/glusterfs que previamente hemos creado:

mkdir /mnt/glusterfs
mount.glusterfs mi-nodo1.acens.net:/my_volumen /mnt/glusterfs

Realizaremos este paso en todos los nodos, con la misma sintaxis (Sin cambiar nada). No os preocupéis porque se monte en base a “mi-nodo1.acens.net”. En caso de caída de mi-nodo1.acens.net, el volumen sigue siendo disponible y pasará a estar montado en base a mi-nodo2.acens.net o cualquiera de los otros tres.

Si queremos montarlo en una máquina cliente, el proceso es el mismo, pero previamente debemos instalar el cliente “gluster”:

yum -y install glusterfs-client

Por último, quedaría configurar el arranque para que se monte el volumen automáticamente, para ello, y como para montar el volumen es necesario el binario de glusterfs, no utilizaremos fstab, sino /etc/rc.local.

Editaremos /etc/rc.local y añadiremos la siguiente línea:

/usr/sbin/mount.glusterfs mi-nodo1.acens.net:/my_volumen /mnt/glusterfs

Con esto, tendremos conformado nuestro Gluster FS, ya sea 2 a 2 o 4 a 1 y listo para ser usado como almacenamiento compartido.

Como información adicional, os dejo los comandos para parar y borrar un volumen:

gluster volume stop my_volumen
gluster volume delete my_volumen

2 comentarios

isma · 08/02/2019 a las 9:51 pm

Holi!
¿es necesario para que funcione que la identificación de los otros nodos que se hace en el archivo hosts se corresponda con el hostname de la máquina?
thx!

    Daniel · 16/02/2019 a las 7:05 pm

    Hola Ismael! La validación se realiza a nivel de DNS y hostname, por lo que el fichero host debe configurarse igual salvo que dispongamos de entradas A que resuelvan los hostname.

    Un helado de vounilla y un saludo!

Deja una respuesta

Marcador de posición del avatar

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *