viernes, 11 de mayo de 2012

Virtualizando con Software Libre: Virtualización del Almacenamiento

Cuando hablamos de Virtualización, tendemos a centrarnos en lo que es el Hypervisor y tal como comenté en el Post anterior, mi ánimo está en presentar la Virtualización desde un punto de vista menos usual al que estamos acostumbrados.

En este Post, hablaré un poco sobre la Virtualización del Almacenamiento. No es mi intención centrarme ni particularizar sobre soluciones particulares o concretas y sí exponer los conceptos de la manera más genérica posible.

En cualquier caso, sobre algo hay que apoyarse en este Post y en este caso me basaré en una solución ZFS pero hay soluciones equivalentes en otros sistemas, tanto basados en Software Libre como Privado igualmente válidos y posiblemente según los casos serán soluciones que se adapten mejor a un determinado proyecto.

Me he decidido por ZFS por varios motivos, primero y el más importante porque creo que es muy didáctico, segundo porque es una solución madura (más de 10 años de implantación), sencilla, robusta y que simplemente funciona, que es finalmente lo que interesa.

¿Pero qué es la Virtualización del Almacenamiento?

Al igual que en la Virtualización con Hypervisor, creamos un pool de recursos virtuales a partir de los recursos Hardware, que después vamos asignando en función de las necesidades de cada máquina Virtual, Memoria, CPU, NICs, Almacenamiento, etc.

La Virtualización del almacenamiento nos permite, crear un pool de discos de almacenamiento a partir del almacenamiento bruto original y después gestionarlo según nos convenga mediante unidades virtuales. Al ser las unidades resultantes virtuales, permiten una gestión individualizada y las unidades se pueden crear y destruir a voluntad, con frecuencia en caliente.

La idea es, que la Virtualización del Almacenamiento permite hacer con el almacenamiento lo que los Hypervisores, con la RAM, CPU, NICs y otros recursos.

Cuando hablo de la Virtualización del Almacenamiento no me refiero al Thin Provisionning, que permite crear unidades de un tamaño X pero asigna espacio en disco bajo demanda. Es decir, podemos crear una unidad virtual de 80GB por ejemplo, pero ese espacio puede o no, ser utilizado. De forma que el consumo de espacio en una cabina de discos es un consumo bajo demanda. De esta forma evitamos quedarnos sin almacenamiento mientras hay cientos de máquinas virtuales con discos con espacio libre. Es decir, compacta el espacio utilizado, maximizando la eficiencia aunque con una pequeña penalización en el rendimiento. A día de hoy el Thin Provisionning lo proporcionan todos los fabricantes de productos de Virtualización, por lo que no es un factor diferencial.

¿Entonces qué aporta la Virtualización del Almacenamiento y en último caso ZFS?

ZFS es un Sistema de ficheros ideado por Sun Microsystems, que más tarde fue absorbida por la todopoderosa y omnipresente Oracle. ZFS lleva 10 años en el mercado, está presente en varios Sistemas Operativos, Solaris, OpenIndiana, FreeBSD, Mac, Linux (aunque no de forma nativa) y otros muchos. ZFS es también la base de numerosos Appliances de almacenamiento.

ZFS permite realizar muchas de las operaciones que permiten las cabinas de almacenamiento de alta gama con unos costes asociados, drásticamente inferiores. Entre las características más notables podemos citar:
  • Encriptación
  • Compresión
  • Deduplicación
  • Sistema de cuotas
  • Replicación
  • Compartición, vía NFS o CIFS
ZFS no es posiblemente el Sistema de Ficheros que mayor desempeño tenga, sin embargo su facilidad de uso y lo robusto de su diseño hace que sea una solución válida para un amplio espectro de proyectos de Virtualización.

¿Cómo funciona ZFS?

