Este tutorial va a enseñarnos cómo combinar cuatro servidores de almacenamiento individuales (ejecutando Ubuntu 12.04) en un solo «gran» servidor de almacenamiento (almacenamiento distribuido) con GlusterFS. La máquina cliente (un Ubuntu 12.04 como no podía ser de otra forma) será capaz de acceder al espacio de almacenamiento de la misma forma que lo haría con un sistema de ficheros local. GlusterFS es un sistema de ficheros en cluster que es capaz de escalas hasta varios petabytes. GlusterFS combina varios nodos de almacenamiento sobre Infiniband RDMA(Remote direct memory access) o TCP/IP interconectándolos en un gran sistema de ficheros de red. Una de las ventajas principales que presenta GlusterFS es que los nodos de almacenamiento pueden ser máquinas de uso común como servidores x86_64 con SATA-II RAID o fibra (Infiniband HBA).
Importante es hacer notar al lector que este tipo de almacenamiento (almacenamiento distribuido) no proporciona ninguna característica de alta disponibilidad, como pudiera ser el caso de almacenamiento replicado.
1 Nota preliminar
En este tutorial voy a usar 5 máquinas virtuales, cuatro servidores y un cliente:
- server1.casamier: IP 192.168.2.100 (servidor)
- server2.casamier: IP 192.168.2.101 (servidor)
- server3.casamier: IP 192.168.2.102 (servidor)
- server4.casamier: IP 192.168.2.103 (servidor)
- client1.casamier: IP 192.168.2.104 (cliente)
Todos los comandos que voy a ejecutar en el tutorial los voy a lanzar con privilegios de root, por lo tanto el lector puede o anteponer sudo a todos ellos o bien pasar a ser root con el siguiente:
sudo su
Los cinco sistemas intervinientes en este tutorial deben ser capaces de resolver los nombres de máquina, tanto el suyo como el resto. En mi caso tengo una máquina en casa que hace de cache DNS y va a ser ella quien resuelva. En el caso de que el lector no pueda resolver nombres con DNS, tendrá que editar el fichero /etc/hosts de todas las máquinas para que contenga dicha información:
vi /etc/hosts 127.0.0.1 localhost.localdomain localhost 192.168.2.100 server1.casamier server1 192.168.2.101 server2.casamier server2 192.168.2.102 server3.casamier server3 192.168.2.103 server4.casamier server4 192.168.2.104 client1.casamier 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 seria posible usar las direcciones IP en lugar de los nombres de máquina en el tutorial. En el caso de que el lector prefiera usar direcciones IP no seria necesario preocuparnos por las resoluciones de los nombres de las mismas)
2 Configurando los servidores GlusterFS
server1.casamier/server2.casamier/server3.casamier/server4.casamier:
GlusterFS esta disponible como un paquete para Ubuntu 12.04, por lo tanto podemos instalarlo así:
apt-get install glusterfs-server
El comando
glusterfsd --version
debe mostrarnos la versión de GlusterFS que acabamos de instalar (3.2.5 en este caso):
root@server1:~# glusterfsd --version glusterfs 3.2.5 built on Jan 31 2012 07:39:58 Repository revision: git://git.gluster.com/glusterfs.git Copyright (c) 2006-2011 Gluster Inc. <http://www.gluster.com> GlusterFS comes with ABSOLUTELY NO WARRANTY. You may redistribute copies of GlusterFS under the terms of the GNU General Public License. root@server1:~#
Si estas usando un firewall, asegúrate que los puertos TCP 111, 24007, 24008, 24009-(24009 + numero de nodos) están abiertos para server1.casamier,server2.casamier, server3.casamier, and server4.casamier.
El siguiente paso es añadir server2.casamier, server3.casamier, and server4.casamier al pool de almacenamiento de confianza (note el lector que en mi caso, todos los comandos de configuración de GlusterFS son ejecutados desde server1.casamier, pero el lector podría ejecutarlos desde cualquiera de los servidores puesto que la configuración es replicada al resto de los nodos GlusterFS – sólo debes asegurarte de usar los nombres o las direcciones IP correctas):
server1.casamier:
En server1.casamier, ejecutamos:
gluster peer probe server2.casamier gluster peer probe server3.casamier gluster peer probe server4.casamier
La salida debe ser la siguiente:
root@server1:~# gluster peer probe server2.casamier Probe successful root@server1:~#
El estado del pool de almacenamiento de confianza debería ser similar al siguiente:
gluster peer status root@server1:~# gluster peer status Number of Peers: 3 Hostname: server2.casamier Uuid: da79c994-eaf1-4c1c-a136-f8b273fb0c98 State: Peer in Cluster (Connected) Hostname: server3.casamier Uuid: 3e79bd9f-a4d5-4373-88e1-40f12861dcdd State: Peer in Cluster (Connected) Hostname: server4.casamier Uuid: c6215943-00f3-492f-9b69-3aa534c1d8f3 State: Peer in Cluster (Connected) root@server1:~#
Bien, el siguiente paso va a ser crear el recurso distribuido y compartido con nombre testvol en server1.casamier, server2.casamier, server3.casamier, and server4.casamier en el directorio /data (si no existen en tus sistemas créalos):
gluster volume create testvol transport tcp server1.casamier:/data server2.casamier:/data server3.casamier:/data server4.casamier:/data
root@server1:~# gluster volume create testvol transport tcp server1.casamier:/data server2.casamier:/data server3.casamier:/data server4.casamier:/data Creation of volume testvol has been successful. Please start the volume to access data. root@server1:~#
Vamos a levantar el volumen creado:
gluster volume start testvol
Es posible que el comando anterior te indique que no ha sido posible levantar el volumen:
root@server1:~# gluster volume start testvol Starting volume testvol has been unsuccessful root@server1:~#
En este caso verificad la salida de…
server1.casamier/server2.casamier/server3.casamier/server4.casamier:
netstat -tap | grep glusterfsd
en todos los servidores.
Si obtienes una salida como esta…
root@server1:~# netstat -tap | grep glusterfsd tcp 0 0 *:24009 *:* LISTEN 1110/glusterfsd tcp 0 0 localhost.localdom:1019 localhost.localdo:24007 ESTABLISHED 1110/glusterfsd root@server1:~#
… todo ha ido ok, pero si no obtienes ninguna…
root@server2:~# netstat -tap | grep glusterfsd root@server2:~# <code>root@server3:~# netstat -tap | grep glusterfsd root@server3:~# <code>root@server4:~# netstat -tap | grep glusterfsd root@server4:~#
… reinicia el demonio de GlusterFS en el servidor que corresponda (server2.casamier, server3.casamier, and server4.casamier en este caso):
server2.casamier/server3.casamier/server4.casamier:
/etc/init.d/glusterfs-server restart
Verificad la salida de…
netstat -tap | grep glusterfsd
… de nuevo en esos servidores – debería tener una pinta como la siguiente:
root@server2:~# netstat -tap | grep glusterfsd tcp 0 0 *:24009 *:* LISTEN 1152/glusterfsd tcp 0 0 localhost.localdom:1018 localhost.localdo:24007 ESTABLISHED 1152/glusterfsd root@server2:~#</code> <code>root@server3:~# netstat -tap | grep glusterfsd tcp 0 0 *:24009 *:* LISTEN 1311/glusterfsd tcp 0 0 localhost.localdom:1018 localhost.localdo:24007 ESTABLISHED 1311/glusterfsd root@server3:~#</code> <code>root@server4:~# netstat -tap | grep glusterfsd tcp 0 0 *:24009 *:* LISTEN 1297/glusterfsd tcp 0 0 localhost.localdom:1019 localhost.localdo:24007 ESTABLISHED 1297/glusterfsd root@server4:~#
Ahora de nuevo en server1.casamier podemos verificar el estado del volumen con el siguiente comando:
gluster volume info
root@server1:~# gluster volume info Volume Name: testvol Type: Distribute Status: Started Number of Bricks: 4 Transport-type: tcp Bricks: Brick1: server1.casamier:/data Brick2: server2.casamier:/data Brick3: server3.casamier:/data Brick4: server4.casamier:/data root@server1:~#
Por defecto, todos los clientes pueden conectar con el volumen. En el caso de que solo quisiéramos permitir el acceso a client1.casamier (= 192.168.2.104), ejecutaremos:
gluster volume set testvol auth.allow 192.168.2.104
Indicar sobre el comando anterior que se pueden usar comodines para las direcciones IP (ej 192.168.*) y que se pueden especificar múltiples direcciones IP separadas por comas (ej.192.168.2.104,192.168.2.105).
La información de volumen debiera mostrar ahora su estado actualizado:
gluster volume info
root@server1:~# gluster volume info Volume Name: testvol Type: Distribute Status: Started Number of Bricks: 4 Transport-type: tcp Bricks: Brick1: server1.casamier:/data Brick2: server2.casamier:/data Brick3: server3.casamier:/data Brick4: server4.casamier:/data Options Reconfigured: auth.allow: 192.168.2.104 root@server1:~#
3 Configuracion del cliente GlusterFS
Del lado del cliente, podemos instalar el cliente GlusterFS con el siguiente comando:
apt-get install glusterfs-client
Crearemos (ej) el siguiente directorio para el montaje:
mkdir /mnt/glusterfs
Pues esto es todo amigos! Ahora podemos montar el sistema de ficheros GlusterFS en /mnt/glusterfs con el siguiente comando:
mount.glusterfs server1.casamier:/testvol /mnt/glusterfs
(En el comando anterior, en lugar de server1.casamier puedes usar también server2.casamier o server3.casamier o server4.casamier!)
En esta situación debieras estar viendo el almacenamiento compartido en la salida de mount:
root@client1:~# mount /dev/mapper/server5-root on / type ext4 (rw,errors=remount-ro) proc on /proc type proc (rw,noexec,nosuid,nodev) sysfs on /sys type sysfs (rw,noexec,nosuid,nodev) fusectl on /sys/fs/fuse/connections type fusectl (rw) none on /sys/kernel/debug type debugfs (rw) none on /sys/kernel/security type securityfs (rw) udev on /dev type devtmpfs (rw,mode=0755) devpts on /dev/pts type devpts (rw,noexec,nosuid,gid=5,mode=0620) tmpfs on /run type tmpfs (rw,noexec,nosuid,size=10%,mode=0755) none on /run/lock type tmpfs (rw,noexec,nosuid,nodev,size=5242880) none on /run/shm type tmpfs (rw,nosuid,nodev) /dev/sda1 on /boot type ext2 (rw) server1.casamier:/testvol on /mnt/glusterfs type fuse.glusterfs (rw,allow_other,default_permissions,max_read=131072) root@client1:~#
… y df -h:
root@client1:~# df -h
Filesystem | Size | Used | Avail | Use% | Mounted on |
/dev/mapper/server5-root | 9G | 1.1G | 27G | 4% | |
/udev | 238M | 4.0K | 238M | 1% | |
/devtmpfs | 99M | 212K | 99M | 1% | |
/runnone | 5.0M | 0 | 5.0M | 0% | |
/run/locknone | 247M | 0 | 247M | 0% | |
/run/shm/dev/sda1 | 228M | 24M | 193M | 11% | |
/bootserver1.casamier:/testvol | 116G | 4.2G | 106G | 4% | /mnt/glusterfs |
root@client1:~# |
Siguiente paso, en lugar de montar el compartido GlusterFS manualmente en el cliente, modifiquemos el fichero /etc/fstab para que dicho montaje se realice de forma automática en el arranque.
Abrimos /etc/fstab y añadimos la siguiente linea:
vi /etc/fstab server1.casamier:/testvol /mnt/glusterfs glusterfs defaults,_netdev 0 0
(De nuevo, en el comando anterior, en lugar de server1.casamier puedes usar también server2.casamier o server3.casamier o server4.casamier!)
La mejor forma de verificar que la modificación de /etc/fstab esta funcionando es reiniciar el cliente:
reboot
Después del reinicio deberías ver el sistema de ficheros compartido en las salidas tanto de df -h como en mount.
4 Verificación del sistema de ficheros compartido
Creemos algunos ficheros de prueba en el compartido GlusterFS:
client1.casamier:
touch /mnt/glusterfs/test1 touch /mnt/glusterfs/test2 touch /mnt/glusterfs/test3 touch /mnt/glusterfs/test4 touch /mnt/glusterfs/test5 touch /mnt/glusterfs/test6
Verifiquemos ahora el directorio /data en server1.casamier, server2.casamier, server3.casamier, and server4.casamier. Te darás cuenta que cada uno de los nodos de almacenamiento contiene solo una parte de los ficheros/directorios que el sistema de ficheros GlusterFS comparte con el cliente:
server1.casamier:
ls -l /data root@server1:~# ls -l /data total 0 -rw-r--r-- 1 root root 0 2012-05-29 14:26 test1 -rw-r--r-- 1 root root 0 2012-05-29 14:26 test2 -rw-r--r-- 1 root root 0 2012-05-29 14:26 test5 root@server1:~#
server2.casamier:
ls -l /data root@server2:~# ls -l /data total 0 -rw-r--r-- 1 root root 0 2012-05-29 14:26 test4 root@server2:~#
server3.casamier:
ls -l /data <code>root@server3:~# ls -l /data total 0 -rw-r--r-- 1 root root 0 2012-05-29 14:26 test6 root@server3:~#
server4.casamier:
ls -l /data root@server4:~# ls -l /data total 0 -rw-r--r-- 1 root root 0 2012-05-29 14:26 test3 root@server4:~#
5 Enlaces de interés
- GlusterFS: http://www.gluster.org/
- GlusterFS 3.2 Documentation: http://download.gluster.com/pub/gluster/glusterfs/3.2/Documentation/AG/html/index.html
- Ubuntu: http://www.ubuntu.com/
You must be logged in to post a comment.