miércoles, 2 de marzo de 2011

RAIDs anidados: el "triple Lindy"

.... nop, no se había terminado, seguimos. Para los que llegan nuevos aquí pueden encontrar la primera, la segunda y la tercera partes. Y esta tampoco es la última eh!, el original de esta parte está aquí, es de Linux Magazine. Así que provecho! :-)

RAIDs anidados: el "triple Lindy"
Hasta ahora hemos hablado acerca de las configuraciones RAID de un solo nivel y configuraciones RAID anidadas. Pero hemos restringido el estudio artificialmente a sólo dos niveles de RAID anidados. ¿No podríamos tener tres niveles de RAID o más? La respuesta es sí, y en este artículo vamos a hablar de tres niveles (el proverbial "Triple Lindy") y pasar un buen rato con un par de ejemplos.
"Hubo un hombre, que hizo la inmersión más asombrosa ... llamada Triple Lindy".
"El buceo más duro que he visto en mi vida."
"¿Quién era ese tipo?"
"Un servidor".
"Estás bromeando".
"Yo no bromeo acerca de inmersiones."
"Especialmente esa inmersión."
"Casi me mata."
Intercambio entre Rodney Dangerfield y M. Emmet Walsh en la película, "Volver a la Escuela"
RAID "Triple Lindy

Introducción.
En los últimos tres artículos, introdujimos el concepto de RAID, y exploramos las configuraciones RAID anidadas comenzando con las configuraciones anidadas basadas en RAID 0 y RAID-1 y se discutieron las configuraciones anidadas basada en RAID 5 y RAID-6. Hay que recordar que los niveles RAID anidados permiten a las configuraciones RAID estándar tales como RAID-0, RAID 1, RAID-5 y RAID-6, ser combinadas en niveles múltiples. Por ejemplo, RAID-0 y RAID 1-pueden combinarse para crear RAID-10. Sin embargo, los RAID anidados no limitan el número de niveles RAID. Entonces, ¿qué pasaría si se combinaran tres niveles RAID en una nueva configuración? ¿Obtendríamos un rendimiento aún mayor, además de una mayor redundancia de datos? O puedo dejar que mi "trastorno obsesivo compulsivo de datos" tome el control y producir una configuración RAID que pueda soportar la pérdida de un gran número de unidades de disco sin perder el acceso a los datos?
Para ser honesto, no he visto nunca ninguna configuración RAID anidada de tres niveles en entornos de producción, pero estoy seguro de que hay alguna en producción en alguna parte y más aun que se han probado. Hay razones para ello y creo que si usted compara las configuraciones RAID de niveles simples estándar con las configuraciones de niveles RAID dobles anidados, verá por qué (más sobre esto más adelante). Sin embargo, a medida que los procesadores ganan en rendimiento, incluyendo los procesadores de RAID, es bastante fácil de imaginar que entraran en producción configuraciones RAID anidadas de tres niveles (especialmente cuando lidiamos con empaques de almacenamiento muy densos).
Hay demasiadas configuraciones RAID de tres niveles anidados para cubrir todas las posibilidades, pero este artículo va sobre dos de las mas interesantes y menciona algunas de las otras mas usadas.


