Almacenamiento · 9 min read · Jan 10, 2026

Almacenamiento de alta disponibilidad con GlusterFS en Debian 8 - Espejo entre dos servidores de almacenamiento

Este tutorial muestra cómo configurar un almacenamiento de alta disponibilidad con dos servidores de almacenamiento (Debian Jessie) que utiliza GlusterFS. Cada servidor de almacenamiento será un espejo del otro servidor de almacenamiento, y los archivos se replicarán automáticamente entre ambos nodos de almacenamiento. El sistema cliente (Debian 8 también) podrá acceder al almacenamiento como si fuera un sistema de archivos local. GlusterFS es un sistema de archivos en clúster capaz de escalar a varios petabytes. Agrega varios bloques de almacenamiento a través de Infiniband RDMA o TCP/IP en una gran red de sistema de archivos paralelo. Los bloques de almacenamiento pueden estar hechos de cualquier hardware común, como servidores x86_64 con RAID SATA-II y HBA Infiniband.

1 Nota Preliminar

En este tutorial, utilizaré tres sistemas, dos servidores y un cliente:

  • server1.example.com: dirección IP 192.168.1.100 (servidor)
  • server2.example.com: dirección IP 192.168.1.101 (servidor)
  • client1.example.com: dirección IP 192.168.1.102 (cliente)

Los tres sistemas deben poder resolver los nombres de host de los otros sistemas. Si esto no se puede hacer a través de DNS, debes editar el archivo /etc/hosts para que se vea como sigue en los tres sistemas:

nano /etc/hosts
127.0.0.1 localhost  
192.168.1.100 server1.example.com server1  
192.168.1.101 server2.example.com server2  
192.168.1.102 client1.example.com client1  
  
  
# Las siguientes líneas son deseables para hosts compatibles con IPv6  
::1 localhost ip6-localhost ip6-loopback  
ff02::1 ip6-allnodes  
ff02::2 ip6-allrouters

(También es posible usar direcciones IP en lugar de nombres de host en la configuración siguiente. Si prefieres usar direcciones IP, no tienes que preocuparte por si los nombres de host pueden resolverse o no.)

2 Configuración de los Servidores GlusterFS

server1.example.com/server2.example.com:

La última versión de GlusterFS está disponible como paquete de Debian desde gluster.org. Podemos instalarlo de la siguiente manera:

Agregamos la clave pública del repositorio de Debian de gluster.org en ambos servidores.

wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/rsa.pub | apt-key add -

Luego, agregamos el repositorio de GlusterFS (¡el comando es una línea!)

echo deb http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/Debian/jessie/apt jessie main > /etc/apt/sources.list.d/gluster.list

y actualizamos la lista de repositorios.

apt-get update

Ahora podemos instalar el software del servidor GlusterFS con apt.

apt-get -y install glusterfs-server

El comando

glusterfsd --version

debe mostrar ahora la versión de GlusterFS que acabas de instalar (3.7.9 en este caso):

root@server1:/# glusterfsd --version  
glusterfs 3.7.9 built on Mar 23 2016 05:24:49  
Repository revision: git://git.gluster.com/glusterfs.git  
Copyright (c) 2006-2013 Red Hat, Inc.   
GlusterFS viene con NINGUNA GARANTÍA ABSOLUTA.  
Está licenciado para ti bajo tu elección de la Licencia Pública General Reducida GNU, versión 3 o cualquier versión posterior (LGPLv3 o posterior), o la Licencia Pública General GNU, versión 2 (GPLv2), en todos los casos como lo publica la Free Software Foundation.  
root@server1:/#

Si usas un firewall, asegúrate de que los puertos TCP 111, 24007, 24008, 24009-(24009 + número de bloques a través de todos los volúmenes) estén abiertos en server1.example.com y server2.example.com.

Glusterfs almacenará sus datos en el directorio /data en los servidores. Esta ubicación puede ser un directorio normal si tienes una instalación más pequeña o puedes usar una partición de disco duro separada y montarla como /data.

Ejecuta en ambos servidores:

mkdir /data

para crear el directorio de datos.

A continuación, debemos agregar server2.example.com al grupo de almacenamiento de confianza (ten en cuenta que estoy ejecutando todos los comandos de configuración de GlusterFS desde server1.example.com, pero también puedes ejecutarlos desde server2.example.com porque la configuración se replica entre los nodos de GlusterFS; solo asegúrate de usar los nombres de host o direcciones IP correctas):

