6.8 Alta disponibilidad de información para pymes

6.8.1 RAID en Linux

La forma de operar un RAID varió a partir del kernel 2.4 y 2.6. Aunque es de suponer que existan instalaciones con kernels viejos (2.0 y 2.2) no tiene interés tratarlo porque es defectuoso, y carece de funcionalidades que tiene la nueva versión1.

Linux RAID puede trabajar con la mayoría de los dispositivos de bloques, no importa si se usa discos IDE o SCSI o una mezcla. Esto implica que se puede crear un RAID de otros dispositivos RAID. Por ejemplo, se puede usar RAID 10 (RAID 0 de múltiples RAID 1) usando las dos funcionalidades juntas (construyo dos dispositivos RAID-1 de discos comunes, y después construyo un RAID-0 a partir de dos dispositivos RAID-1).

La capa RAID no tiene nada que ver con la capa de filesystem, lo que significa que se puede poner cualquier filesystem en un dispositivo RAID, como con cualquier otro dispositivo de bloques.

A continuación veremos que hardware se puede utilizar, y el software necesario para la instalación, configuración y mantenimiento. En los apéndices se puede consultar información introductoria sobre arrays de discos y su utilidad en las PyMEs.

6.8.2 Hardware

En esta parte veremos las principales características de las opciones más populares de dispositivos, discos y controladores, usados para implementar un array de discos, exponiendo ventajas y desventajas de cada uno.

Existen varias alternativas económicas de discos para tener un RAID en el servidor de una PyME, por ejemplo los discos IDE. Las motherboards actuales traen dos puertos IDE, por lo que se pueden poner dos discos en RAID (p.ej. RAID 1) sin tener que comprar más controladores. Para agregar más discos, basta con comprar suficientes tarjetas controladoras IDE, con lo que poner un RAID con 6 u 8 discos es razonablemente económico.

Si se usan discos IDE no conviene tener más de un dispositivo por bus (ya que el esquema master/slave es pésimo para la performance). IDE es bastante malo para acceder a más de un dispositivo por bus, además si falla el disco es probable que también falle el bus.

Para usar RAID para obtener alta performance, es importante que los buses de los discos sean suficientemente rápidos. Por ejemplo, no importa tener 14 UW-SCSI discos en un bus UW si cada disco soporta 20MB/s pero el bus solamente 160 MB/s.

Conviene tener discos de repuesto para reemplazar discos que hayan fallado. Cuando un disco del array falla, automáticamente se lo marca como malo (p.ej. sigue formando parte del RAID pero se considera una parte inactiva) y se reconstruye la información en el disco de repuesto.

La contra de usar discos IDE es que la garantía es un año, mientras que la de discos SCSI es de varios años, por lo que pueden considerarse más propensos a fallar.

Antiguamente, los dispositivos IDE no tenían forma de asegurar que los datos enviados al bus eran los mismos que serían escritos al disco, por la falta de paridad, checksums, etc.

Actualmente con el estándar Ultra-DMA los discos IDE hacen checksum de datos y disminuye la probabilidad de que haya datos corruptos. Por otro lado, los puertos PCI, que son los usados para tanto para discos SCSI como para IDE, no hacen ninguno de estos controles.

Aunque los discos IDE son rápidos, no tienen velocidades de 10.000 o 15.000 rpm como los SCSI. Los discos IDE tienen más de CPU que los SCSI.

Los controladores IDE en general sobreviven aún cuando falle el disco, por lo que la capa de RAID marcará el disco como defectuoso y (si es RAID nivel 1 o superior) seguirá funcionando hasta que se la apague para cambiar el disco.

La cantidad de discos IDE en un RAID está acotada por la cantidad de controladores que puedo tener. Por más que tenga muchos puertos PCI y le instale controladores IDE, tener cables IDE largos no es buena idea porque puede causar corrupción de datos.

Hay que asegurarse de que los discos puedan usarse 24/7. Actualmente hay discos pensados para computadoras de escritorio que requieren que se usen un máximo de horas por día.

Los discos IDE no son adecuados para hacer HotSwap (p.ej. reemplazarlos sin bajar el sistema) porque si el disco es diferente, debido a que Linux no puede re-escanear particiones puedo terminar destruyendo el hardware. Sin embargo es posible con controladores SCSI que soporten re-escaneo del puerto y el reemplazo de los discos.

La alternativa es usar otro tipo de disco y controlador. Por ejemplo con discos IBM SCA y un controlador Adaptec SCSI, y aunque no es sencillo es posible y seguro.

