Apartamento En Familia

Apartamento En Familia
Apartamento de playa para vacaciones. http://www.apartamentoenfamilia.es. Número registro HUTT-005768

viernes, 30 de mayo de 2014

GlusterFS en Ubuntu 14.04 LTS. Réplica automática de los archivos sobre TCP/IP

El Sistema de Archivos Gluster, Gluster File System o GlusterFS, es un multiescalable sistema de archivos para NAS desarrollado inicialmente por Gluster Inc. Este permite agregar varios servidores de archivos sobre Ethernet o interconexiones Infiniband RDMA en un gran entorno de archivos de red en paralelo. El diseño del GlusterFS se basa en la utilización del espacio de usuario y de esta manera no compromete el rendimiento. Se pueden encontrar siendo utilizado en una gran variedad de entornos y aplicaciones como computación en nube, ciencias biomédicas y almacenamiento de archivos. El GlusterFS está licenciado bajo la licencia GNU General Public License versión 3.
Gluster Inc fue el principal patrocinador comercial del GlusterFS, el cual ofrece tanto productos comerciales como apoyo para desarrollo de soluciones libres basadas en el GlusterFS. En Octubre de 2011, fue anunciada la adquisición de Gluster Inc por Red Hat Inc.

La mayor parte de la funcionalidades del GlusterFS se implementa como traductores, incluyendo:

(Fuente Wikipedia)

En artículos anteriores os explicaba como configurar un RAID1 sobre TCP/IP mediante DRBD. En esta ocasión os explico como hacerlo mediante GlusterFS ya que es un sistema de archivos que está bajo el soporte de Red Hat Inc. y está ganando muchos adeptos. Es muy fácil de instalar y configurar. Bajo mi experiencia, mucho más fácil que DRDB, así que vamos a ver de que trata y como se hace:

Hay conceptos y terminología como brick, translator, etc... que podéis consultar en http://gluster.org/community/documentation/index.php/GlusterFS_Concepts

Instalar

Como está en el repositorio, nos basta con hacer apt-get en los servidores en los que queremos tener la réplica del sistema de archivos:

sudo apt-get install glusterfs-server

Configurar

Se ha de tener en cuenta que Gluster usa el TCP/IP para comunicarse con otro servidor. Así pues, tenemos que tener configurado los cortafuegos para admitir el tráfico para cada servidor:

iptables -I INPUT -p all -s -j ACCEPT

*Si somos puristas, podríamos abrir los puertos de manera individual entre los servidores teniendo en cuenta de abrir TCP ports 111, 24007, 24008, 24009-(24009 + número de bricks entre todos los volúmenes)


Asumimos que tenemos ya creada las particiones en cada servidor (nodo01 y nodo02), formateadas (por ejemplo con Btrfs o ext4) y añadidas en nuestro fstab. 

Desde el servidor nodo01 ponemos :

gluster peer probe nodo02

El servidor nos devolverá algo como "peer probe: success"


Ahora toca crear un volumen del tipo Gluster:
gluster volume create gv0 replica 2 nodo01.midominio.net:/export/sdb1/brick nodo02.midominio.net:/export/sdb1/brick

El servidor nos devolverá algo como "volume create: gv0: success: please start the volume to access data"

Lo explicaré paso a paso:

gluster volume create gv0: Crea un volumen llamado gv0

replica: El volumen que sea del tipo replica.

2: Como mínimo dos servidores sincronizados.

nodo01.midominio.net:/export/sdb1/brick: Primer nodo
nodo02.midominio.net:/export/sdb1/brick: Segundo nodo

Es así de simple.



Problemas
  • El brick recomiendan no hacerlo en el sistema raíz (root): "volume create: gv0: failed: The brick nodo01:/users/home is is being created in the root partition. It is recommended that you don't use the system's root partition for storage backend. Or use 'force' at the end of the command if you want to override this behavior." . Así pues miraremos de crearlo en otro disco que no sea el raíz.
  • El brick recomiendan que sea una subcarpeta del sistema montado, no la raíz del sistema montado: "volume create: gv0: failed: The brick nodo01:/users/home is a mount point. Please create a sub-directory under the mount point and use that as the brick directory. Or use 'force' at the end of the command if you want to override this behavior." . Crearemos una subcarpeta.


Observaciones
  • Hemos llamado al volumen gv0, pero puede ser cualquier nombre.
  • Decir que el tipo de volumen puede ser Replicated, Distributed, Striped, Distrbuted Striped o Distributed Replicated. Si por ejemplo fuera distribuido, no tendremos los mismos datos en los n servidores, sino que tendremos los datos repartidos entre los n servidores. 
  • Podemos tener n nodos, pero que el mínimo de nodos sincronizados puede ser menor que n.
  • Existen más opciones y algunas son por defecto. Podemos mirar los manuales si deseamos algo más específico.


Ahora podemos comprobar el estado de nuestro volumen para saber si hemos realizado los pasos correctamente:

gluster volume info

Veremos algo como esto:

gluster volume info

Volume Name: gv0
Type: Replicate
Volume ID: 2af3de72-92cf-4e4e-97ab-970ecbc92878
Status: Created
Number of Bricks: 1 x 2 = 2
Transport-type: tcp
Bricks:
Brick1: nodo01:/users/home/CSI
Brick2: nodo02:/users/home/CSI


Con esto vemos que hemos hecho todo correcto. Ahora solo nos falta arrancar este volumen para que sea réplica:

gluster volume start gv0

El servidor nos devolverá esto: "volume start: gv0: success"

Ahora el siguiente paso es montar en sistema glusterfs el volumen gv0 creado:

root@nodo01:~# mkdir -p /mnt/gv0
root@nodo01:~# mount -t glusterfs localhost:/gv0 /mnt/gv0

¡Ya esta! Ahora todo lo que escribamos en el brick del nodo01 se replicará en el brick del nodo02.




Resumen:

  1. sudo apt-get install glusterfs-server
  2. iptables -I INPUT -p all -s -j ACCEPT
  3. gluster peer probe nodo02
  4. gluster volume create gv0 replica 2 nodo01.midominio.net:/export/sdb1/brick nodo02.midominio.net:/export/sdb1/brick
  5. gluster volume start gv0
  6. mkdir -p /mnt/gv0 
  7. mount -t glusterfs localhost:/gv0 /mnt/gv0
  

Links:



That u don't know what you've got 'til it's gone