Este tutorial muestra cómo configurar un almacenamiento de alta disponibilidad con dos servidores de almacenamiento (Debian Wheezy) 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 Wheezy) 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.
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:
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 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 Wheezy, por lo que podemos instalarlo de la siguiente manera:
apt-get install glusterfs-server
El comando
glusterfsd --version
ahora debería mostrar la versión de GlusterFS que acaba de instalar (3.2.7 en este caso):
[email protected]:~# glusterfsd --version
glusterfs 3.2.7 compilado el 12 de noviembre de 2012 19:30:08
Revisión del repositorio:git://git.gluster.com/glusterfs.git
Copyright (c) 2006-2011 Gluster Inc.
GlusterFS viene SIN NINGUNA GARANTÍA EN ABSOLUTO.
Usted puede redistribuir copias de GlusterFS bajo los términos del Licencia pública general de GNU.
[email protected]:~#
Si usa un firewall, asegúrese de que los puertos TCP 111, 24007, 24008, 24009-(24009 + cantidad de ladrillos en todos los volúmenes) estén abiertos en server1.example.com y server2.example.com.
A continuación, debemos agregar server2.example.com al grupo de almacenamiento de confianza (tenga en cuenta que estoy ejecutando todos los comandos de configuración de GlusterFS desde server1.example.com, pero también puede ejecutarlos desde server2.example.com porque la configuración es replicado entre los nodos GlusterFS; solo asegúrese de usar los nombres de host o las direcciones IP correctos):
servidor1.ejemplo.com:
En server1.example.com, ejecute
gluster peer probe server2.example.com
[email protected]:~# gluster peer probe server2.example.com
Sonda exitosa
[email protected]:~#
El estado del grupo de almacenamiento de confianza ahora debería ser similar a este:
gluster peer status
[email protected]:~# gluster peer status
Número de pares:1
Nombre de host:server2.example.com
Uuid:d19cb707-7b23-4d11-8e9c-183cd0a18d96
Estado:Peer in Cluster (Connected)
[email protected]:~#
A continuación, creamos el recurso compartido llamado testvol con dos réplicas (tenga en cuenta que la cantidad de réplicas es igual a la cantidad de servidores en este caso porque queremos configurar la duplicación) en server1.example.com y server2.example.com en el /directorio de datos (este se creará si no existe):
gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data
[email protected]:~# gluster volume create testvol replica 2 transport tcp server1.example.com:/data server2.example.com:/data
La creación del volumen testvol se ha realizado correctamente. Inicie el volumen para acceder a los datos.
[email protected]:~#
Iniciar el volumen:
gluster volume start testvol
Es posible que el comando anterior le indique que la acción no tuvo éxito:
[email protected]:~# gluster volume start testvol
La prueba de volumen inicial no ha tenido éxito
[email protected]:~#
En este caso, debe verificar la salida de...
servidor1.ejemplo.com/servidor2.ejemplo.com:
netstat -tap | grep glusterfsd
en ambos servidores.
Si obtiene un resultado como este...
[correo electrónico protegido]:~# netstat -tap | GREP GLUSTERFSD
TCP 0 0*:24009*:*Escucha 1548 /Glusterfsd
TCP 0 0 Localhost.localdom:1019 Localhost.localdo:24007 establecido 1548 /Glusterfsd
[Correo electrónico protegido]:~ #
... todo está bien, pero si no obtiene ningún resultado...
[correo electrónico protegido]:~# netstat -tap | grep glusterfsd
[correo electrónico protegido]:~#
... reinicie el demonio GlusterFS en el servidor correspondiente (server2.example.com en este caso):
servidor2.ejemplo.com:
/etc/init.d/glusterfs-server restart
Luego verifique la salida de...
netstat -tap | grep glusterfsd
... de nuevo en ese servidor - ahora debería verse así:
[correo electrónico protegido]:~# netstat -tap | Grep Glusterfsd
TCP 0 0*:24010*:*Escucha 1458 /Glusterfsd
TCP 0 0 Localhost.localdom:1021 Localhost.Localdo:24007 establecido 1458 /Glusterfsd
[Correo electrónico protegido]:~ #
Ahora regrese a server1.example.com:
servidor1.ejemplo.com:
Puede verificar el estado del volumen con el comando
gluster volume info
[email protected]:~# gluster volume info
Nombre del volumen:testvol
Tipo:Replicar
Estado:Iniciado
Número de ladrillos:2
Tipo de transporte:tcp
Bricks:
Brick1:server1. ejemplo.com:/datos
Brick2:servidor2.ejemplo.com:/datos
[email protected]:~#
De forma predeterminada, todos los clientes pueden conectarse al volumen. Si desea otorgar acceso solo a client1.example.com (=192.168.0.102), ejecute:
gluster volume set testvol auth.allow 192.168.0.102
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).
La información del volumen ahora debería mostrar el estado actualizado:
gluster volume info
[email protected]:~# gluster volume info
Nombre del volumen:testvol
Tipo:Replicar
Estado:Iniciado
Número de ladrillos:2
Tipo de transporte:tcp
Bricks:
Brick1:server1. ejemplo.com:/datos
Brick2:servidor2.ejemplo.com:/datos
Opciones reconfiguradas:
auth.allow:192.168.0.102
[email protected]:~#
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
¡Eso es todo! Ahora podemos montar el sistema de archivos GlusterFS en /mnt/glusterfs con el siguiente comando:
mount.glusterfs server1.example.com:/testvol /mnt/glusterfs
(¡En lugar de server1.example.com, también puede usar server2.example.com en el comando anterior!)
Ahora debería ver el nuevo recurso compartido en los resultados de...
mount
[email protected]:~# mount
sysfs en /sys tipo sysfs (rw,nosuid,nodev,noexec,relatime)
proc en /proc tipo proc (rw,nosuid,nodev,noexec,relatime)
udev en /dev escriba devtmpfs (rw,relatime,size=10240k,nr_inodes=126813,mode=755)
devpts en /dev/pts escriba devpts (rw,nosuid,noexec,relatime,gid=5,mode=620,ptmxmode=000)
tmpfs activado /ejecutar tipo tmpfs (rw,nosuid,noexec,relatime,size=102704k,mode=755)
/dev/mapper/server1-root activado / escriba ext4 (rw,relatime,errors=remount-ro,user_xattr,barrier=1,data=ordered)
tmpfs en /ejecutar/bloquear escriba tmpfs (rw,nosuid,nodev,noexec,relatime,size=5120k )
tmpfs en /run/shm escriba tmpfs (rw,nosuid,nodev,noexec,relatime,size=205400k)
/dev/sda1 en /boot escriba ext2 (rw,relatime,errors=continue)
rpc_pipefs en /var/lib/nfs/rpc_pipefs escriba rpc_pipefs (rw,relatime)
server1.example.com:/testvol en /mnt/glusterfs escriba fuse.glusterfs (rw,relatime,user_id=0 ,group_id=0,default_permissions,allow_other,max_read=131072)
fusible en /sys/fs/fu se/conexiones tipo fusectl (rw,relatime)
[email protected]:~#
... y...
df -h
[Correo electrónico protegido]:~#df -h
Tamaño del sistema de archivos utilizado Avance Use%montado en
rootfs 29g 1.2g 26g 5% /
udev 10m 0 10m 0% /dev
TMPFS 101M 240K 101M 1%/ejecución
/dev/mapper/server1-raot 29g 1.2g 26g 5%/
tmpfs 5.0m 0 5.0m 0%/run/bloquear
TMPFS 201M 0 201M 0% /run/shm
/dev/sda1 228M 18M 199M 9% /boot
server1.example.com:/testvol 29G 1.2G 26G 5% /mnt/glusterfs
[correo electrónico protegido]:~#
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
[...]
server1.example.com:/testvol /mnt/glusterfs glusterfs defaults,_netdev 0 0 |
(De nuevo, en lugar de server1.example.com, ¡también puede usar server2.example.com!)
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
Ahora revisemos el directorio /data 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
[email protected]:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 30 de septiembre 17:53 test1
-rw-r- -r-- 1 root root 0 30 de septiembre 17:53 test2
[email protected]:~#
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 en server2.example.com:
servidor2.ejemplo.com:
ls -l /data
[email protected]:~# ls -l /data
total 8
-rw-r--r-- 1 root root 0 30 de septiembre 17:53 test1
-rw-r- -r-- 1 root root 0 30 de septiembre 17:54 test3
-rw-r--r-- 1 root root 0 30 de septiembre 17:54 test4
[email protected]:~#
Iniciemos server1.example.com nuevamente y echemos un vistazo al directorio /data:
servidor1.ejemplo.com:
ls -l /data
[email protected]:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 30 de septiembre 17:53 test1
-rw-r- -r-- 1 root root 0 30 de septiembre 17:53 test2
[email protected]:~#
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 30 de septiembre 17:53 test1
-rw -r--r-- 1 root root 0 30 de septiembre 17:54 test3
-rw-r--r-- 1 root root 0 30 de septiembre 17:54 test4
[email protected]:~ #
Ahora eche un vistazo al directorio /data en server1.example.com nuevamente, y debería ver que los cambios se han replicado en ese nodo:
servidor1.ejemplo.com:
ls -l /data
[email protected]:~# ls -l /data
total 0
-rw-r--r-- 1 root root 0 30 de septiembre 17:53 test1
-rw-r- -r-- 1 root root 0 30 de septiembre 17:54 test3
-rw-r--r-- 1 root root 0 30 de septiembre 17:54 test4
[email protected]:~#
5 Enlaces
- GlusterFS:http://www.gluster.org/
- Documentación de GlusterFS 3.2:http://download.gluster.com/pub/gluster/glusterfs/3.2/Documentation/AG/html/index.html
- Debian:http://www.debian.org/