RAID-100
Esta configuración RAID de tres niveles anidados parece ser un buen lugar para comenzar nuestro examen. Esta toma la popular configuración RAID-10 y le agrega otra capa RAID-0. Recuerde que queremos poner el rendimiento en el nivel de RAID mas alto de la configuración. La razón principal es que ayuda a reducir el número de unidades que participan en una reconstrucción en el caso de la pérdida de una unidad.
RAID-100 tiene varias (al menos dos) configuraciones RAID-10 y las combina con RAID-0. A continuación en la figura 1 mostramos una configuración RAID-100 con doce unidades sencilla.
Esto es sólo un diseño de muestra que ilustra una posible configuración RAID-100. Recuerde que el diseño de un RAID anidado va desde el nivel más bajo (el número más a la izquierda en la numeración RAID), al nivel más alto (el extremo derecho en la numeración de RAID). Así RAID-100 comienza con RAID-1 en el nivel más bajo (el más cercano a las unidades de disco) y luego combina los pares RAID-1 con RAID-0 en la capa intermedia que resulta en varios grupos RAID-0 (mínimo dos). Luego los grupos RAID-0 intermedios se combinan en un grupo RAID-0 final (un RAID 0 de un solo grupo).
Una pregunta obvia que cabe preguntarse es ¿por qué estamos utilizando múltiples capas de RAID-0 en lugar de una combinación de todos los pares RAID-1 en un RAID-0 de un solo grupo? Muy buena pregunta y la respuesta final depende de lo que quieras lograr con tu configuración RAID. Como se mencionó anteriormente, una de las razones es que es posible que desee aprovechar mejor las múltiples tarjetas RAID. Podríamos utilizar varias tarjetas RAID, cada uno con su propio grupo RAID-10, y combinarlas con un RAID por software en el nivel más alto. En el caso de la Figura 1, tendríamos tres tarjetas RAID, cada una con su propio grupo RAID-10 que se combinan utilizando un RAID-0 por software ("md" en Linux) en el nivel más alto.
El uso de múltiples tarjetas RAID mejora el rendimiento del arreglo en general porque, simplemente, ahora tenemos varios procesadores RAID. Esto puede ser aún más importante en el caso de un fallo del disco debido a que una sola tarjeta RAID rápidamente puede reconstruir la unidad que ha fallado, ya que no se está utilizando para todas las funciones RAID en la matriz.

La capacidad de la configuración de RAID-100 es bastante fácil de calcular asumiendo que todas las unidades tienen la misma capacidad.

Capacidad = min (tamaños de disco) * (Número de grupos RAID-0 en el nivel intermedio) * (Número de pares RAID-1 en cada grupo intermedio RAID-0 )


Para la figura 1, esto significa,

Capacidad = min (tamaño de disco) * (3) * (2)
Capacidad = min (tamaño del disco) * 6

La eficiencia de almacenamiento resultante es también bastante fácil de calcular:

Eficiencia de almacenamiento = 1 / (Número de discos en pares RAID-1)

Para la figura 1, la eficiencia de almacenamiento resultante es,

Eficiencia de almacenamiento = 1/2
Eficiencia de almacenamiento = 0,50 (50%)

Dado que RAID-1 está en el nivel más bajo la eficiencia de almacenamiento es de 50% si asumimos dos discos en RAID-1 (muy típico).
Tenga en cuenta que el número mínimo de unidades en una configuración RAID-100 es de ocho, si usted quiere tener más de un grupo RAID-0 en la capa intermedia. Esto significa que tendrá cuatro pares RAID-1 que se combinan para crear dos grupos RAID-0 en la capa intermedia (dos grupos RAID-1 por cada grupo RAID-0 intermedio). A continuación, los dos grupos intermedios RAID-0 se combinan con RAID-0 en el nivel más alto.

