Si te dedicas a montar proyectos web, es posible que te hayas encontrado con la necesidad de disponer de un almacenamiento con unas características más especiales que el típico disco de estado solido SSD de un servidor virtual privado VPS o el Raid de discos del típico servidor dedicado.
GlusterFS es un sistema de ficheros diseñado para la nube, y en este articulo vamos a ver como puede ayudarnos en ciertos casos donde un almacenamiento de estas características es especialmente útil.

Cuando necesitas crecer:
Si te planteas un proyecto web en el que el numero de recursos puede crecer de forma indefinida, como puede ser un catalogo de fotos, un archivo de una colección o bien un repositorio multimedia, tus opciones son las siquientes:
- Contratar un VPS con un almacenamiento inicial e ir migrando la aplicación a un VPS mas grande cuando el tamaño de los recursos lo requiera. Esto te obliga a estar contratando nuevos VPS de vez en cuando y además, más almacenamiento. En un VPS, el almacenamiento va asociado a un mayor numero de cores, y a lo mejor no necesitas más procesadores y no tendrías que pagar por ellos, solo por el almacenamiento.
- La segunda opción sería, contratar un servidor dedicado con una cantidad de discos suficiente para el primer año o primeros dos años de almacenamiento. Este servidor dedicado tiene un coste bastante mas elevado que un VPS: puede resultar una inversión entre 60 y 80€ mensuales por un servidor dedicado de 4 TB, en lugar de los 12€/mes que puedes pagar por el VPS de 80 GB.
Estaría genial que hubiese una tercera opción, que permitiese configurar un sistema que pudiera basarse en servidores VPS o servidores físicos dedicados, repartidos por uno y otro datacenter a lo largo de toda la nube. Estaría muy bien poder empezar por una infraestructura pequeña, un VPS para la aplicación web y dos servidores mas para hacer un sistema de almacenamiento que vaya creciendo con el tamaño de nuestro archivo.
Cuando necesitas proteger los datos:
A veces el proyecto requiere que haya una protección extra de datos: puede que tengas una salvaguarda de la aplicación y de la base de datos y que hagas backups a diario, pero, además necesitas tener la seguridad de que los datos estáticos como fotos, vídeos y otros documentos, no se van a perder. Estaría bien poder montar un sistema de ficheros a través de varios servidores y que el contenido que introduces en cualquiera de ellos, se replicara en el otro.
De estar forma, podríamos tener un servidor en un datacenter y el segundo servidor en otro distinto: entre ellos se replicaríala información de forma bidireccional y, en caso de perder uno de los dos servidores, los datos estarían disponibles en el otro.
La solución puede ser GlusterFS
GlusterFS es un sistema de ficheros escalable y distribuido que permite añadir recursos de almacenamiento desde distintos orígenes bajo un mismo espacio de nombres.
Entre las ventajas que presenta esta solución:
- Escalable hasta varios PetaBytes.
- Capaz de manejar miles de clientes.
- Compatible POSIX.
- Utiliza hardware estándar.
- Puede usar cualquier sistema de archivos en disco que soporte atributos extendidos.
- Accesible utilizando protocolos estándar de la industria como NFS y SMB
- Proporciona replicación, cuotas, geo-replicación, instantáneas y detección de bitrots.
- Permite la optimización para diferentes cargas de trabajo.
- Es Código Abierto.
GlusterFS funciona creando volúmenes a base de «bricks» de almacenamiento. Estos bricks o bloques son particiones dentro de servidores y el volumen es donde ocurren casi todas las operaciones del sistema de ficheros.
Volvamos al caso en el que necesitas crecer: montamos la solución con 3 VPS, uno de ellos un VPS de aplicación, con 2 Cores, 20 GB y 8 GB RAM, y 2 VPS con 2 Cores, 8GB de ram y 80GB de disco cada uno de ellos. El coste de estos VPS puede oscilar entre 12 y 25€ al mes dependiendo del hosting.
Podemos crear un volumen distribuido de Gluster, creando un Brick01 en el VPS 1 y un Brick02 en el VPS 2. Gluster montara un volumen que se verá como una única unidad de almacenamiento.
Este tipo de volumen distribuido suma las capacidades de sus bricks, por lo que aquí tendremos 160 GB repartidos en 2 bricks. El documento o archivo 1 solo se almacenará en uno de los bricks: cuando el Brick01 se llena, Gluster empieza a poner los archivos en el Brick02. El propósito de este volumen de almacenamiento es escalar el tamaño del volumen de forma fácil y económica. Si queremos 80 GB más, contratamos un nuevo VPS creamos el Brick03 y lo añadimos al volumen en cualquier momento.