ZFS permite crear sistemas de ficheros jerarquizados siendo cada uno de ellos unidades independientes con una gestión centralizada. Supongamos una librería de n discos en un NAS u otro tipo de almacenamiento de red o local. Si tenemos un conjunto de discos desde disco1, hasta discoN tendremos que crear una unidad lógica virtual. Esto lo podremos hacer mediante la herramienta zpool, con ella podremos definir un dispositivo lógico virtual basado en RAID 0,1,5 etc.

Una vez tenemos nuestra Unidad Lógica Virtual, podremos crear los sistemas de ficheros: Supongamos que en esa misma librería donde hemos definido el nuevo dispositivo lógico virtual, queremos albergar nuestras máquinas virtuales. Crearemos un datastore, del que colgará un sistema de ficheros que albergará las imágenes y dentro de este estarán contenidos los sistemas de ficheros individuales que albergarán las Máquinas Virtuales propiamente dichas. Veamos cómo podría quedar:

rpool/datastore         29G    32K        22G     1%    /rpool/datastore
rpool/datastore/images
                        29G    35K        22G     1%    /rpool/datastore/images
rpool/datastore/images/VM1
                       2,0G   31K         2,0G    1%    /rpool/datastore/images/VM1
rpool/datastore/images/VM2
                       2,0G    31K       2,0G     1%    /rpool/datastore/images/VM2
rpool/datastore/images/VM3
                       2,0G    31K       2,0G     1%    /rpool/datastore/images/VM3
rpool/datastore/images/VM4
                       2,0G    31K       2,0G     1%    /rpool/datastore/images/VM4

Aquí podemos observar cuatro sistemas de ficheros independientes para cuatro máquinas virtuales distintas, si observamos la parte del almacenamiento veremos que /rpoo/datastore/images tiene la misma capacidad que /rpool/datastore que es de la que cuelga, esto es porque no tiene ninguna cuota asociada, sin embargo los sistemas de ficheros de las máquinas virtuales tienen una cuota máxima de 2G, veamos qué ocurre si tratamos de crear archivo de 3G:

root@storage1:/rpool/datastore/images/VM1# mkfile 3g demo.img
demo.img: initialized 2147090432 of 3221225472 bytes: Disc quota exceeded

rpool/datastore         29G    32K        22G     1%    /rpool/datastore
rpool/datastore/images
                        29G    35K        22G     1%    /rpool/datastore/images
rpool/datastore/images/VM1
                       2,0G   2,0G         0K   100%    /rpool/datastore/images/VM1
rpool/datastore/images/VM2
                       2,0G    31K       2,0G     1%    /rpool/datastore/images/VM2
rpool/datastore/images/VM3
                       2,0G    31K       2,0G     1%    /rpool/datastore/images/VM3
rpool/datastore/images/VM4
                       2,0G    31K       2,0G     1%    /rpool/datastore/images/VM4


Como era de esperar, cuando se alcanza el límite de cuota de 2G el sistema lanza un error diciendo que se ha alcanzado el límite para ese sistema de ficheros. De la misma manera que se aplica la cuota a un sistema de ficheros puede aplicarse la encriptación o la compartición mediante NFS, simplemente modificando las propiedades del sistema de ficheros en cuestión:

root@storage1:/rpool/datastore/images/VM1# zfs set sharenfs=on rpool/datastore


De esta manera el sistema de ficheros podrá montarse vía NFS por otro sistema que contenga un Hypervisor y lleve a cabo la Virtualización. De esta forma podremos tener separado el almacenamiento del Hypervisor. Hemos hablado de NFS pero podríamos utilizar también sistemas iSCSI o Fibra con almacenamiento en bruto para sistemas que necesiten una mayor escalabilidad y desempeño. De la misma manera podemos diseñar Multipathing para garantizar el acceso a las distintas cabinas, etc. También podemos priorizar el tráfico en función de las necesidades de cada máquina virtual, pero eso ya entraría dentro de lo que es la Virtualización de la Red que lo dejaremos para otro Post, aunque ciertamente está muy ligada a la Virtualización del Almacenamiento.

