EMCISA

EMCISA – Intelligent Storage System

Que tal gente, el día de hoy vamos a continuar con otro punto del temario de la certificación EMCISA v2, es momento de hablar de los componentes y características que conforman un sistema de almacenamiento inteligente.

En el articulo pasado platicamos sobre lo que es un RAID, sus tipos y las ventajas que nos ofrecen, pero debe de quedar claro que un simple RAID no cubre las necesidades en cuanto a I/O y alta disponibilidad de los datos se refiere. Los sistemas de almacenamiento inteligentes incluyen tecnologías para el manejo de los datos o la manera que llegan estos datos al sistema de una manera optimizada, aprovechando distintos caminos o “paths” hacia el mismo almacenamiento; de igual manera estos integran “cache” en forma de memoría DRAM esto para poder almacenar de manera temporal aquella información que es altamente requerida con lo que se logra que cada vez que se requiera un acceso a dicha información esta sea servida a partir de esta memoria o “cache” obteniendo una latencia menor y acelerando las operaciones de I/O.
Claramente no solo estaremos hablando de cache y optimización de paths, si no estaremos conociendo distintos métodos y tecnologías que nos permiten tener un manejo y acceso a la información optimizado.

¿Cuales son los componentes de un sistema de almacenamiento inteligente?

Se tienen 4 componentes principales en un almacenamiento inteligente (claramente no es la totalidad de componentes), “frontend”, cache backend y discos.

Almacenamientointeligente