No es fácil agregar un disco a un array existente, aunque hay una herramienta para ello (http://unthought.net/raidreconf) que permite la conversión entre niveles de raid, como por ejemplo cambiar un RAID-1 de dos discos por un array de 4 discos de RAID-5. Sin embargo esta herramienta no es adecuada para producción aún.

6.8.3 Software

Linux incluye herramientas de administración de RAID estándar, raidtools.

Otra opción es mdadm (multiple devices admin) que puede usarse como reemplazo o complemento de raidtools. Está en la versión 1.4.0 y es considerado estable.

Se diferencia de raidtools en que mdam puede diagnosticar, monitorear y recoger información detallada sobre los arrays; es un programa centralizado y no una colección de herramientas; puede realizar todas sus funcionalidades sin tener un archivo de configuración.

Instalación, configuración y mantenimiento


Estas herramientas permite crear dispositivos RAID fácilmente: con raidtools modifico el archivo /etc/raidtab para ingresar los parámetros adecuados al raid (el nivel, los dispositivos, el disco de repuesto, etc.) y con el comando mkraid creo el array y lo inicializo; con mdadm basta un sólo comando. Para utilizar el array bastará con crear un filesystem encima de ese dispositivo, montarlo y agregarlo a /etc/fstab.

Detenerlos o reiniciarlos también se hace con sencillos comando: raidstop y raidstart.

Las herramientas de raid inicializan automáticamente los arrays leyendo de /etc/raidtab. Si un array se inicializa con la opción de persistent-superblock el kernel puede leer la configuración de los propios discos del array (aunque debe conservarse la consistencia entre esa configuración y la que dice el /etc/raidtab).

Los dispositivos RAID no se pueden particionar, p.ej. no puedo dividirlos en múltiples filesystems distintos. En cambio se deberá crear un RAID-1 para cada filesystem, aunque solamente haya dos discos.

Una alternativa es LVM (Logical Volume Management) sobre RAID, que básicamente consiste en tomar el dispositivo RAID como volumen físico y generar varios volúmenes lógicos. Tiene las ventajas de no necesitar rebootear para agregar un nuevo filesystem, y que soporta redimensionar el tamaño de los volúmenes fácilmente, agregar más discos (creo un RAID-1 sobre un par de discos, lo agrego como un volumen físico y lo agrego al grupo de volúmenes).

Para detectar errores en los discos basta mirar los logs del sistema, p.ej. /var/log/messages y /proc/mdstat o mediante las herramientas: lsraid -a /dev/mdx (en el caso de raidtools).

Para simular un fallo de disco basta con desconectar el disco (obviamente con el sistema apagado), aunque las últimas versiones de raidtools incluyen un modo de marcar como defectuosos discos que estén bien, a los efectos de poder hacer pruebas para asegurar el buen funcionamiento del sistema. La herramienta mdadm puede correrse como un proceso y enviar mail al administrador en caso de falla, aunque existen otras herramientas de monitoreo.

La reconstrucción, cuando solamente falla un disco, es un proceso sencillo: involucra el apagado del sistema, el reemplazo del disco, el encendido del sistema y correr una herramienta (p.ej. raidhotadd /dev/mdX /dev/sdX) para reinsertar el disco en el array.

Entonces comienza la reconstrucción automática de la información. Cuando más de un disco falla a la vez, sin embargo, el proceso puede ser más complicado.

Escapa al alcance de este proyecto estudiar el desempeño de RAIDs para distintos tipos de aplicaciones, pero concluimos diciendo que hay algunas aplicaciones para ver el desempeño de un array (no sirve usar hdparm) como por ejemplo IOzone [174] o Bonnie++ [175]

6.8.4 Conclusiones

Implementar un RAID de discos con Linux es trivial. Está soportado por el kernel (para todos los niveles de RAID), hay herramientas estables que permiten todas las funcionalidades desde la línea de comando y no es necesario disponer de hardware costoso ya que hasta se pueden combinar distintos tipos de discos por ser considerados por el sistema operativo como dispositivos de bloques.

El lado negativo es que la cantidad de discos IDE que se pueden poner en un RAID está limitada a 6 u 8 por problemas técnicos. Ni los discos IDE ni los SCSI son adecuados para HotSwap. Y a algunas PyMEs de muy pequeño porte les basta con hacer respaldos diarios p.ej. en dispositivos USB.

1Observación, el kernel puede distribuir los trozos de información de paginado sobre múltiples discos, por lo que no es necesario para ellos instalar un RAID. Basta con indicar varios dispositivos de swap en el /etc/fstab. En cambio si puede ser útil para tener redundancia de información y garantizar la disponibilidad aunque se rompa el disco donde estoy swapeando.

Estudio del Open/Free (GNU/Linux) como plataforma de servicios de red en entornos empresariales
Daniel Caraballo - Mario Madera - Marcelo Odin
Tutor: Ariel Sabiguero Yawelak
2004 - 2005.