GlusterFS es un sistema de archivos distribuido que agrupa directorios de varios servidores (llamados bricks) en un único volumen accesible por red. Con un volumen replicado, cada archivo se guarda en varios servidores, de modo que los clientes siguen leyendo y escribiendo aunque uno de ellos caiga. En este tutorial crearás un volumen con réplica 3 en tres servidores Ubuntu 24.04, lo montarás desde un cliente y comprobarás cómo se recupera tras la caída de un nodo.
Requisitos previos
- Tres servidores con Ubuntu 24.04 LTS en la misma red privada, por ejemplo VPS de CubePath. En esta guía se llaman
gluster1,gluster2ygluster3, con las IP10.0.0.21,10.0.0.22y10.0.0.23. - En cada servidor, un disco adicional para los datos (en los ejemplos,
/dev/vdb). Puedes usar un directorio del disco del sistema para pruebas, pero no es recomendable en producción. - Un cuarto servidor Ubuntu 24.04 que actuará como cliente (
10.0.0.30). - Un usuario no root con privilegios
sudoen todos los servidores.
Conceptos que usarás:
| Término | Significado |
|---|---|
| Brick | Directorio de un servidor que forma parte de un volumen |
| Trusted pool | Grupo de servidores GlusterFS que confían entre sí |
| Volumen replicado | Cada archivo se copia en todos los bricks de un conjunto de réplica |
| Self-heal | Proceso que copia a un brick los cambios que se perdió mientras estaba caído |
Paso 1: Preparar los servidores
Ejecuta este paso en los tres servidores de almacenamiento. Añade los nombres de los nodos a /etc/hosts, y también el del cliente:
sudo nano /etc/hosts
10.0.0.21 gluster1
10.0.0.22 gluster2
10.0.0.23 gluster3
10.0.0.30 client1
GlusterFS recomienda XFS para los bricks. Instala las herramientas de XFS, formatea el disco adicional y móntalo en /data/glusterfs:
sudo apt update
sudo apt install xfsprogs
sudo mkfs.xfs -i size=512 /dev/vdb
sudo mkdir -p /data/glusterfs
Advertencia
mkfs.xfsborra todo el contenido del disco. Comprueba conlsblkque/dev/vdbes el disco vacío correcto.
Para que el montaje sobreviva a los reinicios, añádelo a /etc/fstab usando su UUID. Obtén el UUID:
sudo blkid /dev/vdb
/dev/vdb: UUID="3f8e2c1a-5b7d-4e9f-a012-6c3d4e5f6a7b" BLOCK_SIZE="512" TYPE="xfs"
Edita /etc/fstab:
sudo nano /etc/fstab
Añade esta línea con tu UUID:
UUID=3f8e2c1a-5b7d-4e9f-a012-6c3d4e5f6a7b /data/glusterfs xfs defaults 0 0
Monta el sistema de archivos y crea el directorio que será el brick. El brick debe ser un subdirectorio del punto de montaje: si el disco no se monta, GlusterFS no encontrará el subdirectorio y no escribirá en el disco del sistema por error:
sudo systemctl daemon-reload
sudo mount -a
sudo mkdir -p /data/glusterfs/gv0/brick
df -h /data/glusterfs
Filesystem Size Used Avail Use% Mounted on
/dev/vdb 50G 390M 50G 1% /data/glusterfs
Paso 2: Instalar GlusterFS
En los tres servidores, instala el servidor de GlusterFS desde los repositorios de Ubuntu y arranca el servicio de gestión glusterd:
sudo apt install glusterfs-server
sudo systemctl enable --now glusterd
Comprueba que el servicio está activo:
sudo systemctl status glusterd --no-pager
● glusterd.service - GlusterFS, a clustered file-system server
Loaded: loaded (/usr/lib/systemd/system/glusterd.service; enabled; preset: enabled)
Active: active (running) since ...
GlusterFS usa los puertos TCP 24007 y 24008 para la gestión y un puerto a partir del 49152 por cada brick. Si UFW está activo, permite el tráfico solo desde la red privada, que incluye a los otros nodos y al cliente:
sudo ufw allow from 10.0.0.0/24 to any port 24007:24008 proto tcp
sudo ufw allow from 10.0.0.0/24 to any port 49152:60999 proto tcp
Paso 3: Crear el trusted pool
Desde gluster1, añade los otros dos servidores al grupo de confianza. Solo hace falta ejecutarlo en un nodo:
sudo gluster peer probe gluster2
sudo gluster peer probe gluster3
peer probe: success
peer probe: success
Comprueba el estado de los pares:
sudo gluster pool list
UUID Hostname State
7b1c... gluster2 Connected
a93f... gluster3 Connected
52de... localhost Connected
Paso 4: Crear el volumen replicado
Crea el volumen gv0 con réplica 3, un brick en cada servidor. Una réplica de 3 copias evita el split-brain: si un nodo queda aislado, los otros dos siguen teniendo mayoría:
sudo gluster volume create gv0 replica 3 \
gluster1:/data/glusterfs/gv0/brick \
gluster2:/data/glusterfs/gv0/brick \
gluster3:/data/glusterfs/gv0/brick
volume create: gv0: success: please start the volume to access data
Limita el acceso de clientes a tu red privada y arranca el volumen:
sudo gluster volume set gv0 auth.allow 10.0.0.*
sudo gluster volume start gv0
Comprueba la configuración y que los tres bricks están en línea:
sudo gluster volume info gv0
sudo gluster volume status gv0
Volume Name: gv0
Type: Replicate
Status: Started
Number of Bricks: 1 x 3 = 3
Transport-type: tcp
...
Status of volume: gv0
Gluster process TCP Port RDMA Port Online Pid
------------------------------------------------------------------------------
Brick gluster1:/data/glusterfs/gv0/brick 58724 0 Y 2143
Brick gluster2:/data/glusterfs/gv0/brick 54111 0 Y 2087
Brick gluster3:/data/glusterfs/gv0/brick 60213 0 Y 2091
Self-heal Daemon on localhost N/A N/A Y 2160
Paso 5: Montar el volumen en el cliente
En client1, añade las mismas entradas a /etc/hosts que en el paso 1 e instala el cliente FUSE de GlusterFS:
sudo apt update
sudo apt install glusterfs-client
Monta el volumen. El servidor que indicas en el comando solo se usa para descargar la configuración del volumen; después, el cliente se conecta directamente a los tres bricks:
sudo mkdir -p /mnt/gv0
sudo mount -t glusterfs gluster1:/gv0 /mnt/gv0
df -h /mnt/gv0
Filesystem Size Used Avail Use% Mounted on
gluster1:/gv0 50G 900M 50G 2% /mnt/gv0
Para montarlo en el arranque, edita /etc/fstab en el cliente:
sudo nano /etc/fstab
La opción backup-volfile-servers permite montar aunque gluster1 esté caído, y _netdev espera a que la red esté disponible:
gluster1:/gv0 /mnt/gv0 glusterfs defaults,_netdev,backup-volfile-servers=gluster2:gluster3 0 0
Comprueba la entrada desmontando y montando con fstab:
sudo umount /mnt/gv0
sudo mount -a
mount | grep gv0
Paso 6: Verificar la replicación
Crea unos archivos desde el cliente:
for i in $(seq 1 20); do echo "archivo $i" | sudo tee "/mnt/gv0/archivo-$i.txt" > /dev/null; done
ls /mnt/gv0 | wc -l
20
En cualquiera de los tres servidores, mira el contenido del brick. Como es una réplica 3, cada brick contiene los 20 archivos:
ls /data/glusterfs/gv0/brick | wc -l
20
Importantelee y escribe siempre a través del punto de montaje del cliente, nunca directamente en el brick. Los cambios hechos en el brick no se replican.
Paso 7: Probar la caída de un nodo y la autorreparación
Apaga gluster3 para simular un fallo:
sudo poweroff
Desde el cliente, sigue escribiendo. El volumen continúa disponible con dos de los tres bricks:
echo "escrito con gluster3 caído" | sudo tee /mnt/gv0/durante-fallo.txt
En gluster1, el comando heal info lista los archivos que gluster3 tiene pendientes:
sudo gluster volume heal gv0 info
Brick gluster1:/data/glusterfs/gv0/brick
/durante-fallo.txt
/
Status: Connected
Number of entries: 2
...
Brick gluster3:/data/glusterfs/gv0/brick
Status: Transport endpoint is not connected
Number of entries: -
Enciende gluster3 de nuevo. Al volver, el demonio de self-heal copia los cambios automáticamente. Pasados unos segundos, repite el comando:
sudo gluster volume heal gv0 info
Brick gluster1:/data/glusterfs/gv0/brick
Status: Connected
Number of entries: 0
...
Con Number of entries: 0 en los tres bricks, todos los nodos vuelven a estar sincronizados. Puedes confirmarlo con ls /data/glusterfs/gv0/brick/durante-fallo.txt en gluster3.
Solución de problemas
peer probe: failed: Probe returned with Transport endpoint is not connected:glusterdno está activo en el nodo de destino o el puerto 24007 está bloqueado. Compruebasystemctl status glusterdy las reglas de UFW en ese nodo.volume create: gv0: failed: The brick ... is a mount point: estás usando el punto de montaje como brick. Usa un subdirectorio, como/data/glusterfs/gv0/brick.- El cliente no monta y el registro dice
failed to fetch volume file: el cliente no resuelve los nombresgluster1,gluster2ygluster3o su IP no está incluida enauth.allow. Revisa/etc/hostsy el registro en/var/log/glusterfs/mnt-gv0.log. heal infomuestra entradas ensplit-brain: ejecutasudo gluster volume heal gv0 info split-brainpara ver los archivos afectados y resuélvelos congluster volume heal gv0 split-brain latest-mtime <archivo>.
Conclusión
Tienes un volumen GlusterFS replicado en tres servidores, montado en un cliente con servidores de respaldo y probado frente a la caída de un nodo. Como siguientes pasos puedes ampliar la capacidad añadiendo otros tres bricks con gluster volume add-brick y gluster volume rebalance, cifrar el tráfico con TLS, o hacer copias de seguridad periódicas del contenido del punto de montaje, ya que la replicación no protege frente a borrados accidentales.