Revisemos cual es el rol de cada uno de estos componentes en el procesamiento y manejo de la información:

  • Front End – este componente se encarga de manejar la interacción directa con el host que esta pidiendo acceso de cualquier tipo a la información, sea lectura o escritura. Generalmente consiste de dos o mas controladoras que a su vez tienen múltiples puertos para poder permitir la conexión de muchos servidores a la vez. La controladora es la encargada de manejar el protocolo utilizado en la comunicación, por ejemplo, iSCSI, FC, FCoE, NFS, etc; esta controladora se comunica con el cache mediante un bus de información interno, a través del cual envía escrituras y lecturas, una vez que el cache da acceso a la información (sea entregándola a partir de su memoria o acceso directo al backend) se envía un “acknowledge” o se reconoce que la operación ha sido satisfactoria.
  • Cache – el cache generalmente esta compuesto por memoria DRAM, aunque almacenamientos avanzados pueden llegar a combinar distintos niveles o “tiers” de cache, por ejemplo, DRAM, SSD, etc Este componente es critico para poder acelerar las operaciones a nivel de almacenamiento, esto se logra almacenando aquella información “caliente” o que ha mostrado una actividad (I/O) alta en la memoria propia de este cache para que los servidores que tienen acceso al sistema de almacenamiento reciban dicha información a partir de este cache y así prevenir el acceso a los discos duros mecánicos que tienen un tiempo de acceso mucho mayor a este cache hablando de tiempos en ms (de seek time) en el caso de los discos duros cuando DRAM esta por debajo del ms.El cache esta constituido por dos componentes principales “data store” y “tag ram”, donde la función del “data store” es básicamente almacenar la información en unidades llamadas “páginas” mientras que la función de “tag ram” es la darle seguimiento o saber donde se encuentra la información para poder utilizarla (parecido a lo que es un metadata), de igual manera identificar que información ha sido enviada a disco a través de un indicador “dirty bit” y por último mantener los tiempos de acceso a dicha información para poder ir determinando que información debe estar en el cache (basándose en las políticas definidas para el cache, que estaremos viendo mas adelante)Es importante saber que en el momento que un servidor pide información al sistema de almacenamiento se busca dicha información en el “tag ram” para determinar si será servida o no desde cache, en el caso que esta sea servida desde cache se le conoce como un “Read Hit”, si la información no se encuentra en cache esta tendrá que ser servida a partir de los discos en el backend y esto es conocido como “Read Miss”. En el momento que se detecta un acceso secuencial puede darse que el sistema de almacenamiento cuente con la tecnología de prefetch (este puede ser de tamaño fijo o variable) o “read ahead” a partir de la cual se definirá un conjunto de bloques o información secuencial a la información que se esta accediendo para ser transferido de los discos hacia el cache para que en el caso que el host los requiera se pueda acelerar el acceso a esta información. A mayor Read Hits mejor rendimiento se tendrá en las operaciones de lectura hacia nuestro sistema de almacenamiento.El cache no solo optimiza las operaciones de lectura, tenemos dos distintos modos de cache para las operaciones de escritura, “write-back cache” y “write-through cache” donde el primero permite tener tiempos de respuesta mas rápidos debido a que en el momento que llega una operación de escritura esta es almacenada en el cache e inmediatamente se envia un “acknowledge” o se reconoce que dicha operación de escritura ya fue realizada y mas adelante es escrita a disco o “de-staged” el segundo modo de escritura con cache o write-through cache recibe la escritura la almacena temporalmente en memoria y la escribe inmediatamente a disco después de esto por lo que el “acknowledge” o reconocimiento que la operación sucedió tiene una latencia mayor. Las operaciones que son almacenadas en ambos modos de cache será determinada por el tamaño máximo de I/O  configurado a través del cual se decide si este estará siendo almacenada en cache o enviada directamente a disco.Claramente la cantidad de cache en cualquier sistema de almacenamiento inteligente es mucho menor de el espacio disponible en disco, por lo que el cache debe de ser utilizado de manera óptima y solo almacenar la información que “merece” o debe de estar ahí para poder optimizar las operaciones de I/O, para esto se cuentan con distintos algoritmos que evitan la saturación de este componente y permite manejar los ciclos de vida de información según el uso que esta presentando, se manejan los siguientes algoritmos:Least Recently Used (LRU) – Este algoritmo se encuentra constantemente monitoreando el último acceso a la información identificando paginas almacenadas en cache que no han sido utilizadas por mucho tiempo, en el momento que dichas páginas son identificadas se marcan para ser reutilzadas o en el caso de que estas contengan información de escritura que no ha sido enviada a disco (ej. write-back cache) esta es primero enviada a disco para después marcar dichas páginas para reutilizarse.Most Recently Used (MRU) – Este algoritmo es exactamente lo opuesto a LRU, básicamente se definen las páginas del cache que han sido utilizadas recientemente tomando como premisa que debido que la información fue accedida hace poco tiempo esta no será requerida pronto.

    Independientemente de el algoritmo para mantener almacenada o no la información en cache se requiere definir en que puntos de utilización (espacio de cache consumido) se deberá realizar un “flush”  de toda aquella información que se encuentra en cache y no ha sido escrita a disco para poder gestionar el espacio disponible en cache y no saturarlo. Basadandose en la cantidad de espacio consumido del cache se definirá el ritmo de flush o escritura de información a partir del cache a disco, se tienen 3 estados, “High Watermark”, “Idle flushing” y “Forced Flushing”
    Flushes El flush de tipo “idle” sucede a un ritmo moderado debido a que esta por debajo o en el nivel de utilización marcado como “Low Watermark”, el Flush de tipo High Watermark sucede a un ritmo mas rápido debido a que ya se superó o se encuentra en uso la cantidad de páginas de cache marcadas como “High Watermark” y para el último tipo de flush que es llamado “Forced Flushing” básicamente el cache ha llegado a un 100% de consumo de espacio por lo que se requiere un ritmo de escritura de la información en cache hacia el disco muy rápida, a mayor ritmo de escritura el sistema de almacenamiento dedica mayor cantidad de recursos para poder cumplir con el ritmo.

    Algo que pueden estar pensando en este momento es, “Esta bastante interesante todo este tema de cache, su funcionamiento, etc, ¿Pero acaso no tenemos información en el cache que no ha sido escrita o flushed a discos? ¿Que hay de la protección para el cache y/o la información que vive en el?” y esto es justamente lo que estaremos comentando a continuación, debemos de considerar que al tratarse de manejo de información siempre debemos de tener en mente nuestros SPOFs o “Singe Points of Failure” por lo que se manejan dos principales métodos para proteger aquella información que continua en el cache y no ha sido escrita a disco, Cache Mirroring y Cache Vaulting.

    Cache Mirroring – Con este método básicamente lo que se esta realizando es tener una copia exacta de todas aquellas operaciones de I/O que son escrituras y que están viviendo en el cache (básicamente información que no ha sido escrita a disco) por lo que contamos con distintas unidades de memoría donde la información es copiada por si se da el caso de tener una falla en alguna de las unidades de memoria, esto lo podríamos ver como un nivel de RAID 1. Cabe destacar que en ambas copias se lleva un seguimiento puntual de la estructura y la información que vive en ellas debido a que debemos de contar con la misma información y que esta este integra, a este proceso se le conoce como “cache coherency”.

    Cache Vaulting – Este método logra proteger la información que vive en el cache a través de discos dedicados a almacenar la información que este activa en el cache, por lo que cuando se tiene un problema de energía eléctrica la información es copiada a estos discos dedicados como “vault” donde la información deja de ser volátil, en el momento que la energía eléctrica regresa esta información es copiada de nuevo al cache y es escrita a los discos donde debía de ser escrita en un principio.

  • Back End – Este componente de el sistema de almacenamiento inteligente sirve como interfaz de comunicación entre el cache y los discos físicos, en este  se encuentra los distintos algoritmos para permitir una configuración de RAID. El flujo de información sucede de la siguiente manera, una vez que la operación de escritura es enviada a escribirse a disco desde el cache, llega al backend donde puede ser almacenada por una breve ventana de tiempo para después ser ruteada hacia el o los discos donde debe de estar viviendo. En el backend también se cuenta con mecanismos para detectar errores y corregirlos además de los mecanismos para controlar el o los niveles de RAID, estas controladoras están conectadas a los discos a través de puertos que tiene cada controladora generalmente hablamos de dos o mas controladoras para brindar alta disponibilidad y múltiples paths de acceso a los discos físicos
  • Discos Físicos – básicamente aquí estamos hablando de discos como los conocemos, generalmente este tipo de sistemas de almacenamiento tienen soporte para distintos tipos de discos, desde SAS, SATA, EFD, FC, etc. Aquí es donde sucede todo la asignación y reservación de espacio según distintas políticas definidas donde podemos estar hablando de alta disponibilidad, rendimiento, capacidad, etc. este proceso es conocido como “storage provisioning” o asignación de almacenamiento.Para asignar espacio primero debemos segmentar o agrupar los discos físicos en grupos lógicos a los cuales se les asigna un nivel de RAID, a este grupo lógico se le conoce como RAID Set, dependiendo de la cantidad de discos y el tipo de los mismos (claramente tomando en cuenta el nivel de RAID aplicado) se contará con cierta cantidad de espacio utilizable, cierto rendimiento y disponibilidad de los datos.
    Provisioning
    Una vez creado el RAID Set este es particionado con lo que se crean las unidades lógicas que estarán siendo entregadas a los servidores que requieren acceso a disco, estas unidades se les conoce como LUNs o Logical Unit Number, a cada unidad se le asigna un número único. Estos LUNs son básicamente una porción de espacio del total con el que se cuenta en el RAID Set, los sistemas de almacenamiento tradicionales entregan estos LUNs en formato “thick” o con asignación completa del espacio configurado, mientras que los sistemas de almacenamiento avanzados pueden entregar los LUNs en un modo “virtual” o “thin” en la imagen podemoslunthin notar que básicamente la entrega de almacenamiento en modo virtual o “thin” es presentar al servidor que requiere acceso a espacio en disco un LUN que desde la perspectiva del Sistema Operativo es reconocido como el espacio en su totalidad (en este ejemplo 80GB) pero en el sistema de almacenamiento solo estará ocupando aquel espacio que haya sido escrito a dicho LUN, la ventaja de este método de asignación es que podemos contar con “overcommitment” o asignar mayor cantidad de espacio en disco de la cual tenemos en realidad en nuestro sistema de almacenamiento (existen múltiples consideraciones al entregar LUNs en thin Provision). Thin Provision permite entregar el espacio bajo demanda y no asignar desde el inicio la totalidad de el espacio.

    Algunas de las consideraciones que debemos tener en el momento de decidir si estaremos asignando el espacio de manera tradicional o “thick” o lo estaremos haciendo a través de Thin Provision o “virtual” son:

    1. Si la aplicación requiere un rendimiento esperado lo mas recomendable es Thick provision.
    2. Contamos con aplicaciones o servicios con información que es modificada constantemente o que incrementa de manera sustancial, para esto de igual manera se recomienda thick provision.
    3. Se tiene aplicaciones o servicios que no cambiarán su información de manera constante, no escribirán a disco o básicamente tienen contenido estático, para esto podemos utilizar thin provision

    Claramente estas no son todas las consideraciones que existen pero es un claro ejemplo que debemos planear que tipo de LUNs estaremos asignando según los requerimientos que se presenten.

    Una vez que el espacio de un LUN fue definido contamos con distintos métodos para poder incrementar el espacio vamos a echarle un vistazo:
    MetaLUN – es la manera que tenemos para poder expander un LUN existente ya sea para darle mejor rendimiento o agregar espacio. Un MetaLUN básicamente es la construcción lógica a partir de dos o más LUNs, se tiene el LUN inicial que es llamado LUN Base y una o más LUNs componentes, una vez que agregamos una o mas LUNs como resultado tenemos un “MetaLUN” que nos brindará espacio extra o un rendimiento mayor. Se cuenta con dos métodos para crear un MetaLUN, concatenación de dos o más LUNs o stripe.

    METALUN En el caso de tener un MetaLUN debemos comprender que al concatenar 2 o mas LUNs no estaremos teniendo ninguna ganancia en cuanto a rendimiento se refiere ya que no se estará realizando un stripe de la información en la nueva LUN (recordemos que el proceso de Stripping es distribuir la los datos en varios discos, en este caso al referirnos de LUNs sería la distribución de la información en varios LUNs). Claramente cuando creamos un MetaLUN con stripping además de incrementar el espacio también estaremos beneficiándonos de un mejor rendimiento debido a que estaremos sirviendo la información de todos los discos que han sido asignados a cada uno de los LUNs que constituyen el MetaLUN.

    Para poder presentar los LUNs disponibles a nuestros servidores debemos definir que hosts tienen acceso a los LUNs, esto se le conoce como LUN Masking. En el momento de realizar LUN masking debemos definir los LUNs y los identificadores de los Hosts según el protocolo que estemos utilizando, ej. iSCSI, FC, etc. (IQNs para iSCSI, WWNs para FC). Esto es controlado del lado del sistema de almacenamiento, por lo que en el momento que un servidor quiere acceder al LUN se verificará si el identificador del servidor esta permitido para acceder y que tipo de permiso tiene (ej. escritura/lectura o solo lectura).