El sistema distribuido tiene la contrapartida de que, si se daña uno de los Bricks, la información que reside en el se perderá: si se apaga uno de los servidores o se pierde la conexión con él, los ficheros en ese servidor no serán accesibles.
Para evitar los problemas de perdidas de datos, podemos configurar un volumen replicado, de esta forma, GlusterFS copiara los datos del Brick01 al Brick02 y viceversa, de manera que en los dos bricks tengamos la misma información.

De esta forma, cuando uno de los Bricks cae, la información sigue estando en el otro.
¿Y qué podemos hacer cuando queremos replicar la información y poder escalar?
Podemos crear volúmenes que combinen ambas características, es decir, podemos crear volúmenes replicados-distribuidos. De esta forma, podemos decir que el nivel de replica es 2, y GlusterFS sacará 2 copias de nuestros archivos. Para este tipo de volumen, necesitaremos, si la replica es 2, un múltiplo de 2 para el numero de bricks, con un mínimo de 4.

Con este tipo de volumen, gozaremos de las ventajas de ambos. Tendremos la información replicada en los Brick01 y Brick02, y cuando estos se llenen, los ficheros pasaran a los Brick03 y Brick04. Como el parámetro réplica está en 2, cuando queremos ampliar nuestro almacenamiento necesitaremos 2 nuevos bricks y así sucesivamente. Éstos pueden ser VPS que estén en el mismo datacenter o pueden estar descentralizados y podemos tener cada servidor en una ubicación distinta, aunque por temas de latencias, sería recomendable que los dos bricks de la réplica estuvieran en la misma ubicación.
¿Y qué pasa cuando queremos guardar archivos muy grandes?
En el caso de que queramos guardar ficheros multimedia, como vídeo o audio, que pueden suponer, en el caso del vídeo, ficheros de varios GB, podemos usar un tipo de Volumen llamado Stripped o «troceado», que fragmenta los ficheros en pequeños trozos que reparte entre los nodos.

Como véis en la imagen, se reparten los fragmentos impares en el Brick01 y los pares en el Brick02. La configuración de este volumen se puede hacer con un mayor numero de nodos, de esta manera se gana eficiencia a la hora de conseguir ancho de banda, ya que se escribe y se lee en todos los nodos al mismo tiempo.
Este tipo de volumen se puede combinar con el volumen distribuido, de manera que los ficheros se fragmentan entre los nodos de Stripe y se distribuyen. Cuando el Volumen 0 del Stripe esta lleno los archivos se empiezan a copiar fragmentados en el Volumen 1 del Stripe.

Utilizando esta tecnología, que es de código abierto y por tanto gratuita, podemos preparar configuraciones, que después se puedan escalar de forma económica usando infraestructura estándar e independiente de cualquier fabricante. Es importante planificar el tipo de proyecto que vamos a realizar y definir qué tipo de volumen necesitamos para ese proyecto y a partir a ese punto, ir añadiendo bricks a medida que los vayamos necesitando.
Prepararé un tutorial de como montar un volumen GlusterFS o incluso un curso si de verdad consideráis que puede ser útil para vuestros proyectos.
Suscríbete a ZonaDAM y aprende como instalar, configurar y sacar partido a ResourceSpace, una de las herramientas Open Source más potentes que existen. Con tu suscripción mensual en la academia zonadam, tienes la opción de aprender como se instala y configura en uno de tus servidores, ya sea físico o virtual, o bien puedes empezar a usar el sistema DAM que se incluye con tu suscripción con un espacio de almacenamiento de 2GB, como alumno de zonadam. Si tienes alguna pregunta, no dudes en ponerte en contacto conmigo.