Para hacer una capa intermedia RAID-0 "balanceada" (es decir, el mismo número de pares RAID-1 en cada grupo intermedio RAID-0), entonces necesitará incrementar el número total de unidades por el número de unidades en cada nivel intermedio RAID-0. En el caso de la Figura 1, el número es de cuatro (dos pares RAID-1). Si se hubieran utilizado seis unidades en cada grupo RAID-0 intermedio (tres pares RAID-1), entonces tendría que incrementar RAID-100 en seis unidades para mantener una configuración "balanceada".
La tolerancia a fallos de RAID-100 se limita en realidad a una unidad. Si pierde una unidad en un par RAID-1, entonces usted todavía puede tener acceso a los datos. Pero si pierde la segunda unidad, el par RAID-1 caerá, y por tanto caerá toda la configuración RAID-100. Pero recuerde que RAID-10 está diseñado para obtener un rendimiento muy bueno con una redundancia de datos pequeña. RAID-100 se limita a seguir este enfoque.
La tabla 1 a continuación muestra un breve resumen de RAID-05 con algunos puntos destacados.
RAID-160
En el artículo sobre RAID anidados con RAID 5 y RAID-6, se demostró que se podían perder hasta cinco unidades en algunas configuraciones, sin perder el acceso a los datos. Eso es una cantidad increíble de protección de datos! Por otra parte, tendrá un rendimiento de lectura muy bueno con RAID-16, pero el rendimiento de escritura y la eficiencia del almacenamiento puede ser muy baja. Como ejemplo de una configuración de tres niveles RAID anidados que equilibre el rendimiento y la redundancia, he creado una configuración de tres niveles RAID, RAID-160, que trata de aprovechar la gran redundancia de datos de RAID-16 y agregar algo de rendimiento y eficiencia de almacenamiento.
RAID-160 comienza con pares RAID-1 en el nivel más bajo (asumiendo grupos RAID-1 con sólo dos unidades). A continuación, la capa intermedia (RAID-6), forma cuatro de estos pares en un grupo intermedio RAID-6 (necesitas al menos dos grupos intermedios RAID-6). La capa superior RAID combina los grupos RAID-6 intermedios en un RAID-0 para recuperar algo de rendimiento de escritura y deseable algo de eficiencia de almacenamiento. La figura 2 es la configuración RAID-160 mas pequeña la cual utiliza dieciséis unidades.


Esto es sólo un diseño de muestra que ilustra cómo se presenta una configuración RAID-160. Recuerde que el esquema va desde el nivel más bajo (el número más a la izquierda en la numeración RAID), al nivel más alto (el extremo derecho en la numeración de RAID). Así RAID-160 comienza con RAID-1 en el nivel más bajo (el más cercano a las unidades) que tiene pares de unidades en RAID-1 (asumiendo que el RAID-1 tiene dos unidades). A continuación, los pares RAID-1 se combinan con RAID-6 en la capa intermedia para crear grupos RAID-6 (son necesarios por lo menos dos). Dado que RAID-6 requiere al menos cuatro "unidades" necesitará por lo menos cuatro pares RAID-1 para crear un grupo intermedios RAID-6. Por último, los grupos RAID-6 se combinan en el nivel superior con RAID-0 (un RAID 0 de un solo grupo).
Al igual que con RAID-100 esta configuración puede tener sentido cuando se utilizan varias tarjetas RAID con capacidad de RAID-16. En el caso de la figura 2, se usan dos tarjetas RAID con capacidad RAID-16 y luego se combinan por software en el nivel superior en un RAID-0 (es decir un RAID que se ejecuta en el núcleo de Linux). Esto tiene sentido para RAID-160 debido a que el RAID-6 requiere una gran cantidad de poder computacional y distribuir unidades en múltiples grupos RAID-6, cada uno con su propio procesador RAID ayuda a mejorar el desempeño general de RAID.
La figura 2 muestra el menor número de unidades que puede utilizar en una configuración RAID-160 y esto indica uno de los problemas potenciales con RAIDs anidados de tres niveles - el gran número de unidades que tienen que ser utilizadas. El uso de dieciséis unidades para crear una configuración RAID-160 mínima, no es precisamente barato y también te obliga a tener algún tipo de "gabinete" con capacidad para acomodar tantas unidades (y esto no es fácil en el caso de un sistema casero, pero definitivamente no es imposible).

La capacidad de la configuración RAID-160 es bastante fácil de calcular asumiendo que todas las unidades tienen la misma capacidad.

Capacidad = min (tamaños de disco) * (Número de grupos RAID-1 en cada grupo RAID-6 en el nivel intermedio - 2) * (Número de grupos RAID-0 en el nivel superior)

Para la figura 2, esto significa,