Tipos de almacenamientos inteligentes

Los sistemas de almacenamiento son clasificados en dos tipos, High-end y Midrange:

  • High-End Storage Systems – este tipo de sistemas están pensados para cargas altamente transaccionales y/o críticas, cuentan con múltiples controladoras en modo activo-activo para brindar acceso a los distintos LUNs, en este caso cualquier controladora permite acceso a los LUNs. Generalmente este tipo de almacenamientos ofrecen mayor cantidad de espacio, de cache, arquitecturas tolerantes a fallos, etc. Un ejemplo claro de este tipo de almacenamientos inteligentes es Symmetrix de EMC.
  • Midrange Storage Systems – este tipo de sistemas cuentan generalmente con dos controladoras en un esquema activo-pasivo, es decir, una controladora es dueña de ciertas LUNs, lo que quiere decir es que cualquier actividad de I/O debe de llegar a través de la controladora dueña de la LUN, mientras que la otra controladora permanece pasiva. En el caso de tener una falla en alguna controladora se puede dar un “trespassing” de la controladora fallida a la controladora que permanece funcional con esto dicha controladora se vuelve dueña de los LUNs que eran controlados por la otra controladora que falló. Un ejemplo de almacenamiento midrange es VNX de EMC.

EMCISA – Data Protection (RAID)

