En el artículo de hoy vamos a montar un cluster de almacenamiento con dos servidores CentOS. Para la implementación del cluster vamos a usar GlusterFS, que es un sistema de ficheros en espacio de usuarios (FUSE). Sigue la arquitectura clásica de cliente-servidor y puede escalar hasta varios PetaBytes.
Introducción.
Para este tutorial vamos a utilizar dos servidores:
- server1 192.168.2.100
- server2 192.168.2.101
Y un cliente:
Todos los componentes deben poder resolver los nombres de los demás, si no se puede por DNS debes editar el fichero /etc/hosts:
# /etc/hosts
192.168.2.100 server1
192.168.2.101 server2
192.168.2.102 client1
Configuración de los servidores.
Antes de empezar con GlusterFS, vamos a preparar el sistema añadiendo las herramientas de desarrollo y librerías. En cada uno de los servidores ejecutamos:
# yum groupinstall 'Development Tools'
# yum groupinstall 'Development Libraries'
# yum install libibverbs-devel fuse-devel
Descargamos el software y lo compilamos:
# mkdir sandbox
# cd sandbox
# wget http://download.gluster.com/pub/gluster/glusterfs/3.0/LATEST/glusterfs-3.0.8.tar.gz
# tar zxvf glusterfs-3.0.8.tar.gz
# cd glusterfs-3.0.8
# ./configure
Al finalizar deberemos ver esto:
GlusterFS configure summary
===========================
FUSE client : yes
Infiniband verbs : yes
epoll IO multiplex : yes
libglusterfsclient : yes
argp-standalone : no
fusermount : no
Entonces compilamos e instalamos.
# make && make install
Enlazamos con las librerías dinámicas.
# ldconfig
Podemos ahora comprobar que se ha instalado correctamente.
# glusterfs --version
glusterfs 3.0.8 built on May 13 2011 20:20:55
Repository revision: v3.0.8
Copyright (c) 2006-2009 Gluster Inc.
GlusterFS comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GlusterFS under the terms of the GNU General Public License.
Vamos ahora a crear una estructura de directorio desde el que exportar el volumen. En este tutorial queremos compartir /home por lo que vamos a montar una porción de disco sobre el directorio que exportamos con Gluster para más adelante montar en el cliente en /home.
Creamos los siguientes directorios.
# mkdir -p /data/{exports,export-ns} /etc/glusterfs
En /etc/glusterfs/glusterfsd.vol añadimos el fichero de configuración para nuestro volumen.
volume posix
type storage/posix
option directory /data/exports
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.2.*
subvolumes brick
end-volume
Para aumentar la seguridad, sólo se permiten las direcciones listadas en la línea option auth.addr.brick.allow, admite comodines y varias direcciones separadas por comas. En este ejemplo hemos dado acceso a todo el rango 192.168.2.0/24.
Como hemos compilado sin pasar ninguna opción previa al configure, vamos a crear un enlace simbólico para que el sistema encuentre el binario.
# ln -s /usr/local/sbin/glusterfsd /sbin/glusterfsd
Ya podemos arrancar el demonio y configurar su nivel de arranque.
# chkconfig --levels 35 glusterfsd on
# /etc/init.d/glusterfsd start
Starting glusterfsd: [ OK ]
Ahora vamos a añadir una partición en /etc/fstab la cual montaremos en /data/exports
# vim /etc/fstab
/dev/sda3 /data/exports ext3 defaults 0 0
En cada servidor se hace esto, es lo que ofreceremos a los clientes a través de Gluster.
Configuración de los clientes.
Pasamos ahora a la configuración de los clientes, empezamos instalando las dependencias de compilación y librerías para acabar montando el volumen Gluster en /home. Estos pasos hay que hacerlos en cada cliente.
# yum groupinstall 'Development Tools'
# yum groupinstall 'Development Libraries'
# yum install libibverbs-devel fuse-devel
Ahora cargamos el módulo fuse que se encargará de hacer de interface con el Kernel.
# modprobe fuse
Configuramos el sistema para que cargue el módulo con cada arranque.
# echo "modprobe fuse" >> /etc/rc.modules
# chmod +x /etc/rc.modules
En cada cliente descargamos e instalamos el software. Tal y como hemos hecho antes.
# mkdir sandbox
# cd sandbox
# wget http://download.gluster.com/pub/gluster/glusterfs/3.0/LATEST/glusterfs-3.0.8.tar.gz
# tar zxvf glusterfs-3.0.8.tar.gz
# cd glusterfs-3.0.8
# ./configure
Al finalizar deberemos ver esto:
GlusterFS configure summary
===========================
FUSE client : yes
Infiniband verbs : yes
epoll IO multiplex : yes
libglusterfsclient : yes
argp-standalone : no
fusermount : no
Entonces compilamos e instalamos.
# make && make install
Enlazamos con las librerías dinámicas.
# ldconfig
Podemos ahora comprobar que se ha instalado correctamente.
# glusterfs --version
glusterfs 3.0.8 built on May 13 2011 20:20:55
Repository revision: v3.0.8
Copyright (c) 2006-2009 Gluster Inc.
GlusterFS comes with ABSOLUTELY NO WARRANTY.
You may redistribute copies of GlusterFS under the terms of the GNU General Public License.
Creamos el directorio de configuración de GlusterFS.
# mkdir /etc/glusterfs
Añadimos lo siguiente al fichero glusterfs.vol
vim /etc/glusterfs/glusterfs.vol
volume remote1
type protocol/client
option transport-type tcp/client
option remote-host server1
option remote-subvolume brick
end-volume
volume remote2
type protocol/client
option transport-type tcp/client
option remote-host server2
option remote-subvolume brick
end-volume
volume stripe
type cluster/stripe
option block-size 1MB
subvolumes remote1 remote2
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
Y ya podemos montar el volumen en /home:
# glusterfs -f /etc/glusterfs/glusterfs.vol /home
Podemos consultar que está montado ejecutando mount:
# mount
glusterfs#/etc/glusterfs/glusterfs.vol on /home type fuse (rw,allow_other,default_permissions,max_read=131072)
También ver el espacio disponible con df:
# df -hT
S.ficheros Tipo Tamaño Usado Disp Uso% Montado en
/dev/sda1 ext3 2,9G 1,7G 1,1G 63% /
tmpfs tmpfs 125M 0 125M 0% /dev/shm
glusterfs#/etc/glusterfs/glusterfs.vol
fuse 6,5G 143M 6,1G 3% /home
Para hacer el montaje permanente, añadimos la siguiente línea a /etc/fstab
/etc/glusterfs/glusterfs.vol /home glusterfs defaults,_netdev 0 0
Fallos.
Si has llegado hasta aquí significa que todo ha ido bien, si has encontrado algún problema los ficheros de logs de Gluster se encuentra en:
/usr/local/var/log/glusterfs/
Revisa que todas las máquinas resuelven los nombres, que la línea auth.addr.brick.allow está bien configurada y que has escrito correctamente los nombres de los directorios. Estos son problemas comunes.
Por ejemplo, si algún cliente no está autorizado a montar el volumen, pasará esto:
# glusterfs -f /etc/glusterfs/glusterfs.vol /home
# mount
/dev/sda1 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts on /dev/pts type devpts (rw,gid=5,mode=620)
tmpfs on /dev/shm type tmpfs (rw)
none on /proc/sys/fs/binfmt_misc type binfmt_misc (rw)
sunrpc on /var/lib/nfs/rpc_pipefs type rpc_pipefs (rw)
glusterfs#/etc/glusterfs/glusterfs.vol on /home type fuse (rw,allow_other,default_permissions,max_read=131072)
# df -hT
S.ficheros Tipo Tamaño Usado Disp Uso% Montado en
/dev/sda1 ext3 2,9G 1,7G 1,1G 63% /
tmpfs tmpfs 125M 0 125M 0% /dev/shm
/dev/sda3 ext3 6,5G 143M 6,1G 3% /data/exports
df: «/home»: Argumento inválido
Vemos que se ha producido un error que no es muy descriptivo del problema real que está ocurriendo ya que sí ha montado el volumen.
Conclusión.
Este sistema proporciona escalabilidad y tolerancia. El echo de exportar un directorio nos permite montar en ese directorio el disco físico un volumen LVM, un RAID, combinaciones de ambos, sistemas NAS o DAS y así montar nuestro propio DropBox!
Recent Comments
(15 weeks ago)
(28 weeks ago)
(44 weeks ago)
(44 weeks ago)
(46 weeks ago)
(46 weeks ago)
(48 weeks ago)
(48 weeks ago)
(48 weeks ago)
(48 weeks ago)