server1.example.com:

En server1.example.com, ejecuta

gluster peer probe server2.example.com
root@server1:/# gluster peer probe server2.example.com  
peer probe: success.  
root@server1:/#

El estado del grupo de almacenamiento de confianza ahora debería ser similar a esto:

gluster peer status
root@server1:/# gluster peer status  
Number of Peers: 1
Hostname: server2.example.com  
Uuid: 0f7ee46c-6a71-4a31-91d9-6076707eff95  
State: Peer in Cluster (Connected)  
root@server1:/#

A continuación, creamos el recurso compartido llamado testvol con dos réplicas (ten en cuenta que el número de réplicas es igual al número de servidores en este caso porque queremos configurar el espejado) en server1.example.com y server2.example.com en el directorio /data/testvol (esto se creará si no existe):

gluster volume create testvol replica 2 transport tcp server1.example.com:/data/testvol server2.example.com:/data/testvol force
root@server1:/# gluster volume create testvol replica 2 transport tcp server1.example.com:/data/testvol server2.example.com:/data/testvol force  
volume create: testvol: success: please start the volume to access data  
root@server1:/#

Inicia el volumen:

gluster volume start testvol
root@server1:/# gluster volume start testvol  
volume start: testvol: success  
root@server1:/#

Nuestro volumen de prueba se ha iniciado correctamente.

Es posible que el comando anterior te diga que la acción no fue exitosa:

root@server1:~# gluster volume start testvol  
Starting volume testvol has been unsuccessful  
root@server1:~#

En este caso, debes verificar la salida de…

server1.example.com/server2.example.com:

netstat -tap | grep glusterfsd

en ambos servidores.

Si obtienes una salida como esta…

root@server1:/# netstat -tap | grep glusterfsd  
tcp 0 0 *:49152 *:* LISTEN 8007/glusterfsd  
tcp 0 0 server1.example.c:65533 server1.example.c:24007 ESTABLISHED 8007/glusterfsd  
tcp 0 0 server1.example.c:49152 server2.example.c:65531 ESTABLISHED 8007/glusterfsd  
tcp 0 0 server1.example.c:49152 server1.example.c:65532 ESTABLISHED 8007/glusterfsd  
tcp 0 0 server1.example.c:49152 server1.example.c:65531 ESTABLISHED 8007/glusterfsd  
tcp 0 0 server1.example.c:49152 server2.example.c:65526 ESTABLISHED 8007/glusterfsd  
root@server1:/#

… todo está bien, pero si no obtienes ninguna salida…

root@server2:~# netstat -tap | grep glusterfsd  
root@server2:~#

… reinicia el demonio de GlusterFS en el servidor correspondiente (server1.example.com en este caso):

server2.example.com:

service glusterfs-server restart

Luego verifica la salida de…

netstat -tap | grep glusterfsd

… nuevamente en ese servidor; ahora debería verse así:

root@server2:/# netstat -tap | grep glusterfsd  
tcp 0 0 *:49152 *:* LISTEN 7852/glusterfsd  
tcp 0 0 server2.example.c:49152 server2.example.c:65532 ESTABLISHED 7852/glusterfsd  
tcp 0 0 server2.example.c:49152 server1.example.c:65526 ESTABLISHED 7852/glusterfsd  
tcp 0 0 server2.example.c:49152 server2.example.c:65525 ESTABLISHED 7852/glusterfsd  
tcp 0 0 server2.example.c:65533 server2.example.c:24007 ESTABLISHED 7852/glusterfsd  
tcp 0 0 server2.example.c:49152 server1.example.c:65524 ESTABLISHED 7852/glusterfsd  
root@server2:/#

Ahora volvamos a server1.example.com:

server1.example.com:

Puedes verificar el estado del volumen con el comando

gluster volume info
root@server1:/# gluster volume info
Volume Name: testvol  
Type: Replicate  
Volume ID: 3fc9af57-ca56-4a72-ad54-3d2ea03e5883  
Status: Started  
Number of Bricks: 1 x 2 = 2  
Transport-type: tcp  
Bricks:  
Brick1: server1.example.com:/data/testvol  
Brick2: server2.example.com:/data/testvol  
Options Reconfigured:  
performance.readdir-ahead: on  
root@server1:/#

Por defecto, todos los clientes pueden conectarse al volumen. Si deseas otorgar acceso solo a client1.example.com (= 192.168.1.102), ejecuta:

gluster volume set testvol auth.allow 192.168.1.102
root@server1:/# gluster volume set testvol auth.allow 192.168.1.102  
volume set: success  
root@server1:/#

Ten en cuenta que es posible usar comodines para las direcciones IP (como 192.168.*) y que puedes especificar múltiples direcciones IP separadas por comas (por ejemplo, 192.168.1.102,192.168.1.103).

La información del volumen ahora debería mostrar el estado actualizado:

gluster volume info

root@server1:/# gluster volume info

Volume Name: testvol  
Type: Replicate  
Volume ID: 3fc9af57-ca56-4a72-ad54-3d2ea03e5883  
Status: Started  
Number of Bricks: 1 x 2 = 2  
Transport-type: tcp  
Bricks:  
Brick1: server1.example.com:/data/testvol  
Brick2: server2.example.com:/data/testvol  
Options Reconfigured:  
auth.allow: 192.168.1.102  
performance.readdir-ahead: on  
root@server1:/#

3 Configuración del Cliente GlusterFS

client1.example.com:

En el sistema cliente, primero agregamos la clave pública del repositorio de Debian de gluster.org.

wget -O - http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/rsa.pub | apt-key add -

Luego agregamos el repositorio de GlusterFS (¡el comando es una línea!)

echo deb http://download.gluster.org/pub/gluster/glusterfs/3.7/3.7.9/Debian/jessie/apt jessie main > /etc/apt/sources.list.d/gluster.list

y actualizamos la lista de repositorios.

apt-get update

Ahora podemos instalar el cliente GlusterFS de la siguiente manera.

apt-get -y install glusterfs-client

Luego creamos el siguiente directorio:

mkdir /mnt/glusterfs

¡Eso es todo! Ahora podemos montar el sistema de archivos GlusterFS en /mnt/glusterfs con el siguiente comando:

mount.glusterfs server1.example.com:/testvol /mnt/glusterfs

(En lugar de server1.example.com, también puedes usar server2.example.com en el comando anterior)

Ahora deberías ver el nuevo recurso compartido en las salidas de…

mount
root@client1:/# mount  
sysfs on /sys type sysfs (rw,nosuid,nodev,noexec,relatime)  
proc on /proc type proc (rw,nosuid,nodev,noexec,relatime)  
odev on /dev type devtmpfs (rw,relatime,size=10240k,nr_inodes=125556,mode=755)  
devpts on /dev/pts type devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)  
tmpfs on /run type tmpfs (rw,nosuid,relatime,size=204220k,mode=755)  
/dev/sda1 on / type ext4 (rw,relatime,errors=remount-ro,data=ordered)  
securityfs on /sys/kernel/security type securityfs (rw,nosuid,nodev,noexec,relatime)  
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)  
tmpfs on /run/lock type tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k)  
tmpfs on /sys/fs/cgroup type tmpfs (ro,nosuid,nodev,noexec,mode=755)  
cgroup on /sys/fs/cgroup/systemd type cgroup (rw,nosuid,nodev,noexec,relatime,xattr,release_agent=/lib/systemd/systemd-cgroups-agent,name=systemd)  
pstore on /sys/fs/pstore type pstore (rw,nosuid,nodev,noexec,relatime)  
cgroup on /sys/fs/cgroup/cpuset type cgroup (rw,nosuid,nodev,noexec,relatime,cpuset)  
cgroup on /sys/fs/cgroup/cpu,cpuacct type cgroup (rw,nosuid,nodev,noexec,relatime,cpu,cpuacct)  
cgroup on /sys/fs/cgroup/devices type cgroup (rw,nosuid,nodev,noexec,relatime,devices)  
cgroup on /sys/fs/cgroup/freezer type cgroup (rw,nosuid,nodev,noexec,relatime,freezer)  
cgroup on /sys/fs/cgroup/net_cls,net_prio type cgroup (rw,nosuid,nodev,noexec,relatime,net_cls,net_prio)  
cgroup on /sys/fs/cgroup/blkio type cgroup (rw,nosuid,nodev,noexec,relatime,blkio)  
cgroup on /sys/fs/cgroup/perf_event type cgroup (rw,nosuid,nodev,noexec,relatime,perf_event)  
systemd-1 on /proc/sys/fs/binfmt_misc type autofs (rw,relatime,fd=23,pgrp=1,timeout=300,minproto=5,maxproto=5,direct)  
mqueue on /dev/mqueue type mqueue (rw,relatime)  
debugfs on /sys/kernel/debug type debugfs (rw,relatime)  
hugetlbfs on /dev/hugepages type hugetlbfs (rw,relatime)  
rpc_pipefs on /run/rpc_pipefs type rpc_pipefs (rw,relatime)  
fusectl on /sys/fs/fuse/connections type fusectl (rw,relatime)  
server1.example.com:/testvol on /mnt/glusterfs type fuse.glusterfs (rw,relatime,user_id=0,group_id=0,default_permissions,allow_other,max_read=131072)  
root@client1:/#

