Guía Práctica de GlusterFS: Sistema de Archivos Distribuido

GlusterFS es un sistema de archivos distribuido de código abierto diseñado para escalar horizontalmente. Su arquitectura sin metadatos evita cuellos de botella y puntos únicos de fallo, a diferencia de los diseños tradicionales. Permite agrupar recursos de almacenamiento físicamente dispersos a través de redes TCP/IP o InfiniBand, presentándolos como un único espacio de nombres global. A continuación, se exploran sus conceptos fundamentales, tipos de volúmenes, y un procedimiento de despliegue y prueba.

Arquitectura y Conceptos Clave

El sistema opera con un modelo modular y apilado. Los componentes principales son:

  • Brick: Es la unidad básica de almacenamiento, representado como un directorio exportado en un servidor (ej. SERVER:/RUTA).
  • Volumen: Una agrupación lógica de Bricks donde se almacenan los datos.
  • FUSE (Filesystem in Userspace): Módulo del kernel que permite la creación de sistemas de archivos en espacio de usuario sin modificar el kernel.
  • glusterd: Daemon de gestión que debe ejecutarse en cada nodo del clúster.

El flujo de trabajo implica que una solicitud del cliente llega al kernel mediante la VFS (Virtual File System), luego es pasada a FUSE y finalmente al cliente de GlusterFS. Este cliente procesa la solicitud según la configuración del volumen y la transmite a los servidores GlusterFS remotos. La ubicación de los datos se determina mediante un algoritmo de hash elástico (Davies-Meyer), que distribuye los archivos uniformemente entre los Bricks sin depender de un servidor de metadatos.

Tipos de Volúmenes

GlusterFS ofrece múltiples configuraciones de volumen para equilibrar rendimiento, capacidad y redundancia.

Volumen Distribuido (Distribute)

Es el tipo por defecto. Los archivos se distribuyen entre los nodos mediante hash. Equivale a un RAID0 a nivel de archivo; aumenta la capacidad pero no ofrece tolerancia a fallos. La pérdida de un nodo implica la pérdida de los archivos en él.

gluster volume create volumen_dist srv1:/dir1 srv2:/dir2 srv3:/dir3 force

Volumen Rayado (Stripe)

Similar a un RAID0, los archivos se dividen en bloques y se distribuyen de forma cíclica entre los Bricks. Mejora el rendimiento para archivos muy grandes, pero no proporciona redundancia.

gluster volume create volumen_ray stripe 2 srv1:/dir1 srv2:/dir2 force

Volumen Réplica (Replica)

Equivalente a un RAID1. Cada archivo se mantiene sincronizado en múltiples Bricks, proporcionando alta disponibilidad y tolerancia a fallos. El rendimiento de lectura mejora, pero el de escritura disminuye y se requiere más espacio.

gluster volume create volumen_rep replica 2 srv1:/dir1 srv2:/dir2 force

Volúmenes Compuestos

Combinan las características de los tipos básicos:

  • Distribuido-Rayado (Distribute Stripe): Requiere un número de servidores múltiplo del factor stripe. Combina escalabilidad de capacidad con el rendimiento de los rayados.
  • Distribuido-Réplica (Distribute Replica): Requiere un número de servidores múltiplo del factor replica. Ofrece escalabilidad y redundancia.
  • Rayado-Réplica (Stripe Replica): Similar a un RAID10, combina rendimiento y redundancia.

Despliegue del Clúster de GlusterFS

El siguiente ejemplo utiliza cuatro nodos y un cliente.

1. Preparación del Entorno en los Nodos

En todos los nodos (ej. srv1, srv2, srv3, srv4), se deben realizar los siguientes pasos:

a) Desactivar el cortafuegos y SELinux:

systemctl stop firewalld
setenforce 0

b) Preparar discos y montarlos: Crear y ejecutar un script para particionar, formatear con XFS y montar los discos adicionales (sdb, sdc, etc.).

c) Configurar nombres de host y archivo hosts:

hostnamectl set-hostname srvX  # Ejecutar en cada nodo
echo "192.168.1.10 srv1" >> /etc/hosts
echo "192.168.1.11 srv2" >> /etc/hosts
echo "192.168.1.12 srv3" >> /etc/hosts
echo "192.168.1.13 srv4" >> /etc/hosts

d) Instalar e iniciar GlusterFS: Configurar un repositorio local con los paquetes y luego instalar.

yum -y install glusterfs glusterfs-server glusterfs-fuse
systemctl enable --now glusterd

2. Configuración del Clúster

Desde un nodo (ej. srv1), se añaden los demás al "pool de confianza":

gluster peer probe srv2
gluster peer probe srv3
gluster peer probe srv4
gluster peer status  # Verificar en todos los nodos

3. Creación de Volúmenes

Se pueden crear desde cualquier nodo. Ejemplos:

# Volumen distribuido
gluster volume create vol_distribuido srv1:/data/sdb1 srv2:/data/sdb1 force

# Volumen réplica
gluster volume create vol_replica replica 2 srv3:/data/sdb1 srv4:/data/sdb1 force

# Volumen distribuido-réplica
gluster volume create vol_dist_rep replica 2 srv1:/data/sde1 srv2:/data/sde1 srv3:/data/sde1 srv4:/data/sde1 force

Para cada volumen, se debe iniciar:

gluster volume start vol_distribuido

4. Configuración del Cliente

En el nodo cliente (ej. cliente1):

yum -y install glusterfs glusterfs-fuse
mkdir -p /mnt/test/{distribuido,replica,dist_replica}

Configurar el archivo /etc/hosts con las IPs de los servidores. Luego, realizar los montajes:

mount.glusterfs srv1:vol_distribuido /mnt/test/distribuido
mount.glusterfs srv1:vol_replica /mnt/test/replica
mount.glusterfs srv1:vol_dist_replica /mnt/test/dist_replica

Para hacer los montajes permanentes, se añaden las líneas correspondientes a /etc/fstab.

Pruebas de Funcionalidad y Tolerancia a Fallos

a) Escribir datos de prueba: Desde el cliente, copiar archivos de prueba a cada punto de montaje.

dd if=/dev/zero of=/mnt/test/distribuido/prueba.img bs=1M count=100
cp /mnt/test/distribuido/prueba.img /mnt/test/replica/
cp /mnt/test/distribuido/prueba.img /mnt/test/dist_replica/

b) Verificar la distribución: En los servidores, inspeccionar los directorios Brick (/data/sdX1) para ver la ubicación de los archivos según el tipo de volumen.

c) Simular un fallo: Detener el servicio glusterd o apagar uno de los nodos (ej. srv2). Luego, desde el cliente, intentar leer los archivos:

  • El volumen distribuido mostrará archivos faltantes.
  • El volumen réplica seguirá accesible.
  • El volumen dist-réplica seguirá accesible.

Esta prueba demuestra la importancia de los volúmenes con factor de replicación para la alta disponibilidad.

Comandos de Mantenimiento Básicos

  • gluster volume info: Muestra información detallada de todos los volúmenes.
  • gluster volume status: Muestra el estado de los servicios y Brick.
  • gluster volume stop NOMBRE_VOLUMEN: Detiene un volumen (debe estar detenido para borrarlo).
  • gluster volume delete NOMBRE_VOLUMEN: Elimina un volumen permanentemente.
  • gluster volume set NOMBRE_VOLUMEN auth.allow IP_PERMITIDA: Controla el acceso por IP.

Etiquetas: GlusterFS almacenamiento distribuido sistema de archivos clúster Alta Disponibilidad

Publicado el 6-3 21:21