Que tal gente, el día de hoy comenzaré con esta nueva serie de artículos sobre fundamentos de almacenamiento, estaremos cubriendo exactamente todos el temario del examen E10 – 001 de EMC que analiza los conocimientos cubiertos en el curso ISM v2 y aprobándolo podemos ser acreditados como EMCISA (EMC  – Information Storage Associate).

El día de hoy estaremos conociendo que es un RAID, sus distintos niveles y que ventajas nos ofrece.

¿Que es un RAID y porque utilizar RAID?

RAID es una técnica que nos permite combinar dos o mas discos físicos en un una unidad lógica (RAID Set), esto para brindarnos protección de datos, rendimiento, o una combinación de ambos.

La necesidad de tener un mecanismo para brindar protección a los datos existe debido a la posibilidad de que estos fallen, el tiempo aprox. o posibilidad de que fallen esta definido por el MTBF (Mean Time Between Failures) que básicamente nos da un tiempo estimado de falla mecánica del disco, estos tiempos son provistos por el fabricante. Entonces revisando un ejemplo donde tenemos lo siguiente:

  • 100 Discos en un arreglo utilizando el disco especificado

Para poder conocer el tiempo de falla de un disco debemos de dividir el MTBF entre la cantidad de discos, cosa que nos dará el siguiente resultado:

750,000/100 = 7,500 horas

Básicamente aquí estamos definiendo que el tiempo aprox. para tener una falla de un disco es de 7,500 horas, claramente esto esta seriamente impactado por el trabajo que se le de al arreglo/discos, temperatura, etc.

Con esto queda demostrado que es necesario poder contar con mecanismos para la protección de los datos que existan en dichos discos que presentarán una falla, es por esto y por cuestiones de rendimiento que distintas tecnologías de RAID son ampliamente utilizadas.

¿Que métodos tenemos para implementar RAID?

Existen dos métodos de poder crear un RAID, software y hardware. Dentro de estos métodos de implementación tenemos distintos niveles de RAID que almacenan la información de distinta manera cada uno con sus desventajas y ventajas.

  • Software RAIDeste método de implementación utiliza mecanismos de software (a nivel del sistema operativo) para crear el arreglo RAID, claramente los recursos necesarios para el procesamiento y manejo de este serán provistos por el host. Entre las limitantes que presenta este método están el impacto en el rendimiento general del sistema (uso de CPU), no se soportan todos los niveles de RAID, problemas de compatibilidad entre el SO y el RAID, no existe protección en el momento de booteo, etc. Dentro de software RAID tenemos un “hibrido” donde se cuenta con un BIOS de RAID en la HBA o en la MOBO que permite contar con la protección de RAID aun cuando se esta iniciando el sistema.
  • Hardware RAID – este método de implementación utiliza un componente de hardware dedicado para el RAID (controladora) , este puede ser implementado del lado del host o del lado del almacenamiento. Este componente de hardware dedicado se encarga de controlar el acceso a los discos, presenta los distintos RAID Sets y se encarga de regenerar la información en el caso de tener una perdida de un disco, cuando hablamos de  almacenamiento centralizado este componente tiene algunas otras tareas como presentar grupos lógicos a partir de estos RAID sets (LUNs), etc.

Técnicas de RAID

Vamos a conocer las tres principales técnicas utilizadas para la distribución de los datos en el RAID Set  y la disponibilidad de los mismos, a partir de estas técnicas también se construyen los distintos niveles de RAID (los cuales revisaremos mas adelante en este articulo):

  • Stripingesta técnica permite distribuir los datos a través de dos o mas discos duros para que funcionen en paralelo, permitiendo así tener un rendimiento de escritura y lectura mayor al que se tendría con los discos por su cuenta. Al tener un RAID set contamos por cada disco físico un conjunto pre definido de bloques continuos, en este caso este conjunto es conocido como “strip” recordemos que un RAID set agrupa de manera lógica varios discos por lo que al conjunto de strips alineados que se existen a lo largo de todos los discos que constituyen este RAID set se le conoce como “stripe”.
    El tamaño de strip define la cantidad de información que puede ser escrita o leída (bloques) en un solo disco del RAID set, el tamaño de stripe es definido al multiplicar el tamaño de strip de los discos que pertenecen al RAID por la cantidad de discos (ej. 64KB de strip por disco por 10 discos en el RAID nos daría un tamaño de stripe de 640KB).
  • Mirroring  esta técnica consiste en tener dos copias de la información en 2 discos, es decir, lo que es escrito en un disco será escrito en otro disco que contendrá exactamente la misma información, con esto al fallar un disco la información puede ser entregada a partir del segundo disco. La consideración en este caso es que la información es duplicada por lo que necesitamos el doble de almacenamiento para la misma cantidad de información.
  • Paridad la paridad es una técnica que permite brindar protección de datos sin necesidad de contar con un mirror o “espejo”, en este caso se cuenta con un disco (o mas dependiendo del nivel de RAID) asignado específicamente para almacenar la información de la “paridad” (aunque también puede ser distribuida a lo largo de distintos discos del RAID set), el calculo de la paridad es una tarea mas de la controladora RAID. Tomando como ejemplo que tengamos 5 discos duros conformando un arreglo de discos o RAID tendríamos un disco dedicado exclusivo para almacenar la información de paridad por lo cual solo 4 discos estarían dedicados para almacenar los datos, en el caso de presentarse una falla de un disco se puede reconstruir la información perdida a partir de un cálculo matemático donde se substrae la información restante de la paridad (en realidad es una operación bitwise XOR). Es importante notar que al utilizar paridad no se toma en cuenta el o los discos que contengan paridad como parte del Strip size, entonces regresando a nuestro ejemplo, teniendo 5 discos, 4 con información y uno de paridad estaríamos multiplicando el strip por la cantidad de discos para calcularlo (ej. 4x64KB).

