363.1 - GlusterFS

Introduccion a GlusterFS

GlusterFS es un sistema de archivos distribuido de codigo abierto capaz de escalar a varios petabytes. Agrega almacenamiento de multiples servidores en un espacio de nombres unificado.

Caracteristicas Principales

  • Almacenamiento distribuido sin punto unico de fallo
  • Escalabilidad horizontal (añadir mas nodos)
  • Acceso via FUSE, NFS (Ganesha), SMB
  • No requiere servidor de metadatos centralizado
  • Basado en translators apilables

Arquitectura de GlusterFS

Componentes

  ┌──────────────────────────────────────────┐
  │              Clientes                     │
  │  (FUSE mount, NFS-Ganesha, libgfapi)     │
  └──────────────┬───────────────────────────┘
                 │
  ┌──────────────┴───────────────────────────┐
  │           Translators                     │
  │  (DHT, AFR, EC, io-cache, write-behind)  │
  └──────────────┬───────────────────────────┘
                 │
  ┌──────────────┴───────────────────────────┐
  │        Servidores GlusterFS              │
  │  ┌────────┐  ┌────────┐  ┌────────┐     │
  │  │ Brick1 │  │ Brick2 │  │ Brick3 │     │
  │  │/data/b1│  │/data/b2│  │/data/b3│     │
  │  └────────┘  └────────┘  └────────┘     │
  └──────────────────────────────────────────┘

Conceptos Clave

ConceptoDescripcion
BrickDirectorio en un servidor que sirve como unidad de almacenamiento
VolumeColeccion logica de bricks
PeerServidor miembro del Trusted Storage Pool
TranslatorModulo que transforma las peticiones de E/S
Trusted Storage PoolConjunto de servidores GlusterFS confiables
GFIDGlusterFS File Identifier (identificador unico de archivo)

Para el examen: GlusterFS no tiene servidor de metadatos centralizado. Usa un algoritmo de hash elastico (DHT - Distributed Hash Table) para localizar archivos.

Tipos de Volumenes

Distributed (Distribuido)

Los archivos se distribuyen entre bricks sin replicacion.

  Archivo A → Brick1
  Archivo B → Brick2
  Archivo C → Brick3
gluster volume create vol_dist \
    server1:/data/brick1 \
    server2:/data/brick2 \
    server3:/data/brick3
  • Ventaja: Capacidad total = suma de todos los bricks
  • Riesgo: Si un brick falla, se pierden los archivos de ese brick

Replicated (Replicado)

Cada archivo se copia en multiples bricks.

  Archivo A → Brick1 + Brick2 (copia)
  Archivo B → Brick1 + Brick2 (copia)
gluster volume create vol_repl replica 2 \
    server1:/data/brick1 \
    server2:/data/brick2
  • Ventaja: Redundancia completa
  • Capacidad: Total / numero_de_replicas

Striped (Segmentado) - OBSOLETO

Los archivos se dividen en segmentos entre bricks (similar a RAID 0). Deprecado en versiones recientes.

Dispersed (Disperso)

Usa erasure coding (similar a RAID 5/6) para distribuir datos con redundancia.

gluster volume create vol_disp disperse 3 redundancy 1 \
    server1:/data/brick1 \
    server2:/data/brick2 \
    server3:/data/brick3
  • Ventaja: Buen balance entre capacidad y redundancia
  • Capacidad: (N - redundancia) * tamaño_brick

Distributed-Replicated (Distribuido-Replicado)

Combina distribucion con replicacion. Los archivos se distribuyen y cada fragmento se replica.

gluster volume create vol_dist_repl replica 2 \
    server1:/data/brick1 \
    server2:/data/brick2 \
    server3:/data/brick3 \
    server4:/data/brick4
  Archivo A → Brick1 + Brick2 (replica)
  Archivo B → Brick3 + Brick4 (replica)
  • Numero de bricks: Debe ser multiplo del factor de replica
  • Es el tipo mas usado en produccion

Para el examen: Conoce todos los tipos de volumen. distributed-replicated es el mas comun. El numero de bricks debe ser multiplo del factor de replica.