… y…

df -h
root@client1:/# df -h  
Filesystem Size Used Avail Use% Mounted on  
/dev/sda1 57G 1.1G 53G 2% /  
udev 10M 0 10M 0% /dev  
tmpfs 200M 4.6M 195M 3% /run  
tmpfs 499M 0 499M 0% /dev/shm  
tmpfs 5.0M 0 5.0M 0% /run/lock  
tmpfs 499M 0 499M 0% /sys/fs/cgroup  
server1.example.com:/testvol 57G 21G 34G 39% /mnt/glusterfs  
root@client1:/#

En lugar de montar el recurso compartido de GlusterFS manualmente en el cliente, podrías modificar /etc/fstab para que el recurso compartido se monte automáticamente cuando el cliente arranque.

Abre /etc/fstab y agrega la siguiente línea:

nano /etc/fstab
[...]  
server1.example.com:/testvol /mnt/glusterfs glusterfs defaults,_netdev 0 0

(Otra vez, en lugar de server1.example.com, también puedes usar server2.example.com)

Para probar si tu /etc/fstab modificado está funcionando, reinicia el cliente:

reboot

Después del reinicio, deberías encontrar el recurso compartido en las salidas de…

df -h

… y…

mount

4 Prueba de Replicación de GlusterFS

Ahora vamos a crear algunos archivos de prueba en el recurso compartido de GlusterFS:

client1.example.com:

touch /mnt/glusterfs/test1  
touch /mnt/glusterfs/test2

Ahora verifiquemos el directorio /data en server1.example.com y server2.example.com. Los archivos test1 y test2 deberían estar presentes en cada nodo:

server1.example.com/server2.example.com:

ls -l /data/testvol
root@server1:/# ls -l /data/testvol/  
total 0  
-rw-r--r-- 2 root root 0 Mar 23 2016 test1  
-rw-r--r-- 2 root root 0 Mar 23 2016 test2

Ahora apagamos server1.example.com y agregamos/borramos algunos archivos en el recurso compartido de GlusterFS en client1.example.com.

server1.example.com:

shutdown -h now

client1.example.com:

touch /mnt/glusterfs/test3  
touch /mnt/glusterfs/test4  
rm -f /mnt/glusterfs/test2

Los cambios deberían ser visibles en el directorio /data/testvol en server2.example.com:

server2.example.com:

ls -l /data/testvol
root@server2:/# ls -l /data/testvol  
total 8  
-rw-r--r-- 2 root root 0 Mar 23 08:06 test1  
-rw-r--r-- 2 root root 0 Mar 23 08:09 test3  
-rw-r--r-- 2 root root 0 Mar 23 08:09 test4  
root@server2:/#

Vamos a reiniciar server1.example.com y a echar un vistazo al directorio /data:

server1.example.com:

ls -l /data/testvol
root@server1:/# ls -l /data/testvol  
total 0  
-rw-r--r-- 2 root root 0 Mar 23 08:06 test1  
-rw-r--r-- 2 root root 0 Mar 23 08:09 test3  
-rw-r--r-- 2 root root 0 Mar 23 08:09 test4  
root@server1:/#

Como ves, server1.example.com sincronizó automáticamente los cambios. En caso de que el cambio no se haya sincronizado aún, esto es fácil de solucionar, todo lo que necesitamos hacer es invocar un comando de lectura en el recurso compartido de GlusterFS en client1.example.com, por ejemplo:

client1.example.com:

ls -l /mnt/glusterfs/
root@client1:/# ls -l /mnt/glusterfs/  
total 0  
-rw-r--r-- 1 root root 0 Mar 23 08:06 test1  
-rw-r--r-- 1 root root 0 Mar 23 08:09 test3  
-rw-r--r-- 1 root root 0 Mar 23 08:09 test4  
root@client1:/#

5 Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.