Este tutorial muestra cómo configurar un almacenamiento de alta disponibilidad con dos servidores de almacenamiento (Debian Squeeze) que usan GlusterFS. Cada servidor de almacenamiento será un espejo del otro servidor de almacenamiento y los archivos se replicarán automáticamente en ambos servidores de almacenamiento. El sistema cliente (también Debian Squeeze) 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 peta-bytes. Agrega varios bloques de almacenamiento sobre la interconexión Infiniband RDMA o TCP/IP en un gran sistema de archivos de red paralelo. Los bloques de almacenamiento se pueden fabricar con cualquier hardware básico, como servidores x86_64 con SATA-II RAID e Infiniband HBA.
¡No emito ninguna garantía de que esto funcione para usted!
1 nota preliminar
En este tutorial utilizo tres sistemas, dos servidores y un cliente:
- servidor1.ejemplo.com:dirección IP 192.168.0.100 (servidor)
- servidor2.ejemplo.com:dirección IP 192.168.0.101 (servidor)
- cliente1.ejemplo.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, debe editar el archivo /etc/hosts para que tenga el siguiente aspecto 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
# The following lines are desirable for IPv6 capable hosts
::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 siguiente configuración. Si prefiere usar direcciones IP, no tiene que preocuparse por si los nombres de host se pueden resolver o no).
2 Configuración de los servidores GlusterFS
servidor1.ejemplo.com/servidor2.ejemplo.com:
GlusterFS está disponible como paquete para Debian Squeeze, por lo que podemos instalarlo de la siguiente manera:
apt-get install glusterfs-server
El comando
glusterfs --version
ahora debería mostrar la versión de GlusterFS que acaba de instalar (3.0.5 en este caso):
[email protected]:~# glusterfs --version
glusterfs 3.0.5 compilado el 13 de julio de 2010 16:44:21
Revisión del repositorio:v3.0.5
Copyright (c) 2006-2009 Gluster Inc.
GlusterFS viene SIN GARANTÍA EN ABSOLUTO.
Usted puede redistribuir copias de GlusterFS bajo los términos de la Licencia Pública General GNU.
[ correo electrónico protegido]:~#
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é el cliente puede 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 |
Tenga en cuenta que es posible utilizar comodines para las direcciones IP (como 192.168.*) y que puede especificar varias direcciones IP separadas por comas (por ejemplo, 192.168.0.102,192.168.0.103).
Luego iniciamos el servidor GlusterFS:
/etc/init.d/glusterfs-server start
3 Configuración del cliente GlusterFS
cliente1.ejemplo.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 (primero hacemos una copia de seguridad del archivo /etc/glusterfs/glusterfs.vol original):
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úrese de utilizar los nombres de host del servidor o las direcciones IP correctos en las líneas de host remoto de opciones!
¡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ía ver el nuevo recurso compartido en los resultados de...
mount
[email protected]:~# mount
/dev/sda1 en / escriba ext3 (rw,errors=remount-ro)
tmpfs en /lib/init/rw escriba tmpfs (rw,nosuid,mode=0755)
proc en /proc tipo proc (rw,noexec,nosuid,nodev)
sysfs en /sys tipo sysfs (rw,noexec,nosuid,nodev)
udev en /dev tipo tmpfs (rw,mode=0755)
tmpfs en /dev/shm escriba tmpfs (rw,nosuid,nodev)
devpts en /dev/pts escriba devpts (rw,noexec,nosuid,gid=5,mode =620)
fusectl en /sys/fs/fuse/conexiones escriba fusectl (rw)
/etc/glusterfs/glusterfs.vol en /mnt/glusterfs escriba fuse.glusterfs (rw,allow_other,default_permissions, max_read=131072)
[correo electrónico protegido]:~#
... y...
df -h
[correo electrónico protegido]:~#df -h
Tamaño del sistema de archivos utilizado disponible%montado en
/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
[correo electrónico protegido]:~#
(server1.example.com y server2.example.com tienen cada uno 18 GB de espacio para el sistema de archivos GlusterFS, pero debido a que los datos están duplicados, el cliente no ve 36 GB (2 x 18 GB), sino solo 18 GB).
En lugar de montar el recurso compartido GlusterFS manualmente en el cliente, puede modificar /etc/fstab para que el recurso compartido se monte automáticamente cuando se inicie el cliente.
Abra /etc/fstab y agregue la siguiente línea:
vi /etc/fstab
[...]
/etc/glusterfs/glusterfs.vol /mnt/glusterfs glusterfs defaults,_netdev 0 0 |
Para probar si su /etc/fstab modificado está funcionando, reinicie el cliente:
reboot
Después del reinicio, debería encontrar el recurso compartido en las salidas de...
df -h
... y...
mount
Si modificar /etc/fstab no ayuda, deshaga su cambio a /etc/fstab y agregue esta línea a /etc/rc.local en su lugar (antes de la línea de salida 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 GlusterFS:
cliente1.ejemplo.com:
toque /mnt/glusterfs/test1
toque /mnt/glusterfs/test2
Ahora revisemos el directorio /data/export en server1.example.com y server2.example.com. Los archivos test1 y test2 deben estar presentes en cada nodo:
servidor1.ejemplo.com/servidor2.ejemplo.com:
ls -l /data/export
[email protected]:~# 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
[correo electrónico protegido]:~#
Ahora cerramos server1.example.com y agregamos/eliminamos algunos archivos en el recurso compartido GlusterFS en client1.example.com.
servidor1.ejemplo.com:
shutdown -h now
cliente1.ejemplo.com:
toque /mnt/glusterfs/test3
toque /mnt/glusterfs/test4
rm -f /mnt/glusterfs/test2
Los cambios deberían estar visibles en el directorio /data/export en server2.example.com:
servidor2.ejemplo.com:
ls -l /data/export
[email protected]:~# 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
[correo electrónico protegido]:~#
Iniciemos server1.example.com nuevamente y echemos un vistazo al directorio /data/export:
servidor1.ejemplo.com:
ls -l /data/export
[email protected]:~# 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
[correo electrónico protegido]:~#
Como puede ver, server1.example.com no ha notado los cambios que ocurrieron mientras estaba inactivo. Esto es fácil de arreglar, todo lo que tenemos que hacer es invocar un comando de lectura en el recurso compartido GlusterFS en client1.example.com, por ejemplo:
cliente1.ejemplo.com:
ls -l /mnt/glusterfs/
[email protected]:~# 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
[correo electrónico protegido]:~#
Ahora eche un vistazo al directorio /data/export en server1.example.com nuevamente, y debería ver que los cambios se han replicado en ese nodo:
servidor1.ejemplo.com:
ls -l /data/export
[email protected]:~# 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
[correo electrónico protegido]:~#
5 Enlaces
- GlusterFS:http://www.gluster.org/
- Debian:http://www.debian.org/