Administracion de GlusterFS

Gestion del Pool de Confianza (Peers)

# Añadir un peer al pool
gluster peer probe server2
gluster peer probe server3
 
# Ver estado de los peers
gluster peer status
 
# Eliminar un peer
gluster peer detach server3
 
# Listar peers
gluster pool list

Gestion de Volumenes

# Crear volumen
gluster volume create mi_vol replica 2 \
    server1:/data/brick1 server2:/data/brick2
 
# Iniciar volumen
gluster volume start mi_vol
 
# Detener volumen
gluster volume stop mi_vol
 
# Eliminar volumen (debe estar detenido)
gluster volume delete mi_vol
 
# Ver informacion del volumen
gluster volume info mi_vol
gluster volume info all
 
# Ver estado del volumen
gluster volume status mi_vol
gluster volume status mi_vol detail
gluster volume status mi_vol clients

Añadir y Eliminar Bricks

# Añadir bricks (para expandir)
gluster volume add-brick mi_vol \
    server3:/data/brick3 server4:/data/brick4
 
# Eliminar bricks (requiere rebalanceo previo)
gluster volume remove-brick mi_vol \
    server3:/data/brick3 server4:/data/brick4 start
 
# Ver progreso de la eliminacion
gluster volume remove-brick mi_vol \
    server3:/data/brick3 server4:/data/brick4 status
 
# Confirmar eliminacion
gluster volume remove-brick mi_vol \
    server3:/data/brick3 server4:/data/brick4 commit

Rebalanceo

Cuando se añaden o eliminan bricks, los datos deben rebalancearse:

# Iniciar rebalanceo
gluster volume rebalance mi_vol start
 
# Ver estado del rebalanceo
gluster volume rebalance mi_vol status
 
# Detener rebalanceo
gluster volume rebalance mi_vol stop

Para el examen: Despues de añadir bricks, SIEMPRE ejecutar rebalance para distribuir los datos existentes a los nuevos bricks. Sin rebalanceo, solo los archivos nuevos iran a los bricks nuevos.

Montaje del Volumen

FUSE Mount (Nativo)

# Montar con FUSE
mount -t glusterfs server1:/mi_vol /mnt/gluster
 
# En /etc/fstab
server1:/mi_vol  /mnt/gluster  glusterfs  defaults,_netdev  0  0
 
# Con opciones
mount -t glusterfs -o backup-volfile-servers=server2:server3 \
    server1:/mi_vol /mnt/gluster

NFS-Ganesha

NFS-Ganesha es el servidor NFS recomendado para exportar volumenes GlusterFS:

# Habilitar NFS-Ganesha en el volumen
gluster nfs-ganesha enable
 
# Exportar volumen via NFS
gluster volume set mi_vol ganesha.enable on
 
# Montar via NFS en el cliente
mount -t nfs -o vers=4 server1:/mi_vol /mnt/nfs_gluster

Opciones de Volumen

# Configurar opciones
gluster volume set mi_vol performance.cache-size 256MB
gluster volume set mi_vol performance.write-behind-window-size 1MB
gluster volume set mi_vol network.ping-timeout 10
gluster volume set mi_vol cluster.self-heal-daemon on
 
# Ver opciones configuradas
gluster volume get mi_vol all
 
# Restablecer una opcion al valor predeterminado
gluster volume reset mi_vol performance.cache-size

Geo-Replicacion

La geo-replicacion permite replicar volumenes entre clusters GlusterFS distantes geograficamente (asincronamente).

# Crear sesion de geo-replicacion
gluster volume geo-replication mi_vol \
    remote_user@remote_host::vol_remoto create push-pem
 
# Iniciar
gluster volume geo-replication mi_vol \
    remote_user@remote_host::vol_remoto start
 
# Ver estado
gluster volume geo-replication mi_vol \
    remote_user@remote_host::vol_remoto status
 
# Detener
gluster volume geo-replication mi_vol \
    remote_user@remote_host::vol_remoto stop
 
