Este tutorial muestra cómo combinar cuatro servidores de almacenamiento individuales (que ejecutan Debian Lenny) en un gran servidor de almacenamiento (almacenamiento distribuido) con GlusterFS. El sistema cliente (también Debian Lenny) 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.
Tenga en cuenta que este tipo de almacenamiento (almacenamiento distribuido) no proporciona funciones de alta disponibilidad, como sería el caso del almacenamiento replicado.
¡No emito ninguna garantía de que esto funcione para usted!
1 nota preliminar
En este tutorial utilizo cinco sistemas, cuatro 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)
- servidor3.ejemplo.com:dirección IP 192.168.0.102 (servidor)
- servidor4.ejemplo.com:dirección IP 192.168.0.103 (servidor)
- cliente1.ejemplo.com:dirección IP 192.168.0.104 (cliente)
Los cinco 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 cinco 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 server3.example.com server3
192.168.0.103 server4.example.com server4
192.168.0.104 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 si los nombres de host se pueden resolver o no).
2 Configuración de los servidores GlusterFS
servidor1.ejemplo.com/servidor2.ejemplo.com/servidor3.ejemplo.com/servidor4.ejemplo.com:
GlusterFS no está disponible como paquete Debian para Debian Lenny, por lo tanto, tenemos que construirlo nosotros mismos. Primero instalamos los requisitos previos:
aptitude install sshfs build-essential flex bison byacc libdb4.6 libdb4.6-dev
Luego, descargamos la última versión de GlusterFS de http://www.gluster.org/download.php y la construimos de la siguiente manera:
cd /tmp
wget http://ftp.gluster.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.1.tar.gz
tar xvfz glusterfs-2.0.1.tar .gz
cd glusterfs-2.0.1
./configure --prefix=/usr> /dev/null
server1:/tmp/glusterfs-2.0.1# ./configure --prefix=/usr > /dev/null
GlusterFS configure summary
===========================
FUSE cliente : no
Infiniband verbos : no
epoll IO multiplex : sí
Berkeley-DB :yes
libglusterfsclient : yes
mod_glusterfs : no ()
argp-standalone : no
server1:/tmp/glusterfs-2.0.1#
hacer &&hacer instalar
ldconfig
El comando
glusterfs --version
ahora debería mostrar la versión de GlusterFS que acaba de compilar (2.0.1 en este caso):
server1:/tmp/glusterfs-2.0.1# glusterfs --version
glusterfs 2.0.1 creado el 29 de mayo de 2009 17:23:10
Revisión del repositorio:5c1d9108c1529a1155963cb1911f8870a674ab5b
Copyright (c) 2006 -2009 Z RESEARCH 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.
servidor1:/tmp/glusterfs-2.0.1#
A continuación, creamos algunos directorios:
mkdir /data/
mkdir /data/export
mkdir /data/export-ns
mkdir /etc/glusterfs
Ahora creamos el archivo de configuración del servidor GlusterFS /etc/glusterfs/glusterfsd.vol que define qué directorio se exportará (/data/export) y qué cliente puede conectarse (192.168.0.104 =client1.example.com):
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.104
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.104, 192.168.0.105).
Luego creamos los enlaces de inicio del sistema para el script de inicio glusterfsd...
update-rc.d glusterfsd defaults
... e inicie glusterfsd:
/etc/init.d/glusterfsd start
3 Configuración del cliente GlusterFS
cliente1.ejemplo.com:
En el cliente, necesitamos instalar fuse y GlusterFS. En lugar de instalar el paquete libfuse2 desde el repositorio de Debian, instalamos una versión parcheada con mejor soporte para GlusterFS.
Primero volvemos a instalar los prerrequisitos:
aptitude install sshfs build-essential flex bison byacc libdb4.6 libdb4.6-dev
Luego construimos fuse de la siguiente manera (puede encontrar la última versión de fuse parcheada en ftp://ftp.zresearch.com/pub/gluster/glusterfs/fuse/):
cd /tmp
wget ftp://ftp.zresearch.com/pub/gluster/glusterfs/fuse/fuse-2.7.4glfs11.tar.gz
tar -zxvf fuse-2.7.4glfs11.tar. gz
cd fuse-2.7.4glfs11
./configure
hacer &&hacer instalar
Luego construimos GlusterFS (igual que en el servidor)...
cd /tmp
wget http://ftp.gluster.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.1.tar.gz
tar xvfz glusterfs-2.0.1.tar .gz
cd glusterfs-2.0.1
./configure --prefix=/usr> /dev/null
hacer &&hacer instalar
ldconfig
glusterfs --version
... y crea los siguientes dos directorios:
mkdir /mnt/glusterfs
mkdir /etc/glusterfs
A continuación creamos el archivo /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 remote3
type protocol/client
option transport-type tcp
option remote-host server3.example.com
option remote-subvolume brick
end-volume
volume remote4
type protocol/client
option transport-type tcp
option remote-host server4.example.com
option remote-subvolume brick
end-volume
volume distribute
type cluster/distribute
subvolumes remote1 remote2 remote3 remote4
end-volume
volume writebehind
type performance/write-behind
option window-size 1MB
subvolumes distribute
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
cliente1:/tmp/glusterfs-2.0.1# 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 escriba tmpfs (rw,mode=0755)
tmpfs en /dev/shm escriba tmpfs (rw,nosuid,nodev)
devpts en /dev/pts escriba devpts (rw,noexec,nosuid,gid =5,modo=620)
fusible en /sys/fs/fuse/conexiones tipo fusectl (rw)
/etc/glusterfs/glusterfs.vol en /mnt/glusterfs tipo fuse.glusterfs (rw, max_read=131072,allow_other,default_permissions)
cliente1:/tmp/glusterfs-2.0.1#
... y...
df -h
Client1:/tmp/Glusterfs-2.0.1# df -h
Tamaño del sistema de archivos utilizado disponible use%montado en
/dev/sda1 29g 935m 27g 4%/
TMPFS 126M 0 126M 0% /lib/init/rw
udev 10m 80k 10m 1%/dev
tmpfs 126m 0 126m 0%/dev/shm
/etc/glusterfs/glusterfs.vol
105g 3.4 G 96G 4 % /mnt/glusterfs
cliente1:/tmp/glusterfs-2.0.1#
(server1.example.com, server2.example.com, server3.example.com y server4.example.com tienen cada uno aproximadamente 26 GB de espacio para el sistema de archivos GlusterFS, por lo que el recurso compartido resultante tiene un tamaño de aproximadamente 4 x 26 GB ( 105 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 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
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
toque /mnt/glusterfs/test3
toque /mnt/glusterfs/test4
toque /mnt/glusterfs/ test5
toque /mnt/glusterfs/test6
Ahora revisemos el directorio /data/export en server1.example.com, server2.example.com, server3.example.com y server4.example.com. Notará que cada nodo de almacenamiento contiene solo una parte de los archivos/directorios que componen el recurso compartido GlusterFS en el cliente:
servidor1.ejemplo.com:
ls -l /data/export
servidor1:/tmp/glusterfs-2.0.1# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2009-06-02 18:04 test1
-rw-r--r-- 1 root root 0 2009-06-02 18:05 test2
-rw-r--r-- 1 root root 0 2009-06-02 18:06 prueba5
servidor1:/tmp/glusterfs-2.0.1#
servidor2.ejemplo.com:
ls -l /data/export
servidor2:/tmp/glusterfs-2.0.1# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2009-06-02 18:06 test4
servidor2:/tmp/glusterfs-2.0.1#
servidor3.ejemplo.com:
ls -l /data/export
servidor3:/tmp/glusterfs-2.0.1# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2009-06-02 18:07 test6
servidor3:/tmp/glusterfs-2.0.1#
servidor4.ejemplo.com:
ls -l /data/export
server4:/tmp/glusterfs-2.0.1# ls -l /data/export
total 0
-rw-r--r-- 1 root root 0 2009-06-02 18:06 test3
servidor4:/tmp/glusterfs-2.0.1#
5 Enlaces
- GlusterFS:http://www.gluster.org/
- Debian:http://www.debian.org/