Este tutorial muestra cómo realizar la fragmentación de datos (segmentación de datos lógicamente secuenciales, como un solo archivo, de modo que los segmentos puedan asignarse a múltiples dispositivos físicos en forma rotativa y, por lo tanto, escribirse simultáneamente) en cuatro servidores de almacenamiento únicos (que ejecutan Debian Lenny) 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 no proporciona características de alta disponibilidad/tolerancia a fallas, 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 por 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/server
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/client
option remote-host server1.example.com
option remote-subvolume brick
end-volume
volume remote2
type protocol/client
option transport-type tcp/client
option remote-host server2.example.com
option remote-subvolume brick
end-volume
volume remote3
type protocol/client
option transport-type tcp/client
option remote-host server3.example.com
option remote-subvolume brick
end-volume
volume remote4
type protocol/client
option transport-type tcp/client
option remote-host server4.example.com
option remote-subvolume brick
end-volume
volume stripe
type cluster/stripe
option block-size 1MB
subvolumes remote1 remote2 remote3 remote4
end-volume
volume writebehind
type performance/write-behind
option window-size 1MB
subvolumes stripe
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:~# montar
/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,max_read=131072,allow_other,default_permissions )
cliente1:~#
... y...
df -h
Cliente1:~#df -h
Tamaño del sistema de archivos utilizado disponible%Montado en
/dev/sda1 29g 896m 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.4g 96g 4%/mnt/ glusterfs
cliente1:~#
(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 un gran archivo de prueba en el recurso compartido GlusterFS:
cliente1.ejemplo.com:
dd if=/dev/zero of=/mnt/glusterfs/test.img bs=1024k count=1000
ls -l /mnt/glusterfs
cliente1:~# ls -l /mnt/glusterfs
total 1028032
-rw-r--r-- 1 raíz raíz 1048576000 2009-06-03 20:51 test.img
cliente1 :~#
Ahora revisemos el directorio /data/export en server1.example.com, server2.example.com, server3.example.com y server4.example.com. Debería ver el archivo test.img en cada nodo, pero con diferentes tamaños (debido a la división de datos):
servidor1.ejemplo.com:
ls -l /data/export
servidor1:~# ls -l /data/export
total 257008
-rw-r--r-- 1 raíz raíz 1045430272 2009-06-03 20:51 test.img
servidor1 :~#
servidor2.ejemplo.com:
ls -l /data/export
servidor2:~# ls -l /data/export
total 257008
-rw-r--r-- 1 raíz raíz 1046478848 2009-06-03 20:55 test.img
servidor2 :~#
servidor3.ejemplo.com:
ls -l /data/export
servidor3:~# ls -l /data/export
total 257008
-rw-r--r-- 1 raíz raíz 1047527424 2009-06-03 20:54 test.img
servidor3 :~#
servidor4.ejemplo.com:
ls -l /data/export
servidor4:~# ls -l /data/export
total 257008
-rw-r--r-- 1 raíz raíz 1048576000 2009-06-03 20:02 test.img
servidor4 :~#
5 Enlaces
- GlusterFS:http://www.gluster.org/
- Debian:http://www.debian.org/