GlusterFS es un sistema de archivos distribuido en red que nos permite aprovechar recursos en distintos equipos para crear un almacenamiento tolerante a fallos y de alto rendimiento.
Partimos de la base de que tenemos varios servidores ubuntu con conectividad, correctamente instalados y configurados.
En este tutorial usaremos las siguientes maquinas:
Servidores GlusterFS:
nodo1, nodo2, nodo3
Clientes GlusterFS:
nodo4
El primer paso sera instalar glusterfs-server:
sudo aptitude install glusterfs-server
Una vez hecho esto, en nuestro ejemplo particular dispondremos de 3 servidores, que añadiremos en el fichero de hosts:
/etc/hosts: 192.168.36.129 nodo1 192.168.36.130 nodo2 192.168.36.131 nodo3 192.168.36.132 nodo4
Creamos el directorio donde va a ir alojado el volumen, en nuestro ejemplo sera /opt/gluster
javi@nodo1:~$
sudo mkdir /opt/gluster
Hacemos copia de seguridad del fichero de configuracion original del servidor gluster,
javi@nodo1:~$
sudo mv /etc/glusterfs/glusterfsd.vol /etc/glusterfs/glusterfsd.vol.original
Creamos un nuevo fichero de configuracion adaptandolo a nuestra configuracion de red
javi@nodo1:~$
sudo vim /etc/glusterfs/glusterfsd.vol:
volume posix
type storage/posix
option directory /opt/gluster/export
end-volumevolume locks
type features/locks
subvolumes posix
end-volumevolume brick
type performance/io-threads
option thread-count 8
subvolumes locks
end-volumevolume server
type protocol/server
option transport-type tcp
option auth.addr.brick.allow 192.168.36.129,192.168.36.130,192.168.36.131,192.168.36.132
subvolumes brick
end-volume
Hacemos copia de seguridad del fichero de configuracion del CLIENTE (nodo4) gluster para poder montar los shares y tenerlos accesibles desde todas las maquinas
javi@nodo4:~$
sudo mv /etc/glusterfs/glusterfs.vol /etc/glusterfs/glusterfs.vol.original
Creamos un nuevo fichero de configuracion adaptandolo a nuestra configuracion de red
javi@nodo4:~$ sudo vim
/etc/glusterfs/glusterfs.vol:
volume nodo1
type protocol/client
option transport-type tcp
option remote-host nodo1
option remote-subvolume brick
end-volumevolume nodo2
type protocol/client
option transport-type tcp
option remote-host nodo2
option remote-subvolume brick
end-volumevolume nodo3
type protocol/client
option transport-type tcp
option remote-host nodo3
option remote-subvolume brick
end-volumevolume replicate
type cluster/replicate
subvolumes nodo1 nodo2 nodo3
end-volume
volume writebehind
type performance/write-behind
option window-size 1MB
subvolumes distribute
end-volume
volume cache
type performance/io-cache
option cache-size 128MB
subvolumes writebehind
end-volume
Con esto conseguimos el equivalente a un RAID1 en 3 servidores de red distintos. Probemoslo!
1. Iniciar o reiniciar el glusterfs-server en todos los nodos (uno a uno) para recargar la configuracion
javi@nodo1:~$
sudo /etc/init.d/glusterfs-server restart
2. Crear el punto de montaje en los clientes y darles los permisos que necesitemos de acceso. Por ejemplo:
javi@nodo1:~$
sudo mkdir /mnt/gluster; sudo chown javi.root /mnt/gluster
3. Montar en los clientes el punto de montaje /mnt/glusterfs con
javi@nodo4:~$
sudo mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/gluster
4. Vamos a escribir algo en nuestro FS ya montado:
javi@nodo4:~$
cat /proc/cpuinfo > /mnt/gluster/info_cpu.txt
5. Comprobamos que se ha creado en el cliente:
javi@nodo4:/mnt/gluster$ cat /proc/cpuinfo > /mnt/gluster/info_cpu.txt javi@nodo4:/mnt/gluster$ ls -la total 20 drwxr-xr-x 2 javi root 4096 2010-04-26 10:20 . drwxr-xr-x 4 root root 4096 2010-04-26 10:07 .. -rw-r--r-- 1 javi javi 605 2010-04-26 10:20 info_cpu.txt
6. Comprobamos en los nodos servidores que se ha creado el archivo:
javi@nodo1:/opt/gluster/export$ ls -la
total 20
drwxr-xr-x 2 javi root 4096 2010-04-26 10:20 .
drwxr-xr-x 4 root root 4096 2010-04-26 08:42 ..
-rw-r--r-- 1 javi javi 605 2010-04-26 10:20 info_cpu.txt
Probando la tolerancia a fallos
Ahora supongo que el siguiente paso logico es ver que tolerancia a fallos tiene este sistema. Probemoslo también.
1. Apagamos uno de los nodos con
javi@nodo1:~$
sudo shutdown -h now
2. Creamos un archivo adicional en el cliente:
javi@nodo4:/mnt/gluster$ uname -a > /mnt/gluster/version.txt javi@nodo4:/mnt/gluster$ ls -la total 28 drwxr-xr-x 2 javi root 4096 2010-04-26 10:25 . drwxr-xr-x 4 root root 4096 2010-04-26 10:07 .. -rw-r--r-- 1 javi javi 605 2010-04-26 10:20 info_cpu.txt -rw-r--r-- 1 javi javi 92 2010-04-26 10:25 version.txt
3. Encendemos el servidor que teniamos apagado (crash simulado)…. pero que pasa????? El archivo no está!!!!!
Welcome to Ubuntu!
* Documentation: https://help.ubuntu.com/
You have mail.
Last login: Mon Apr 26 10:27:08 2010
javi@nodo1:~$ ls -la /opt/gluster/export
total 20
drwxr-xr-x 2 javi root 4096 2010-04-26 10:20 .
drwxr-xr-x 4 root root 4096 2010-04-26 08:42 ..
-rw-r--r-- 1 javi javi 605 2010-04-26 10:20 info_cpu.txt
4. No nos alarmemos, un simple acceso desde un cliente al archivo servira para que el gluster ejecute un auto heal y aparezca magicamente en nodo1, el que teniamos apagado:
javi@nodo4:/mnt/gluster$ ls -la total 28 drwxr-xr-x 2 javi root 4096 2010-04-26 10:25 . drwxr-xr-x 4 root root 4096 2010-04-26 10:07 .. -rw-r--r-- 1 javi javi 605 2010-04-26 10:20 info_cpu.txt -rw-r--r-- 1 javi javi 92 2010-04-26 10:25 version.txt javi@nodo1:~$ ls -la /opt/gluster/export total 28 drwxr-xr-x 2 javi root 4096 2010-04-26 10:25 . drwxr-xr-x 4 root root 4096 2010-04-26 08:42 .. -rw-r--r-- 1 javi javi 605 2010-04-26 10:20 info_cpu.txt -rw-r--r-- 1 javi javi 92 2010-04-26 10:25 version.txt
Añadir un nuevo cliente o servidor al Gluster
1. Editaremos el /etc/hosts
añadiendo la ip y el hostname
2. En los servidores existentes (y haciendolo de uno en uno)
Añadimos en :
/etc/glusterfs/glusterfsd.vol: option auth.addr.brick.allow 192.168.36.129,192.168.36.130,192.168.36.131,192.168.36.132,...,NUEVA IP (separadas por comas siempre)
Reiniciamos el glusterfs-server tras ir haciendo los cambios, nodo por nodo, sudo /etc/init.d/glusterfs-server restart
3. En los servidores nuevos copiamos la config de uno de los nodos (tras su modificacion del paso 2)
4. En los clientes instalamos el soporte para glusterfs con sudo aptitude install glusterfs-client
y copiamos el fichero de configuracion del otro cliente o creamos uno nuevo. Incluiremos el nuevo nodo de igual forma que estaban ya los anteriores añadiendo al
/etc/glusterfs/glusterfs.vol: volume nodo4 type protocol/client option transport-type tcp option remote-host nodo4 option remote-subvolume brick end-volumevolume replicate type cluster/replicate subvolumes nodo1 nodo2 nodo3 nodo4
5. Creamos el mountpoint y montamos en el cliente el gluster como se indico anteriormente con
javi@nodoclientenuevo:~$ sudo mount -t glusterfs /etc/glusterfs/glusterfs.vol /mnt/gluster