Almacenamiento · 6 min read · Jan 12, 2026

Almacenamiento de Alta Disponibilidad Con GlusterFS 3.0.x En Debian Squeeze - Replicación Automática de Archivos Entre Dos Servidores de Almacenamiento

Este tutorial muestra cómo configurar un almacenamiento de alta disponibilidad con dos servidores de almacenamiento (Debian Squeeze) que utilizan GlusterFS. Cada servidor de almacenamiento será un espejo del otro servidor de almacenamiento, y los archivos se replicarán automáticamente entre ambos servidores de almacenamiento. El sistema cliente (Debian Squeeze 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 un gran sistema de archivos de red paralelo. Los bloques de almacenamiento pueden estar hechos de cualquier hardware común, como servidores x86_64 con RAID SATA-II y HBA Infiniband.

¡No emito ninguna garantía de que esto funcione para ti!

1 Nota Preliminar

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

  • server1.example.com: dirección IP 192.168.0.100 (servidor)
  • server2.example.com: dirección IP 192.168.0.101 (servidor)
  • client1.example.com: dirección IP 192.168.0.102 (cliente)

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

vi /etc/hosts

| 127.0.0.1 localhost.localdomain localhost 192.168.0.100 server1.example.com server1 192.168.0.101 server2.example.com server2 192.168.0.102 client1.example.com client1 # Las siguientes líneas son deseables para hosts capaces de IPv6 ::1 localhost ip6-localhost ip6-loopback fe00::0 ip6-localnet ff00::0 ip6-mcastprefix ff02::1 ip6-allnodes ff02::2 ip6-allrouters ff02::3 ip6-allhosts |

( 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 de si los nombres de host se pueden resolver o no.)

2 Configuración de los Servidores GlusterFS

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

GlusterFS está disponible como un paquete para Debian Squeeze, por lo tanto, podemos instalarlo de la siguiente manera:

apt-get install glusterfs-server

El comando

glusterfs --version

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

root@server1:~# glusterfs --version  
glusterfs 3.0.5 built on Jul 13 2010 16:44:21  
Repository revision: v3.0.5  
Copyright (c) 2006-2009 Gluster Inc.   
GlusterFS viene con ABSOLUTAMENTE NINGUNA GARANTÍA.  
Puedes redistribuir copias de GlusterFS bajo los términos de la Licencia Pública General de GNU.  
root@server1:~#

A continuación, creamos algunos directorios:

mkdir /data/  
mkdir /data/export  
mkdir /data/export-ns

Ahora creamos el archivo de configuración del servidor GlusterFS /etc/glusterfs/glusterfsd.vol (hacemos una copia de seguridad del archivo original /etc/glusterfs/glusterfsd.vol primero) que define qué directorio se exportará ( /data/export) y qué cliente tiene permitido conectarse ( 192.168.0.102 = client1.example.com):

cp /etc/glusterfs/glusterfsd.vol /etc/glusterfs/glusterfsd.vol_orig  
cat /dev/null > /etc/glusterfs/glusterfsd.vol  
vi /etc/glusterfs/glusterfsd.vol

| volume posix type storage/posix option directory /data/export end-volume volume locks type features/locks subvolumes posix end-volume volume brick type performance/io-threads option thread-count 8 subvolumes locks end-volume volume server type protocol/server option transport-type tcp option auth.addr.brick.allow 192.168.0.102 subvolumes brick end-volume |

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.0.102,192.168.0.103).

Después, iniciamos el servidor GlusterFS:

/etc/init.d/glusterfs-server start

3 Configuración del Cliente GlusterFS

client1.example.com:

En el cliente, podemos instalar el cliente GlusterFS de la siguiente manera:

apt-get install glusterfs-client

Luego creamos el siguiente directorio:

mkdir /mnt/glusterfs

A continuación, creamos el archivo /etc/glusterfs/glusterfs.vol (hacemos una copia de seguridad del archivo original /etc/glusterfs/glusterfs.vol primero):