Capacidad = min (tamaño de disco) * (4-2) * (2)
Capacidad = min (tamaño del disco) * 4

La eficiencia de almacenamiento resultante es también bastante fácil de calcular:

Eficiencia de almacenamiento = (Número de grupos en cada grupo RAID-6 en el nivel intermedio - 2) / ((Número de discos en RAID-1) * (Número de grupos en cada grupo RAID-6 en el nivel intermedio))

Como un recordatorio, para RAID-16, la eficiencia de almacenamiento es,

Eficiencia de almacenamiento = (Número de grupos RAID-1 - 2) / ((Número de grupos RAID-1) * (Número de discos en RAID-1))

que está bastante cerca de la eficiencia de almacenamiento de RAID-160.

Para la figura 2, la eficiencia de almacenamiento resultante es,

Eficiencia de almacenamiento = (4-2) / (2 * 4)
Eficiencia de almacenamiento = 2/8
Eficiencia de almacenamiento = 0,25 (25%)

Esta es la misma eficiencia de almacenamiento que en la configuración RAID-16 de muestra con ocho unidades que se utilizaba cuatro pares RAID-1 de dos discos y un solo RAID-6 en el nivel superior. Por lo tanto, parece que no recuperamos toda la eficiencia de almacenamiento, pero esto era de esperar.
Tenga en cuenta que el número mínimo de unidades en una configuración RAID-160 es de dieciséis, si usted quiere tener más de un grupo RAID-6 en el nivel intermedio (no tiene mucho sentido usar RAID-0 en un grupo de nivel intermedio RAID-6). Esto significa que usted tiene que tener ocho pares RAID-1 que se combinan para crear dos grupos RAID-6 en el nivel intermedio (cuatro grupos RAID-1 por grupo RAID-0 intermedio). A continuación, los dos grupos RAID-6 intermedios se combinan en un RAID-0 en el nivel superior. El resultado es que usted necesita dieciséis unidades como mínimo para RAID-160.
Para hacer un nivel intermedio RAID-6 "balanceado" (es decir, el mismo número de pares RAID-1 por RAID-6), entonces necesitará incrementar el número total de unidades por el número de unidades en cada grupo RAID-6 en el nivel intermedio. En el caso de la figura 2, el número es ocho.
La tolerancia a fallos de RAID-160 se basa en la de RAID-16 y está de cinco unidades. Usted puede perder dos pares RAID-1 dentro de un grupo RAID-6 y mantener todavía el acceso a los datos. A continuación, puede perder una quinta unidad que forme parte del tercer par RAID-1 en el mismo grupo RAID-6. Entonces, si usted pierde el espejo (la sexta unidad), se pierde el grupo RAID-6 y caerá el RAID-0 del nivel superior.
La tabla 2 a continuación muestra un breve resumen de RAID-1 con algunos puntos destacados.
Otras interesantes configuraciones de RAIDs triples anidados.
Los dos ejemplos aquí descritos están un poco en los extremos opuestos del espectro de RAID anidados. El primero, RAID-100, tiene poca redundancia de datos (1 unidad), pero toneladas de rendimiento de escritura y una eficiencia de almacenamiento muy buena. El segundo tiene toneladas de redundancia de datos (5 unidades), pero el rendimiento de escritura es solo el suficiente y la eficiencia de almacenamiento no es tan buena. Estos dos sencillos ejemplos demuestran que se puede mezclar los niveles RAID estándar (RAID-0, RAID-1, RAID-5 y RAID-6) de diferentes maneras para crear configuraciones diferentes, pero deberá preguntarse si algunos de ellos tienen sentido.
Por ejemplo, ¿RAID-000 tiene sentido? ¿No es eso realmente RAID-0? (Los controladores RAID extras no le otorgan ninguna ventaja de rendimiento).

