Manejo de RAID en Linux

Contenido de la entrada.

  • Introducción.
  • ¿Cómo obtener un mejor rendimiento?
  • ¿Qué es RAID? y tipos existentes de RAID
  • Herramientas usadas en Linux

Introducción

Muchas veces para proveer redundancia y tolerancia a fallos en la capa de persistencia en un servidor de base de datos se utilizan los arreglos RAID pero ¿sabes de que trata esta tecnología?

Aunque inicialmente la tecnología RAID no fue creada con el propósito de mejorar el rendimiento se encontró que para ciertas tareas y cargas de trabajo tiene ventajas especialmente al momento del manejo de los datos en el disco físico. Los tres pilares del rendimiento de RAID son: Caching, Striping y Chunking los cuales explicaremos más adelante.

Existen diferentes configuraciones de RAID también llamados niveles y cada uno de estos tiene sus propias características y combinaciones en esta entrada tratare de describir los más comunes.

¿Cómo obtener un mejor rendimiento?

Para tener un mejor rendimiento explicaremos los tres pilares del rendimiento en RAID y después en la siguiente sección veremos como utilizar las herramientas en Linux.

Caching

Estamos hablando de la memoria RAM situada enfrente del disco duro o del arreglo de discos duros que actúa como un buffer que permite tener tiempos de latencia menores como se muestra en la siguiente tabla.

Elemento del CPULatencia Promedio Acceso
Acceso a cache L11 ns
Acceso a memoria RAM70 – 100 ns
Acceso a NVMe SSD I/O7,000 – 150,000 ns
Acceso a HDD I/O1e+6 – 1e+7 ns

Como podemos constatar el acceso a memoria RAM es terriblemente más rápido que el acceso a un HDD en términos computacionales por lo que leer o escribir a un cache es mucho más rápido que a HDD O SSD.

Striping

Striping o Volume Striping, también llamado RAID 0 es tomar un disco virtual que el sistema operativo es capaz de manejar y disponer y dividir el disco virtual a través varios discos físicos. La principal ventaja que tiene este tipo de acceso es la capacidad de obtener el rendimiento no sólo de un disco sino de varios discos.

Chunking

Chunking es segmentar los archivos que usamos como usuario y que se escriben en el disco virtual dicho de otro modo si tenemos un archivo de 100 KB y elijo el tamaño de partición (chunk size) de archivo para un arreglo RAID de 64 KB, los primeros 64 KB del archivo serán escritos en el primer disco físico y el resto en el siguiente.

¿Qué tan grande o pequeño debería ser el chunk size en cada disco?. El tamaño del pedazo de datos (chunk size) debe ser de un tamaño razonable de acuerdo a la cantidad I/O que se envíe al disco virtual y la regla a seguir es la siguiente: big I/O = small chunks, small I/O = big chunks.

Sin embargo en los HDD actuales se maneja un tamaño de sector de 4 KiB que es la unidad mínima en en la que se puede escribir o leer en un HDD por otro lado los SSD actuales manejan el concepto de sector que es totalmente distinto puesto que manejan una tecnología NAND-flash. En los SSD la unidad mínima de escritura y lectura es una página y su tamaño puede variar desde los 2KB hasta los 16KB y tener bloques desde 256KB hasta 4MB.

¿Qué es RAID? y tipos existentes de RAID

RAID del inglés (Redundant Array of Independent Disks) es un conjunto de discos duros físicos HDD o unidades de estado sólido SSD los cuales interactúan en conjunto para almacenar información y proveer al usuario redundancia, tolerancia a fallos y menor tiempo de latencia cuando se requiere acceder o escribir a la información en los discos.

RAID 0

En este nivel la información es almacenada en dos o más HDD o SSD de forma equitativa partiendo la información en segmentos a nivel binario en cada uno de los discos físicos dentro del arreglo es decir cada una de las unidades que componen el arreglo tendrá una parte de la pieza de información que se trate de almacenar.

https://upload.wikimedia.org/wikipedia/commons/1/19/Raid0.png

RAID 1

El nivel 1 nos proporciona redundancia de datos permitiendo utilizar dos o más discos físicos para almacenar la información en espejo es decir la información en cada disco será una replica exacta del primero con el segundo disco físico.

https://upload.wikimedia.org/wikipedia/commons/e/e2/Raid1.png

RAID 1+0

En una configuración RAID 1+0 se trata de una combinación de los niveles anteriores (nivel 0 y 1) donde se requiere un mínimo de 4 discos físicos sobre los cuales en un par de discos se almacenara la información de forma equitativa realizando segmentos a nivel binario sobre los primeros dos discos para mejorar el tiempo de acceso a disco duro. Con respecto a la configuración de nivel 1, recordemos que se realiza la copia de un disco sobre otro en espejo es decir si en esta configuración tenemos una copia idéntica de un disco en el RAID 1+0 tendremos la copia en espejo del RIAD 0 montado como podrás observar en la imagen.

https://upload.wikimedia.org/wikipedia/commons/c/c4/Raid0mas1.png

Herramientas en Linux

En Linux entre muchas otras herramientas se usa la mdadm la cual es usada para la gestión y monitorización de los arreglos RAID. mdadm es open source y se pude obtener su código fuente de forma gratuita. Para empezar mostraremos como usar la mdadm para administrar los RAID.

Crear un arreglo de discos

sudo mdadm -C <mount> --level=<level> --raid-devices=<no. devices> <device1> <device2>

Eliminar un disco del arreglo

Primero marcamos el dispositivo en estado faulty

sudo mdadm --manage --fail <mount> <device>

Luego lo eliminamos del arreglo

sudo mdadm --manage --remove <mount> <device>

Agregar un disco nuevo al arreglo

sudo mdadm --manage --add <mount> <device>

Arrancar un arreglo

sudo mdadm --run <mount>

Detener y eliminar un arreglo de discos

Primero detener el arreglo de discos

sudo mdadm --manage --stop <mount>

Segundo eliminar el arreglo con el comando

sudo mdadm --manage --remove <mount>

Guardar la configuración del arreglo en el fichero de configuración

sudo mdadm --detail --scan >> /etc/mdadm.conf

Referencias

https://es.wikipedia.org/wiki/RAID
https://www.zdnet.com/article/chunks-the-hidden-key-to-raid-performance/
https://www.formulusblack.com/blog/compute-performance-distance-of-data-as-a-measure-of-latency/
http://codecapsule.com/2014/02/12/coding-for-ssds-part-3-pages-blocks-and-the-flash-translation-layer/

Deja un comentario

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.