e10-001

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.