Como se mencionó anteriormente, los niveles anidados RAID de tres niveles pueden necesitar un gran número de unidades para los esquemas mínimos. Por ejemplo, RAID-666 (realmente el "más diabólico" de todas las configuraciones RAID anidadas), requiere de cuatro unidades por RAID-6 en el nivel más bajo, seguido de cuatro grupos RAID-6 (que cada uno usa RAID-6) en el nivel intermedio, que se combinan en el nivel superior en un RAID-6. Así, el resultado es que se requerirá un mínimo de 64 unidades para una configuración RAID-666 (4 * 4 * 4).
Otras configuraciones de RAID anidados de tres niveles pueden llevarnos a una eficiencia de almacenamiento terrible, pero una redundancia de datos sorprendente. Por ejemplo, RAID-111, utiliza tres niveles de unidades espejo. La configuración mínima requiere de ocho unidades (2 * 2 * 2), y sólo uno de los cuales se utiliza para almacenar datos reales (las otras 7 unidades se utilizan para la creación de los espejos). Esto arroja una eficiencia de almacenamiento de sólo el 12,5%! Sin embargo, usted puede perder hasta siete unidades de disco sin perder el acceso a sus datos.

Las configuraciones RAIDs anidadas de tres niveles tienen que ser cuidadosamente diseñadas y entendidas para que sean eficaces. De lo contrario, podría solo obtener redundancia de datos (o rendimiento) similares a los que obtendría con matrices anidadas de dos niveles, al tiempo que aumenta el número mínimo de discos para la configuración. Sin embargo, algunas configuraciones pueden llevar a un comportamiento deseable.

Resumen
Así como Rodney Dangerfield dijo, "No bromeo acerca de inmersiones. Sobre todo esa. Casi me mata. ... " Las configuraciones RAID anidadas de tres niveles no son algo con lo que pueda bromear porque pueden matar su rendimiento o su capacidad de almacenamiento (eficiencia) o su redundancia. Estas deben ser cuidadosamente diseñadas para asegurarnos de que tengan sentido en relación con configuraciones anidadas de dos niveles o configuraciones de niveles simples. Además de eso, algunas de estas configuraciones pueden requerir un gran número de unidades y varias tarjetas RAID, elevando el costo de la configuración.
Los dos ejemplos presentados en este artículo, RAID-100 y RAID-160, muestran algunos ejemplos extremos de lo que se puede conseguir con configuraciones RAID anidadas de tres niveles . RAID-100 se basa en RAID-10 lo que resulta en una configuración con un gran rendimiento. RAID-160 comienza con una configuración con una redundancia de datos muy buena, RAID-16, y luego agrega RAID-0, en un esfuerzo para mejorar el rendimiento y la eficiencia de almacenamiento. Ambas configuraciones requieren un buen número de unidades para una configuración mínima posible llegando al extremo de RAID-160, donde son obligatorias dieciséis unidades.

Normalmente los RAIDs anidados de tres niveles utilizan en los niveles superiores RAIDs por software. Ambos ejemplos se pueden implementar mediante el uso de varias tarjetas RAID en los niveles inferiores, y RAID por software en los niveles superiores (la figura 1 requirió tres tarjetas RAID, y la Figura 2 requiere dos tarjetas RAID). Este enfoque puede ser muy eficiente porque usted está utilizando tarjetas RAID en paralelo que pueden mejorar la eficiencia y el rendimiento de procesamiento de datos de la configuración de RAID en general, además de reducir el tiempo de reconstrucción de una unidad perdida. Teniendo en cuenta que tenemos equipos de escritorio con entre cuatro y seis núcleos, utilizando RAIDs por softwares en los niveles superiores no es un mal enfoque dado que uno de los núcleos puede dedicarse a las funciones RAID, mientras que el resto esté haciendo alguna otra cosa.
Todavía no hemos terminado con RAID (a pesar de que puede estar gritando en este punto). En el próximo artículo, examinaremos la herramienta de RAID por software en Linux, mdadm en niveles superiores y discutiremos algunas de sus características únicas.