RAID revisitado
Allá cuando era un técnico de servicio novato y apenas sabía nada sobre administración de sistemas, uno de los pocos temas que siempre se esperaba que domináramos a la perfección era RAID – Arreglo Redundante de Discos Económicos (Redundant Array of Inexpensive Disks). Era la respuesta a todos nuestros problemas de almacenamiento. Con RAID podíamos escalar nuestros sistemas de archivos a mayor tamaño, obtener mejor rendimiento e incluso añadir redundancia, lo que nos permitía sobrevivir a la pérdida de un disco que, especialmente en aquellos días, ocurría con bastante regularidad. Con el auge de los dispositivos de almacenamiento NAS y SAN, el conjunto de habilidades necesario para descender al nivel del almacenamiento físico y ajustarlo para satisfacer las necesidades del sistema en cuestión está desapareciendo rápidamente. Esto no es algo bueno. El hecho de que estemos descargando el almacenamiento a dispositivos externos no cambia el hecho de que necesitamos comprender fundamentalmente nuestro almacenamiento y configurarlo para satisfacer las necesidades específicas de nuestros sistemas.
Un concepto erróneo que parece haberse instalado en el sector durante los últimos cinco a diez años es la creencia de que RAID representa de algún modo una copia de seguridad del sistema. No es así. RAID es una forma de tolerancia a fallos. La copia de seguridad y la tolerancia a fallos son conceptualmente muy diferentes. La copia de seguridad está diseñada para permitirle recuperarse después de que haya ocurrido un desastre. La tolerancia a fallos está diseñada para disminuir, en primer lugar, la probabilidad de que ocurra un desastre. Piense en la tolerancia a fallos como construir una valla en lo alto de un acantilado, y en la copia de seguridad como construir un hospital al pie del mismo. Nunca se quiere estar realmente en una situación sin tener tanto una valla como un hospital, pero definitivamente son cosas distintas.
Una vez que implementamos RAID para nuestras unidades, ya sea conectadas localmente o en un dispositivo remoto como una SAN, disponemos hoy de cuatro soluciones RAID clave entre las que elegir para las empresas: RAID 1 (duplicación o mirroring), RAID 5 (distribución con paridad o striping with parity), RAID 6 (distribución con doble paridad) y RAID 10 (duplicación con distribución.) Existen otras, como RAID 0, que solo deberían utilizarse en circunstancias excepcionales, cuando realmente se comprenden las necesidades del subsistema de unidades. RAID 50 y 51 también se utilizan, pero con mucha menos frecuencia, y no son ni de lejos tan eficaces. Hace diez años, RAID 1 y RAID 5 eran habituales, pero hoy tenemos más opciones.
Repasemos las opciones y analicemos algunos números básicos. En nuestros ejemplos utilizaremos n para representar el número de unidades de nuestro arreglo y utilizaremos s para representar el tamaño de cualquier unidad individual. Usando esto, podemos expresar el espacio de almacenamiento utilizable de un arreglo, lo que facilita las comparaciones en términos de capacidad de almacenamiento.
RAID 1: En este tipo de RAID las unidades se duplican (mirroring). Tiene dos unidades y hacen todo juntas al mismo tiempo, de ahí la “duplicación”. La duplicación es extremadamente estable, ya que el proceso es muy simple, pero requiere que compre el doble de unidades de las que necesitaría si no usara RAID en absoluto, puesto que su segunda unidad se dedica a la redundancia. El beneficio es que tiene la garantía de que cada bit que escribe en el disco se está escribiendo dos veces para su protección. Así, con RAID 1 nuestra capacidad se calcula como (n*s/2). RAID 1 adolece de ofrecer ganancias de rendimiento mínimas frente a las unidades sin RAID. Las velocidades de escritura son equivalentes a las de un sistema sin RAID, mientras que las velocidades de lectura son casi el doble de rápidas en la mayoría de las situaciones, ya que durante las operaciones de lectura las unidades pueden acceder en paralelo para aumentar el rendimiento. RAID 1 está limitado a conjuntos de dos unidades.
RAID 5: Distribución con paridad simple. En este tipo de RAID los datos se escriben en una franja compleja a través de todas las unidades del arreglo, con un bloque de paridad distribuido que existe a lo largo de todas las unidades. Al hacer esto, RAID 5 puede utilizar un arreglo de tamaño arbitrario de tres o más discos y solo pierde la capacidad de almacenamiento equivalente a un único disco por la paridad, aunque la paridad está distribuida y no reside únicamente en ningún disco físico concreto. RAID 5 se utiliza a menudo por su rentabilidad debido a su escasa pérdida de capacidad de almacenamiento en arreglos grandes. A diferencia de la duplicación, la distribución con paridad requiere que se realice un cálculo por cada franja de escritura a través de los discos, y esto genera cierta sobrecarga. Por lo tanto, el rendimiento no siempre es un cálculo evidente y depende en gran medida de la potencia de cómputo del sistema que realiza el cálculo de la paridad. Calcular la capacidad de RAID 5 es bastante sencillo, ya que es simplemente ((n-1)*s). Un arreglo RAID 5 puede sobrevivir a la pérdida de cualquier disco individual del arreglo.
RAID 6: Distribución redundante con doble paridad. RAID 6 es prácticamente idéntico a RAID 5, pero utiliza dos bloques de paridad por franja en lugar de uno, para permitir una protección adicional frente a fallos de disco. RAID 6 es un miembro más reciente de la familia RAID, habiendo sido añadido varios años después de que los demás niveles se hubieran estandarizado. RAID 6 es especial porque permite el fallo de dos unidades cualesquiera dentro de un arreglo sin sufrir pérdida de datos. Pero para acomodar el nivel adicional de redundancia, un arreglo RAID 6 pierde la capacidad de almacenamiento equivalente a dos unidades del arreglo y requiere un mínimo de cuatro unidades. Podemos calcular la capacidad de un arreglo RAID 6 con ((n-2)*s).
RAID 10: Duplicación más distribución. Técnicamente, RAID 10 es un tipo de RAID híbrido que abarca un conjunto de espejos RAID 1 existentes en una franja sin paridad (RAID 0). Muchos proveedores utilizan el término RAID 10 (o RAID 1+0) al hablar de solo dos unidades en un arreglo, pero técnicamente eso es RAID 1, ya que la distribución no puede producirse hasta que haya un mínimo de cuatro unidades en el arreglo. Con RAID 10, las unidades deben añadirse de a pares, por lo que en un arreglo solo puede existir un número par de unidades. RAID 10 puede sobrevivir a la pérdida de hasta la mitad del conjunto total de unidades, pero con una pérdida máxima de una de cada par. RAID 10 no implica un cálculo de paridad, lo que le otorga una ventaja de rendimiento sobre RAID 5 o RAID 6 y requiere menos potencia de cómputo para gestionar el arreglo. RAID 10 ofrece el mayor rendimiento de lectura de cualquier tipo de RAID común, ya que todas las unidades del arreglo pueden utilizarse simultáneamente en operaciones de lectura, aunque su rendimiento de escritura es mucho menor. El cálculo de capacidad de RAID 10 es idéntico al de RAID 1, (n*s/2).
En la empresa actual es raro que un departamento de TI tenga una necesidad seria de considerar cualquier configuración de unidades fuera de las cuatro mencionadas aquí, independientemente de si se implementa RAID por software o por hardware. Tradicionalmente, la mayor preocupación en una decisión de arreglo RAID se basaba en la capacidad utilizable. Esto se debía a que las unidades eran caras y pequeñas. Hoy las unidades son tan grandes que la capacidad de almacenamiento rara vez es un problema, al menos no como lo era hace apenas unos años, y los costos han caído de tal manera que la compra de unidades adicionales necesarias para una mejor redundancia de unidades es, por lo general, de menor importancia. Cuando la capacidad es escasa, RAID 5 es una opción popular porque pierde la menor capacidad de almacenamiento en comparación con otros tipos de arreglo, y en arreglos grandes la pérdida de almacenamiento es nominal.
Hoy en día, generalmente tenemos otras preocupaciones, principalmente la seguridad de los datos y el rendimiento. Gastar un poco más para garantizar la protección de los datos debería ser una decisión obvia. RAID 5 adolece de poder perder solo una única unidad. En un arreglo de apenas tres miembros, esto es solo ligeramente más peligroso que la protección que ofrece RAID 1. Podríamos sobrevivir a la pérdida de cualquiera de las tres unidades. No demasiado alarmante en comparación con perder cualquiera de dos unidades. Pero ¿qué pasa con un arreglo grande, digamos dieciséis unidades? El hecho de poder perder con seguridad solo una de dieciséis unidades debería hacernos cuestionar nuestra fiabilidad de manera un poco más exhaustiva.
Aquí es donde RAID 6 intervino para llenar el vacío. RAID 6, cuando se utiliza en un arreglo grande, introduce una pérdida muy pequeña de capacidad de almacenamiento y rendimiento, a la vez que proporciona la garantía de poder perder dos unidades cualesquiera. Los defensores del bando de la distribución con paridad a menudo citan estos números para tranquilizar a la gerencia con que RAID 5/6 puede proporcionar una adecuada relación calidad-precio en los subsistemas de almacenamiento, pero hay otros factores en juego.
Casi por completo pasada por alto en las discusiones sobre la fiabilidad de RAID – un tema que se aborda demasiado pocas veces, de por sí – está la cuestión de la fiabilidad del cálculo de paridad. Con RAID 1 o RAID 10 no se realiza ningún “cálculo” para crear una franja con paridad. Los datos simplemente se escriben de manera estable. Cuando una unidad falla, su compañera asume la carga y el rendimiento de la unidad se degrada ligeramente hasta que se reemplaza la compañera. No hay ningún proceso de reconstrucción que afecte a los miembros de unidad existentes. No ocurre así con las franjas de paridad.
Los arreglos RAID con paridad tienen operaciones que implican calcular qué es y qué debería estar en las unidades. Si bien este cálculo es muy simple, brinda una oportunidad para que las cosas salgan mal. Una controladora de arreglo que falle con RAID 1 o RAID 10 podría, en teoría, escribir datos erróneos sobre el contenido de las unidades, pero no hay ningún proceso mediante el cual la controladora realice cambios en las unidades por sí sola, por lo que es extremadamente improbable que esto llegue a ocurrir, ya que nunca hay un proceso de “reconstrucción” salvo al crear un espejo.
Cuando los arreglos con paridad realizan una operación de reconstrucción, ejecutan un proceso complejo mediante el cual recorren todo el contenido del arreglo y reescriben los datos faltantes en la unidad reemplazada. En sí mismo, esto es relativamente simple y no debería ser motivo de preocupación. Lo que yo y otros hemos visto de primera mano es un escenario ligeramente distinto que involucra discos que han perdido conectividad debido a conectores sueltos hacia el arreglo. Las unidades pueden comúnmente “aflojarse” con el tiempo a medida que permanecen en un servidor, especialmente después de varios años de servicio en un sistema siempre encendido.
Lo que puede ocurrir, en escenarios extremos, es que los datos válidos de las unidades sean sobrescritos por datos de paridad erróneos cuando una controladora de arreglo cree que una o más unidades han fallado en sucesión y han sido puestas de nuevo en línea para su reconstrucción. En este caso, las unidades en sí no han fallado y no hay pérdida de datos. Todo lo que se requiere es que las unidades se reasienten, en teoría. En los sistemas de intercambio en caliente (hot swap), la gestión de la reconstrucción de unidades suele ser automática, basada en la extracción y reemplazo de una unidad averiada. Por lo tanto, este proceso de perder y reemplazar una unidad puede producirse sin intervención humana alguna – y puede iniciarse un proceso de reconstrucción. Durante este proceso, el sistema de unidades está en riesgo y, si este mismo evento volviera a ocurrir, el arreglo de unidades podría, en función del estado de las unidades, comenzar a distribuir datos erróneos a través de las unidades, sobrescribiendo el sistema de archivos válido. Es una de las visiones más deprimentes que un administrador de servidores puede contemplar: que un sistema sin unidades averiadas pierda un arreglo entero debido a una operación de reconstrucción innecesaria.
En teoría, este tipo de situación no debería ocurrir y existen salvaguardas para protegerse contra ella, pero la determinación de una controladora de unidades de bajo nivel acerca del estado actual y previo de una unidad y la calidad de los datos que residen en ella no es tan simple como podría parecer, y es posible que se produzcan errores. Si bien esta situación es improbable, sí ocurre, y añade un riesgo casi imposible de calcular a los sistemas RAID 5 y RAID 6. Debemos considerar el riesgo de fallo de paridad además del riesgo tradicional calculado a partir del número de pérdidas de unidades que un arreglo puede sobrevivir de entre un conjunto. A medida que las unidades se vuelven más fiables, la importancia del evento de riesgo de fallo de paridad se hace mayor.
Además, la paridad de RAID 5 y RAID 6 introduce una sobrecarga del sistema debido al cálculo de paridad, que a menudo se gestiona por medio de hardware RAID dedicado. Este cálculo introduce latencia en el subsistema de unidades que varía drásticamente según la implementación, tanto en hardware como en software, lo que hace imposible establecer cifras de rendimiento de los niveles RAID unos frente a otros, ya que cada implementación será única.
Posiblemente el mayor problema con las opciones de RAID hoy en día es que la facilidad con la que pueden obtenerse las métricas de eficiencia de almacenamiento y de capacidad de supervivencia ante la pérdida de unidades enmascara el panorama general de fiabilidad y rendimiento, ya que esas estadísticas están casi por completo indisponibles. Uno de los peligros de las métricas es que las personas se centrarán en los factores que pueden medirse fácilmente e ignorarán aquellos que no pueden medirse con facilidad, independientemente de su potencial de impacto.
Si bien todos los niveles RAID modernos tienen su lugar, es fundamental que se consideren dentro de un contexto y con una comprensión del alcance completo de los riesgos. Deberíamos esforzarnos por desplazar a nuestro sector desde un valor predeterminado de RAID 5 hacia un valor predeterminado de RAID 10. Las unidades son baratas y la pérdida de datos es cara.
[Edición: En los años transcurridos desde que esto se escribió inicialmente, el auge de los riesgos de URE (Errores de Lectura Irrecuperables, Unrecoverable Read Errors) durante una operación de reconstrucción ha desplazado los riesgos principales de los aquí enumerados hacia los riesgos relacionados con URE para los arreglos con paridad.]