Replicación ZFS

La replicación es esencial en todo sistema de almacenamiento unido a un sistema de Virtualización, permite solventar tanto caídas del propio Hardware de almacenamiento como de elementos de comunicaciones que los interconectan.

La replicación en sistemas de fichero ZFS puede hacerse a la vieja usanza utilizando rsync en un sistema de ficheros montado vía NFS o se puede utilizar la propia herramienta que ZFS que permite enviar Sistemas de Ficheros completos o Snapshots a través de la Red, cualquiera que haya trabajado un poco con Rsync se verá tentado a probar esta potente característica de ZFS.  

Deduplicación

La deduplicación es un sistema mediante el cual ZFS identifica bloques de información con el mismo contenido, los suprime y aumenta en uno el contador. Veamos una aplicación práctica.

Supongamos que tenemos que enfrentarnos a un proyecto de VDI de digamos 1000 puestos de trabajo y que el puesto base consta del Windows de turno con el software informático y alguna aplicación corporativa, haciendo que se necesite 10GB de espacio en disco por usuario, estaríamos hablando de 10 Teras en total, sin embargo ZFS puede identificar el contenido común de esos puestos de trabajo, eliminar el contenido repetido y aumentando la referencia para reducir drásticamente el espacio necesario.

La deduplicación funciona a nivel de Bloque de datos, no de archivo por lo que es independiente del sistema operativo del que se trate, incluso si es un único archivo como lo suelen ser los sistemas Virtualizados.  

Migración y Seguridad

Muchas veces nos vemos en crear un RAID1, raid en espejo para ofrecer mayor seguridad a los datos, con la idea de que si falla uno de los discos podamos recuperar los datos y seguir funcionando a partir del otro. Sin embargo muchas veces nos llevamos la terrible sorpresa de que es la controladora la que falla y corrompe los dos discos, nuestro gozo en un pozo y los datos de la empresa también en el mismo pozo. ZFS permite crear RAIDs a partir de dos controladoras distintas, con lo cual podemos ofrecer redundancia tanto a nivel de disco como de controladora.

Otra característica fundamental de ZFS es el poder exportar los pools de almacenamiento entre librerías, previamente hay que desmontar los Sistemas de Ficheros asociados, a continuación se exporta el pool en el sistema origen y se importa en el sistema destino  

Conclusiones Finales

Como he señalado en este Post, ZFS tal vez no sea el Sistema de Ficheros con mayor rendimiento, pero ofrece herramientas de Gestión y Monitorización profundas que facilitan la administración y Gestión del almacenamiento que muchas de las cabinas ofrecen por Hardware a precios elevados.

Existen otros tipos de Sistemas de Ficheros con otras características que el lector deba tener en cuenta para su Proyecto en particular, pero en mi opinión el rendimiento no debería ser un parámetro fundamental en este caso.

Me explico: El diferencial de rendimiento entre Sistemas de Ficheros aunque apreciable, no deja de ser residual, del orden del 3-5% de unos frente a otros, sin embargo en Sistemas de Virtualización, por la propia naturaleza de los proyectos pocas veces se apura las máquinas a esos extremos, siempre se trabaja con plataformas sobredimensionadas que después se ajustan a las necesidades de cada máquina virtual. Si un 3% de rendimiento es crucial en tu sistema tal vez habría que plantearse si Virtualizar o no o las ventajas que se consiguen Virtualizando.

En mi opinión las características fundamentales a evaluar en un Sistema de Virtualización y también en el almacenamiento deberían de ser:
  • Que el Sistema sea robusto
  • Que el Sistema sea escalable
  • Que sea flexible y se pueda rediseñar la arquitectura sin tener que empezar de cero
  • Que proporcione una interfaz de Gestión, Administración y Monitorización, que muestre no sólo las incidencias que vayan surgiendo, si no también las métricas de Rendimiento

No hay comentarios:

Publicar un comentario