cp /etc/glusterfs/glusterfs.vol /etc/glusterfs/glusterfs.vol_orig  
cat /dev/null > /etc/glusterfs/glusterfs.vol  
vi /etc/glusterfs/glusterfs.vol

| volume remote1 type protocol/client option transport-type tcp option remote-host server1.example.com option remote-subvolume brick end-volume volume remote2 type protocol/client option transport-type tcp option remote-host server2.example.com option remote-subvolume brick end-volume volume replicate type cluster/replicate subvolumes remote1 remote2 end-volume volume writebehind type performance/write-behind option window-size 1MB subvolumes replicate end-volume volume cache type performance/io-cache option cache-size 512MB subvolumes writebehind end-volume |

Asegúrate de usar los nombres de host o direcciones IP correctas de los servidores en las líneas de opción remote-host.

¡Eso es todo! Ahora podemos montar el sistema de archivos GlusterFS en /mnt/glusterfs con uno de los siguientes dos comandos:

glusterfs -f /etc/glusterfs/glusterfs.vol /mnt/glusterfs

o

mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs

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

mount
root@client1:~# mount  
/dev/sda1 on / type ext3 (rw,errors=remount-ro)  
tmpfs on /lib/init/rw type tmpfs (rw,nosuid,mode=0755)  
proc on /proc type proc (rw,noexec,nosuid,nodev)  
sysfs on /sys type sysfs (rw,noexec,nosuid,nodev)  
udev on /dev type tmpfs (rw,mode=0755)  
tmpfs on /dev/shm type tmpfs (rw,nosuid,nodev)  
devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=620)  
fusectl on /sys/fs/fuse/connections type fusectl (rw)  
/etc/glusterfs/glusterfs.vol on /mnt/glusterfs type fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072)  
root@client1:~#

… y…

df -h
root@client1:~# df -h  
Filesystem            Size  Used Avail Use% Mounted on  
/dev/sda1              29G  778M   27G   3% /  
tmpfs                 249M     0  249M   0% /lib/init/rw  
udev                  244M  100K  244M   1% /dev  
tmpfs                 249M     0  249M   0% /dev/shm  
/etc/glusterfs/glusterfs.vol  
                     18G  848M   16G   5% /mnt/glusterfs  
root@client1:~#

( server1.example.com y server2.example.com cada uno tiene 18GB de espacio para el sistema de archivos GlusterFS, pero como los datos están espejados, el cliente no ve 36GB (2 x 18GB), sino solo 18GB.)

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:

vi /etc/fstab

| [...] /etc/glusterfs/glusterfs.vol /mnt/glusterfs glusterfs defaults,_netdev 0 0 |

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

Si modificar /etc/fstab no ayuda, deshaz tu cambio en /etc/fstab y agrega esta línea a /etc/rc.local en su lugar (antes de la línea exit 0):

vi /etc/rc.local

| [...] /bin/mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/glusterfs [...] |

Esto asegura que el recurso compartido se monte después de que la red esté activa.

4 Pruebas

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/export 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/export
root@server1:~# ls -l /data/export  
total 0  
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1  
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test2  
root@server1:~#

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/export en server2.example.com:

server2.example.com:

ls -l /data/export
root@server2:~# ls -l /data/export  
total 0  
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1  
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test3  
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test4  
root@server2:~#

Vamos a reiniciar server1.example.com y a ver el directorio /data/export:

server1.example.com:

ls -l /data/export
root@server1:~# ls -l /data/export  
total 0  
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1  
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test2  
root@server1:~#

Como ves, server1.example.com no ha notado los cambios que ocurrieron mientras estaba apagado. 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 8  
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1  
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test3  
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test4  
root@client1:~#

Ahora echa un vistazo al directorio /data/export en server1.example.com nuevamente, y deberías ver que los cambios se han replicado a ese nodo:

server1.example.com:

ls -l /data/export
root@server1:~# ls -l /data/export  
total 8  
-rw-r--r-- 1 root root 0 2012-03-29 14:51 test1  
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test3  
-rw-r--r-- 1 root root 0 2012-03-29 14:52 test4  
root@server1:~#

5 Enlaces

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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