# Eliminar
gluster volume geo-replication mi_vol \
    remote_user@remote_host::vol_remoto delete

Para el examen: La geo-replicacion es asincrona (a diferencia de la replicacion normal que es sincrona). Se usa para DR (Disaster Recovery) entre sitios remotos.

Healing (Auto-Reparacion)

Cuando un brick se recupera de un fallo, GlusterFS repara automaticamente los datos desincronizados:

# Ver archivos que necesitan healing
gluster volume heal mi_vol info
 
# Iniciar healing manual
gluster volume heal mi_vol
 
# Ver estadisticas de healing
gluster volume heal mi_vol statistics
 
# Healing completo (full crawl)
gluster volume heal mi_vol full
 
# Activar self-heal daemon
gluster volume set mi_vol cluster.self-heal-daemon on

Translators Importantes

TranslatorFuncion
DHT (Distributed Hash Table)Distribuye archivos entre bricks
AFR (Automatic File Replication)Replica archivos entre bricks
EC (Erasure Coding)Dispersed volumes (erasure coding)
io-cacheCache de lectura
write-behindEscritura diferida
read-aheadLectura anticipada

Puertos y Servicios

PuertoServicio
24007glusterd (daemon de gestion)
24008Gestion interna
49152+Bricks (un puerto por brick)
2049NFS-Ganesha

Trampas del examen

Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:

  • Distributed vs Replicated: sin replica NO hay redundancia — un volumen distributed (sin replica) reparte archivos entre bricks. Si un brick falla, los archivos de ese brick se pierden. El examen puede preguntar que pasa al perder un brick en modo distributed: se pierden datos
  • Numero de bricks debe ser multiplo del factor de replica — para replica 2 con distributed-replicated necesitas 2, 4, 6… bricks. Si intentas crear con 3 bricks y replica 2, GlusterFS rechaza la operacion. Calcular mal el numero de bricks es error frecuente
  • Rebalance es obligatorio despues de add-brick — cuando añades bricks a un volumen existente, los archivos ya existentes NO se redistribuyen automaticamente. Solo los archivos nuevos van a los bricks nuevos. Sin gluster volume rebalance start, la distribucion queda desbalanceada
  • GlusterFS no tiene servidor de metadatos — a diferencia de Ceph (que usa MDS para CephFS), GlusterFS usa DHT (Distributed Hash Table) para localizar archivos. Esto elimina un SPOF pero significa que los nombres de archivo determinan su ubicacion via hash
  • gluster peer probe: no se hace desde el nodo a si mismo — ejecutar gluster peer probe sobre el propio nodo da error. Solo se hace hacia nodos remotos. Ademas, desde el nodo1 se hace probe de nodo2, y nodo2 automaticamente ve a nodo1 como peer
  • Dispersed volume (erasure coding) vs replicated — dispersed usa erasure coding (similar a RAID 5/6) y ofrece mejor uso de espacio; replicated copia archivos completos (similar a RAID 1). Con disperse 3 redundancy 1, se toleran 1 fallo con capacidad de 2/3. El examen puede pedir calcular la capacidad util
  • Geo-replicacion es asincrona — la replicacion normal entre bricks de un volumen replicado es sincrona; la geo-replicacion entre clusters remotos es asincrona. Confundirlas puede llevar a respuestas incorrectas sobre consistencia de datos en sitios remotos
  • Self-heal no es instantaneo — cuando un brick se recupera, el self-heal daemon repara los datos desincronizados, pero no es inmediato. gluster volume heal info muestra los archivos pendientes. El examen puede preguntar como verificar si el healing termino
  • Puerto 24007 para glusterd, 49152+ para bricks — el daemon de gestion escucha en 24007, pero cada brick usa un puerto dinamico a partir de 49152. Si el firewall solo abre 24007, la gestion funciona pero el acceso a datos falla
  • FUSE mount: backup-volfile-servers para HA — al montar con FUSE, si solo especificas un servidor y este cae, el montaje falla. Usar backup-volfile-servers=server2:server3 permite que el cliente contacte otros servidores si el primero no responde