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 se puedan asignar a varios dispositivos físicos en forma rotativa y, por lo tanto, se escriban simultáneamente) en cuatro servidores de almacenamiento únicos (ejecutando CentOS 5.4) con GlusterFS. El sistema cliente (también CentOS 5.4) 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 contenga las siguientes líneas en los cinco sistemas:
vi /etc/hosts
(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 para CentOS 5.4, por lo tanto, tenemos que construirlo nosotros mismos. Primero instalamos los requisitos previos:
yum groupinstall 'Development Tools'
yum groupinstall 'Development Libraries'
yum install libibverbs-devel fuse-devel
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.9.tar.gz
tar xvfz glusterfs-2.0.9.tar .gz
cd glusterfs-2.0.9
./configurar
Al final del comando ./configure, debería ver algo como esto:
[...]
Resumen de configuración de GlusterFS
==========================
FUSE cliente :yes
Infiniband verbs : yes
epoll IO multiplex : yes
Berkeley-DB : yes
libglusterfsclient : yes
argp-standalone : no
[[correo electrónico protegido] glusterfs-2.0.9]#
hacer &&hacer instalar
ldconfig
Compruebe la versión de GlusterFS después (debe ser 2.0.9):
glusterfs --version
[[email protected] glusterfs-2.0.9]# glusterfs --version
glusterfs 2.0.9 construido el 1 de marzo de 2010 15:34:50
Revisión del repositorio:v2.0.9
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] glusterfs-2.0.9]#
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
[...] 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 [...] |
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 el siguiente enlace simbólico...
ln -s /usr/local/sbin/glusterfsd /sbin/glusterfsd
... y luego los enlaces de inicio del sistema para el servidor GlusterFS e iniciarlo:
chkconfig --levels 35 glusterfsd en
/etc/init.d/glusterfsd start
3 Configuración del cliente GlusterFS
cliente1.ejemplo.com:
GlusterFS no está disponible como paquete para CentOS 5.4, por lo tanto, tenemos que construirlo nosotros mismos. Primero instalamos los requisitos previos:
yum groupinstall 'Development Tools'
yum groupinstall 'Development Libraries'
yum install libibverbs-devel fuse-devel
Luego cargamos el módulo del núcleo del fusible...
modprobe fuse
... y cree el archivo /etc/rc.modules con el siguiente contenido para que el módulo del núcleo de fusibles se cargue automáticamente cada vez que se inicie el sistema:
vi /etc/rc.modules
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 |
Hacer el archivo ejecutable:
chmod +x /etc/rc.modules
Luego descargamos las fuentes de GlusterFS 2.0.9 (¡tenga en cuenta que esta es la misma versión que está instalada en el servidor!) y compilamos GlusterFS de la siguiente manera:
cd /tmp
wget http://ftp.gluster.com/pub/gluster/glusterfs/2.0/LATEST/glusterfs-2.0.9.tar.gz
tar xvfz glusterfs-2.0.9.tar .gz
cd glusterfs-2.0.9
./configurar
Al final del comando ./configure, debería ver algo como esto:
[...]
Resumen de configuración de GlusterFS
==========================
FUSE cliente :yes
Infiniband verbs : yes
epoll IO multiplex : yes
Berkeley-DB : yes
libglusterfsclient : yes
argp-standalone : no
hacer &&hacer instalar
ldconfig
Compruebe la versión de GlusterFS después (debe ser 2.0.9):
glusterfs --version
[[email protected] glusterfs-2.0.9]# glusterfs --version
glusterfs 2.0.9 construido el 1 de marzo de 2010 15:58:06
Revisión del repositorio:v2.0.9
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] glusterfs-2.0.9]#
Luego creamos 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
modprobe fuse |
¡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/mapper/VolGroup00-LogVol00 on / type ext3 (rw)
proc on /proc type proc (rw)
sysfs on /sys type sysfs (rw)
devpts en /dev/pts escriba devpts (rw,gid=5,mode=620)
/dev/sda1 en /boot escriba ext3 (rw)
tmpfs en / dev/shm escriba tmpfs (rw)
ninguno en /proc/sys/fs/binfmt_misc escriba binfmt_misc (rw)
sunrpc en /var/lib/nfs/rpc_pipefs escriba rpc_pipefs (rw)
glusterfs#/etc/glusterfs/glusterfs.vol en /mnt/glusterfs type fuse (rw,allow_other,default_permissions,max_read=131072)
[[email protected] ~]#
... y...
df -h
[[email protected] ~]# df -h
Sistema de archivos Tamaño Usado Avail Use% Montado en
/dev/mapper/VolGroup00-LogVol00
29G 2.2G 25 %/
/dev/sda1 99m 13m 82m 14%/boot
tmpfs 187m 0 187m 0%/dev/shm
glusterfs#/etc/glusterfs/glusterfs.vol
112g 2.3g 110g 2%/ mnt/glusterfs
[[correo electrónico protegido] ~]#
(server1.example.com, server2.example.com, server3.example.com y server4.example.com tienen cada uno aproximadamente 28 GB de espacio para el sistema de archivos GlusterFS, por lo que el recurso compartido resultante tiene un tamaño de aproximadamente 4 x 28 GB ( 112GB).)
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
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 |
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
[[email protected] ~]# ls -l /mnt/glusterfs
total 1024032
-rw-r--r-- 1 root root 1048576000 2010-02-23 17:31 test.img
[[correo electrónico protegido] ~]#
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
[[email protected] ~]# ls -l /data/export
total 256008
-rw-r--r-- 1 root root 1045430272 2010-02-23 17:31 test.img
[[correo electrónico protegido] ~]#
servidor2.ejemplo.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
total 256008
-rw-r--r-- 1 root root 1046478848 2010-02-23 17:27 test.img
[[correo electrónico protegido] ~]#
servidor3.ejemplo.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
total 256008
-rw-r--r-- 1 root root 1047527424 2010-02-23 17:26 test.img
[[correo electrónico protegido] ~]#
servidor4.ejemplo.com:
ls -l /data/export
[[email protected] ~]# ls -l /data/export
total 256008
-rw-r--r-- 1 root root 1048576000 2010-02-23 17:30 test.img
[[correo electrónico protegido] ~]#
5 Enlaces
- GlusterFS:http://www.gluster.org/
- CentOS:http://www.centos.org/
-
Creación de un servidor de almacenamiento independiente similar a NFS con GlusterFS en CentOS 5.4
-
Almacenamiento de alta disponibilidad con GlusterFS en CentOS 5.4:replicación automática de archivos (espejo) en dos servidores de almacenamiento
-
Almacenamiento replicado distribuido en cuatro nodos de almacenamiento con GlusterFS en CentOS 5.4
-
Almacenamiento distribuido en cuatro nodos de almacenamiento con GlusterFS en CentOS 5.4
-
Almacenamiento de alta disponibilidad con GlusterFS 3.2.x en CentOS 6.3:replicación automática de archivos (espejo) en dos servidores de almacenamiento
Almacenamiento distribuido en cuatro nodos de almacenamiento con GlusterFS 3.2.x en Ubuntu 12.10
Almacenamiento replicado distribuido en cuatro nodos de almacenamiento con GlusterFS 3.2.x en Ubuntu 12.10
Distribución en cuatro nodos de almacenamiento con GlusterFS 3.2.x en Ubuntu 12.10
Almacenamiento distribuido en cuatro nodos de almacenamiento con GlusterFS en Debian Lenny
Almacenamiento replicado distribuido en cuatro nodos de almacenamiento con GlusterFS en Debian Lenny
Distribución de cuatro nodos de almacenamiento con GlusterFS en Debian Lenny
[...] /etc/glusterfs/glusterfs.vol /mnt/glusterfs glusterfs defaults 0 0 |