Niveles de RAID

Una vez que ya conocemos las distintas técnicas utilizadas a nivel de RAID podemos continuar a lo siguiente que es los niveles de RAID, el nivel de RAID será definido a partir de los requerimientos que pueda presentar la aplicación, servicio, tipo de información etc. esto definirá el nivel requerido de disponibilidad y rendimiento de nuestra información. Los distintos niveles de RAID utilizan una o mas técnicas para asegurar la información y/o brindar mayor rendimiento.
Contamos con los siguientes niveles de RAID (los mas comunes), copiaré información del articulo “VCAP – Sección 1 – Determinar el nivel de RAID para nuestras aplicaciones.”:

  • RAID 0 – (Stripe) este tipo de arreglo básicamente distribuye los datos entre los discos que conforman esta entidad lógica, aquí el problema que tenemos es la falta de un cálculo de paridad y por lo tanto cero tolerancia a fallos. Con este tipo de RAID obtenemos mejor rendimiento.

  • RAID 1 – también conocido como espejo, este tipo de RAID crea una copia exacta entre un numero de discos, ej. si tenemos 2 discos cada uno tendría la misma información ya que una vez que se está por escribir la información esta es escrita en ambos discos. Con este tipo de RAID obtenemos mejor tolerancia a fallos sacrificando rendimiento.

  • RAID 5 – Con este tipo de RAID obtenemos tolerancia a fallos y un mejor rendimiento, se hace el cálculo de la paridad y se escribe alternativamente entre los discos que conforman el arreglo de igual manera toda la información que se necesite escribir a disco es escrita de manera alternativa entre los discos. Con esto tenemos la capacidad de perder un disco del arreglo, en el momento que se pierde se reconstruye la información perdida a partir de la paridad. Aquí necesitamos como mínimo 3 discos, este tipo de arreglo es uno de los más comunes y de los mas adoptados debido a su buen rendimiento y tolerancia a fallos.

  • RAID 1+0 – Este tipo de RAID es una combinación tanto de RAID 1 y RAID 0, como podrán imaginarse aquí hacemos una combinación tanto de la tolerancia de fallos que nos ofrece el arreglo 1 con el rendimiento que nos ofrece el arreglo 0. Este arreglo también conocido como RAID 10 es el más rápido y ofrece buena seguridad de datos, el problema es la cantidad de discos y por lo tanto la cantidad de $$ que requerimos para implementarlo, como mínimo requerimos 4 discos y solo pudiendo utilizar 2.

Es Importante notar que tenemos dos distintos niveles de RAID que combinan RAID 0 y RAID 1, en este caso describí RAID1+0 que no es lo mismo que RAID0+1, ambos ofrecen los mismos beneficios y tienen las mismas consideraciones, donde podemos encontrar la diferencia es en el momento de la reconstrucción de datos en el caso que se requiera. RAID 1+0 es conocido como “Stripped Mirror” la mecánica para el manejo de los datos en este tipo de RAID es que primero se realiza un mirror de la información entre los distintos mirror sets y después se realiza el stripe de la información entre los discos de datos y en el momento que falla un disco solo el “espejo” o mirror es reconstruido a partir de su par.

RAID 0+1 es conocido como “Mirrored Stripe” en este nivel de RAID la mecánica es crear el stripe de información inicialmente y después realizar el mirror de esta información, en este caso al fallar un disco todo el stripe de información es afectado, en este caso la información es reconstruida en su totalidad a partir del mirror que se tiene. Tomemos como ejemplo tener un RAID 0+1 constituido por 8 discos, en este caso se crearían primero 2 sets conteniendo 4 discos donde la información estaría en stripe (RAID 0) pero al tener 2  sets con la misma cantidad de discos también aplicamos un RAID1 o “mirror” por lo que la información también esta protegida.

Impacto de los distintos niveles de RAID

Al decidir que tipo de RAID se estará utilizando es importante conocer el impacto en el rendimiento que cada uno de estos niveles de RAID tiene, este impacto u “overhead” es debido a las mecánicas principalmente de paridad, esta penalidad se presenta en el momento de tener escrituras a disco ya que las lecturas no requieren actualizar la información, escribir nueva información o una modificación de la paridad a partir de la nueva información escrita. Vamos a revisar la penalidad en el rendimiento de los niveles de RAID mas comunes:

  • RAID 1 – en este caso la penalidad es exactamente el numero de escrituras enviadas a disco, ya que estamos hablando de un espejo o “mirror” por lo que se requiere escribir su copia exacta. Por lo que una operación se traduce en el backend a 2 operaciones en disco.
  • RAID 5 – en este nivel de RAID estamos hablando de una penalidad de 4 operaciones (2 lecturas/2 escrituras) por cada operación a disco, esto debido a que primero debemos de leer la información actual (1 operación), la paridad actual (2 operaciones), escribir la nueva información (tres operaciones) y actualizar la paridad (4 operaciones).
  • RAID 6 En el caso de este niel de RAID vamos a estar hablando de 6 operaciones a nivel de disco (3 lecturas/3 escrituras) ya que primero debemos de leer la información(1 lectura), después leer la doble paridad (3 lecturas), Después debemos actualizar la información (4 lecturas) y por último recalcular la doble paridad (6 lecturas).

Como podemos ver es importante poder entender el impacto que tiene cada uno de los distintos niveles de RAID, muchos vendors utilizan los mismos niveles de RAID ya que existen otros elementos que impactan al rendimiento como lo puede ser el cache, la secuencialización de operaciones, etc.

Vamos a revisar algunos ejemplos para calcular penalidad en el backend (iops reales requeridos) según el nivel de RAID y el perfil de operaciones:

Escenario 1:

  • Aplicación demandando 2500 IOPS
  • RAID 5 configurado
  • Perfil de aplicación u operaciones, 40% escrituras / 60% lecturas

En este caso para calcular el impacto que tiene el nivel de RAID (RAID 5) debemos de tomar como base la siguiente fórmula:

(IOPS objetivo x porcentaje de lectura) + ((IOPS objetivo x porcentaje de escritura) x penalidad RAID) = IOPS en backend

Lo cual para este caso nos daría lo siguiente:

(2500x.60) + ((2500x.40)x4) = 5500 IOPS en backend

Escenario 2:

  • Aplicación demandando 1200 IOPS
  • RAID 1+0 configurado
  • Perfil de aplicación u operaciones, 2/3 lecturas / 1/3 escrituras

Lo cual para este caso nos daría lo siguiente:

(1200x.6666) + ((1200x.3333)x2) =

(799.92) + (799.92) = 1600 IOPS (redondeando).

Nivel de RAID según perfil de aplicación

Tomando en cuenta los niveles de RAID mas comunes que estuvimos cubriendo en este articulo vamos a revisar para que perfil de aplicación u perfil de operaciones debe de ser considerado:

  • RAID 1+0 – Este nivel de RAID es excelente para aplicaciones o perfiles de I/O donde tenemos pequeñas operaciones de tipo “random” o no secuenciales e intensivas en escrituras (30% de escrituras en adelante).
  • RAID 3 – Este nivel de RAID nos da un buen rendimiento para aplicaciones o ambientes donde tenemos un perfil de I/O con operaciones secuenciales y con un tamaño considerable, por ejemplo, respaldos o streaming de videos.
  • RAID 5 – Este nivel de RAID nos da buen rendimiento en ambientes donde contamos con perfiles de I/O con operaciones no secuenciales o “random” con un porcentaje alto de lecturas.