Renuncia de responsabilidad:
La versión original de este artículo fue publicada por IBM
developerWorks y es propiedad de Westtech Information Services. Este
documento es una versión actualizada del artículo original y contiene
mejoras introducidas por el Equipo de Documentación de Gentoo.
Este documento carece de soporte activo.
|
RAID por software en el nuevo núcleo Linux 2.4, Parte 2
1.
Configuración de RAID-1 en un entorno en producción
RAID en el mundo real
En mi anterior
artículo, introduje a la nueva funcionalidad del RAID por software en
Linux 2.4, mostrando cómo configurar volúmenes lineales, RAID-0 y RAID-1. En
este artículo, echamos un vistazo a todo lo que se necesita saber para
incrementar la disponibilidad en un entorno en producción con RAID-1. Lo cual
requiere muchos más conocimientos y comprensión que configurar RAID-1 en un
servidor de prueba o en casa -- específicamente, debemos saber exactamente de
qué puede protegernos un RAID-1, y cómo mantener nuestro volumen RAID en
funcionamiento en caso de un fallo en un disco. En este artículo, cubriremos
esos puntos, y empezaré mostrando qué es lo que RAID-1, 4 y 5 puede y no puede
hacer por nosotros, para terminar con una completa simulación de prueba en la
que se reemplazará una unidad que ha fallado bajo RAID 1 -- algo que realmente
se debería hacer (con este artículo como guía) siempre que sea posible. Después
de seguir esta simulación se adquiere toda la experiencia necesaria para
afrontar un fallo RAID-1 en un entorno en producción en el mundo real.
¿Qué es lo que RAID no hace?
Las características de tolerancia a fallos de RAID están diseñadas para
protegernos del impacto negativo de un fallo espontáneo en una unidad de disco.
Esto es una muy buena cosa. Pero RAID no es una solución perfecta para cada
tipo de problema con los datos que se pueda ocasionar. Antes de implementar un
sistema RAID tolerante a fallos (1, 4, 5) en un entorno en producción, es de
extraordinaria importancia saber lo que RAID hará y no hará por
nosotros. Cuando nos encontremos en una situación en la que dependamos de RAID
para desempeñar una labor, no podemos permitirnos asumir cosas falsas acerca de
lo que hace. Empecemos desmitificando algunos mitos creados acerca de RAID 1, 4
y 5.
Mucha gente piensa que si guardan todos sus datos importantes en un volumen
RAID 1/4/5, entonces no tendrán que hacer copias de seguridad con regularidad.
Esto es completamente falso -- he aquí el porqué. RAID 1/4/5 ayuda a prevenir
un downtime no planificado a consecuencia de cualquier fallo aleatorio
en una unidad. De todos modos, no ofrece ningún tipo de protección contra una
corrupción de datos accidental o maliciosa. Si se teclea cd /; rm -rf
* como administrador en un volumen RAID, se perderán muchísimos datos
importantes en cuestión de segundos, y el hecho de que se disponga de diez
unidades en una configuración RAID-5 no será de ninguna ayuda. Además RAID no
nos ayudará si roban nuestro servidor o si hay un incendio en el edificio. Por
supuesto, si no se sigue una estrategia de copias de seguridad, no se tendrá un
archivo de datos del pasado -- por lo que si alguien en nuestra oficina borra
un montón de archivos importantes, no habrá forma de poder recuperarlos. Esto,
por sí solo, debería ser suficiente para hacer considerar implementar una
estrategia de copias de seguridad, bajo cualquier circunstancia, antes
de ni tan siquiera empezar a pensar en implantar RAID-1, 4, ó 5.
Otro error suele ser implementar RAID por software en un sistema compuesto por
elementos hardware de baja calidad. Si se va a crear un servidor que va a hacer
algo importante, tiene mucho sentido comprar el hardware de mayor calidad que
permita nuestro presupuesto. Si el sistema es inestable o no está ventilado
adecuadamente tendremos problemas que RAID no podrá resolver. En otro aspecto
similar, RAID no puede proporcionar un mayor tiempo de actividad a nuestro
sistema en caso de un apagón. Si nuestro servidor va a estar haciendo algo
relativamente importante, hay que asegurarse de que está equipado con un
Sistema de Alimentación Ininterrumpida (SAI).
Ahora, vamos con los problemas en el sistema de ficheros. El sistema de
ficheros está "por encima" de nuestro volumen de RAID por software. Lo cual
significa que usar RAID por software no nos permite escapar a problemas con el
sistema de ficheros, como largas y potencialmente problemáticas comprobaciones
del mismo con fsck, si no se está utilizando un sistema de ficheros con
diario de transacciones o si es problemático. Por lo que el RAID por software
no va a hacer mucho más fiable el sistema de ficheros ext2; por ello es tan
importante que la comunidad Linux disponga de sistemas de ficheros como
ReiserFS, JFS y XFS. El RAID por software y un sistema de ficheros con diario
de transacciones hacen una gran combinación.
RAID - Implementación inteligente
Espero haber deshecho todos los mitos que pudieran tenerse acerca de RAID con
la sección anterior. Cuando se implementa RAID-1, 4 ó 5, es muy importante ver
esta tecnología como algo que permitirá incrementar el tiempo de
actividad de la máquina. Cuando se implementa uno de estos niveles de RAID,
nos estamos protegiendo ante una situación muy específica -- un fallo
espontáneo y por completo de una o más unidades de disco. Si se experimenta
esta situación, el RAID por software permitirá al sistema seguir realizando su
actividad, mientras que se hacen los preparativos para cambiar la unidad que ha
fallado por otra nueva. En otras palabras, si se implementa RAID 1, 4 ó 5 se
está reduciendo el riesgo de tener un prolongado tiempo de inactividad no
planificada debido a un fallo desastroso del disco. Por contra, se puede tener
un breve tiempo de inactividad planificado -- el tiempo suficiente para
reemplazar la unidad que ha fallado. Obviamente, esto significa que si tener un
sistema con una gran disponibilidad no es una de nuestras prioridades, entonces
no deberíamos estar pensando en implementar RAID por software, a menos que
hayamos planificado usarlo principalmente para acelerar el rendimiento en la
lectura de archivos.
Un administrador de sistemas capacitado usa el RAID por software por una razón
específica -- para mejorar la fiabilidad de un sistema que era ya muy fiable.
Si se es un administrador de sistemas competente, seguramente lo más básico ya
esté cubierto. Se ha protegido a nuestra organización de catástrofes
implementando una política de copias de seguridad regulares. Proporcionamos la
alimentación del servidor a través de un SAI y tenemos el software que lo
monitoriza funcionando para que el servidor se apague de forma segura en caso
de un apagón prolongado. Probablemente se esté utilizando un sistema de
ficheros con diario de transacciones como ReiserFS para reducir el tiempo de
las comprobaciones del sistema de ficheros con fsck e incrementar su
fiabilidad y rendimiento. Y si el servidor se encuentra bien ventilado y está
compuesto por hardware de la mejor calidad y si se ha prestado mucha atención a
cualquier problema de seguridad. Entonces, y sólo entonces, se debería
considerar implementar RAID por software 1, 4 ó 5 -- haciéndolo, otorgaremos al
servidor un mayor porcentaje de tiempo de actividad, protegiéndolo contra un
fallo por completo de la unidad de disco. El RAID por software es esa capa de
protección añadida que hace a un buen servidor ser aún mejor.
2.
Un paseo por RAID-1
Ahora que hemos leído lo que RAID puede y no puede hacer, espero que se tengan
la actitud y las ganas necesarias. En esta sección, guiaré en el proceso de
simular un fallo en una unidad de disco, y después recuperaré el volumen RAID
del modo degradado. Si existe la posibilidad de seguirme con una máquina de
pruebas, recomiendo encarecidamente hacerlo. Este tipo de simulación puede ser
divertida. Divirtiéndonos ahora nos aseguraremos estar listos para cambiar
una unidad cuando falle realmente, de forma tranquila, al saber exactamente
cómo y qué tenemos que hacer.
Importante:
Para realizar esta prueba, es esencial configurar nuestro volumen RAID-1 para
que podamos arrancar nuestro sistema Linux con una unidad desconectada, dado
que es de este modo como vamos a simular el fallo en la unidad.
|
Bien, el primer paso es configurar un volumen RAID-1; puede consultarse en mi
anterior artículo si se
necesita recordar cómo hacerlo. Una vez que hayamos configurado nuestro volumen
veremos algo así si tecleamos cat /proc/mdstat:
Listado de Código 2.1: Examinar el volumen RAID |
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md0 : active raid1 ide/host2/bus0/target0/lun0/part1[1] ide/host0/bus0/target0/lun0/part5[0]
4610496 blocks [2/2] [UU]
[======>..............] resync = 34.8% (1606276/4610496) finish=3.2min speed=15382K/sec
unused devices: <none>
|
Hay que notar que estoy usando devfs, y por eso que aparecen los nombres de
dispositivos tan largos que aparecen arriba. Estoy usando /dev/hda5
y /dev/hde1 como discos RAID-1. En este momento, el código
del RAID por software del núcleo se encuentra sincronizando los discos para que
sean completamente idénticos. Si el volumen RAID-1 se encuentra en este punto,
podemos crear un sistema de ficheros en el mismo, y después lo podemos montar
donde sea. Se copian algunos archivos en el mismo, y después configuramos
/etc/fstab para que el volumen (/dev/md0) se monte
cada vez que el sistema arranque. Esta es la línea que añadí a mi fstab; otras
pueden variar ligeramente:
Listado de Código 2.2: información fstab |
/dev/md0 /mnt/raid1 reiserfs defaults 0 0
|
Bien; estamos casi listos para simular el fallo en una unidad, pero no del
todo. Primero, hacemos un cat /proc/mdstat de nuevo, y esperamos hasta
que todos los discos del volumen se encuentren sincronizados. Cuando lo estén,
/proc/mdstat será como este:
Listado de Código 2.3: Re-examinar el volumen RAID |
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md0 : active raid1 ide/host2/bus0/target0/lun0/part1[1] ide/host0/bus0/target0/lun0/part5[0]
4610496 blocks [2/2] [UU]
unused devices: <none>
|
Comienza la simulación
Bien, ahora que la sincronización ha culminado, estamos listos para la
simulación. Apagamos la máquina y la desconectamos de la alimentación
eléctrica. Entonces, la abrimos y desconectamos uno de los discos que
conformaban la estructura RAID-1. Por supuesto, evitamos desconectar el disco
que contiene la partición raíz de nuestro sistema Linux -- ¡necesitaremos
arrancar Linux de nuevo! Pues bien, ahora que se ha desconectado el disco duro,
iniciamos la máquina de nuevo. En el momento en que ingresemos en el sistema,
veremos que /dev/md0 está montado y que aún somos capaces de usar
el volumen. Se advertirá el gran cambio cuando se ejecute cat /proc/mdstat
:
Listado de Código 2.4: Pérdida de un disco |
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md0 : active raid1 ide/host0/bus0/target0/lun0/part5[0]
4610496 blocks [2/1] [U_]
unused devices: <none>
|
Aquí, puede verse que el volumen /dev/md0 está funcionando en modo
degradado. He desconectado la unidad /dev/hde, por lo que el
núcleo no encontró /dev/hde1 cuando arrancó e intentó auto-iniciar
la estructura RAID. Afortunandamente, el núcleo encontró /dev/hda5
y fue capaz de iniciar /dev/md0 en modo degradado. Como puede
verse, la partición /dev/hde1 no aparece en /proc/mdstat
, y uno de los discos RAID aparece como "desaparecido" (en [U_]
en lugar de [UU]). Pero dado que /dev/md0 está operativo
aún, el RAID-1 por software está haciendo lo que se suponía que debía hacer:
mantener nuestros datos disponibles.
Recuperación
En este preciso momento, estamos experimentando un fallo simulado en una
unidad. Si la unidad a la que hemos desprovisto de electricidad hubiese
fallado, esa sería la situación en la que nos encontraríamos ahora. Nuestro
volumen RAID-1 estaría funcionando en modo degradado, lo cual quiere decir que
nuestro volumen aún está disponible pero sin ninguna redundancia. En el momento
adecuado debemos apagar el sistema, reemplazar la unidad que ha fallado, y
reiniciar el sistema de nuevo cuanto antes. Nuestro volumen RAID-1 seguirá
funcionando en modo degradado aún.
Una vez que tengamos la nueva unidad en la máquina, deberíamos crear una nueva
partición RAID autodetectable (FD) del tamaño adecuado en nuestro nuevo
disco. Se requiere de un reinicio adicional para que Linux pueda leer otra vez
la tabla de particiones. Una vez que la nueva partición sea reconocida por el
sistema, estamos listos para recuperar nuestra estructura RAID-1 degradada --
entonces tendremos alguna redundancia de nuevo.
Por supuesto, solamente estamos realizando una simulación. Para hacer prácticas
añadiendo una partición a nuestra estructura RAID, podemos hacer una de estas
dos cosas, dependiendo del tipo de escenario para el que uno quiera prepararse.
Se puede apagar la máquina, conectar la unidad, arrancar y añadir la vieja
partición de nuevo a la estructura; o se puede apagar la máquina, conectar la
unidad, arrancar, vaciar la unidad, crear una nueva partición de RAID
auto-detectable (FD) y añadirla a la estructura (con el tamaño adecuado,
por supuesto -- al menos tan grande como la partición a la que está
reemplazando) y después añadir esta nueva partición a estrenar a la estructura.
La segunda elección será más parecida a lo que ocurriría en caso de un fallo
real en un disco duro, mientras que la primera sería algo más parecido a lo que
ocurriría en caso de un fallo en la controladora o en el de un mal cable -- lo
cual ocasionaría que una de las unidades no estuviera disponible, causando que
/dev/md0 funcionara en modo degradado, lo que haría necesario
añadir una partición de nuevo al volumen después de resolver el problema. Sea
cual sea el tipo de simulación que se escoja, la "solución" es la misma --
después de que la nueva partición esté lista, debemos volverla a añadir al
volumen /dev/md0.
Echar un vistazo a dmesg
Antes de añadir de nuevo la partición a la estructura, éste sería un buen
momento para consultar los mensajes de inicio del núcleo. Si se teclea
dmesg | more, seremos capaces de ver dichos mensajes. Debería verse gran
cantidad de texto muy similar a este:
Listado de Código 2.5: Mensajes de inicio del núcleo |
linear personality registered
raid0 personality registered
raid1 personality registered
raid5 personality registered
raid5: measuring checksumming speed
8regs : 1291.209 MB/sec
32regs : 1195.197 MB/sec
pII_mmx : 2110.740 MB/sec
p5_mmx : 2652.522 MB/sec
raid5: using function: p5_mmx (2652.522 MB/sec)
md driver 0.90.0 MAX_MD_DEVS=256, MD_SB_DISKS=27
md.c: sizeof(mdp_super_t) = 4096
autodetecting RAID arrays
(read) ide/host0/bus0/target0/lun0/part5's sb offset: 4610560 [events: 00000004]
(read) ide/host2/bus0/target0/lun0/part1's sb offset: 4610496 [events: 00000002]
autorun ...
considering ide/host2/bus0/target0/lun0/part1 ...
adding ide/host2/bus0/target0/lun0/part1 ...
adding ide/host0/bus0/target0/lun0/part5 ...
created md0
bind<ide/host0/bus0/target0/lun0/part5,1>
bind<ide/host2/bus0/target0/lun0/part1,2>
running: <ide/host2/bus0/target0/lun0/part1><ide/host0/bus0/target0/lun0/part5>
now!
ide/host2/bus0/target0/lun0/part1's event counter: 00000002
ide/host0/bus0/target0/lun0/part5's event counter: 00000004
md: superblock update time inconsistency -- using the most recent one
freshest: ide/host0/bus0/target0/lun0/part5
md: kicking non-fresh ide/host2/bus0/target0/lun0/part1 from array!
unbind<ide/host2/bus0/target0/lun0/part1,1>
export_rdev(ide/host2/bus0/target0/lun0/part1)
md0: max total readahead window set to 124k
md0: 1 data-disks, max readahead per data-disk: 124k
raid1: device ide/host0/bus0/target0/lun0/part5 operational as mirror 0
raid1: md0, not all disks are operational -- trying to recover array
raid1: raid set md0 active with 1 out of 2 mirrors
md: updating md0 RAID superblock on device
ide/host0/bus0/target0/lun0/part5 [events: 00000005](write) ide/host0/bus0/target0/lun0/part5's sb offset: 4610560
md: recovery thread got woken up ...
md0: no spare disk to reconstruct array! -- continuing in degraded mode
md: recovery thread finished ...
..
.... autorun DONE.
|
Este es el momento más adecuado para leer concienzudamente dichos mensajes,
dado que los mismos nos ayudarán a comprender el proceso que el núcleo usa para
auto-iniciar /dev/md0, proporcionando una información inapreciable
acerca del funcionamiento del RAID por software bajo Linux. Si se leen los
mensajes del núcleo listados anteriormente, veremos que mi núcleo ha encontrado
/dev/hda5 y /dev/hde1, pero hde1 no
estaba sincronizado con hda5. Por lo que el núcleo inició
/dev/md0 en modo degradado, usando /dev/hda5 sin tocar
/dev/hde1 en absoluto. Ahora, es el momento de añadir nuestra
partición original (o recién creada) a nuestro volumen, he aquí cómo.
La restauración continúa
Primero, si la partición de reemplazo tiene un nuevo nombre de dispositivo, hay
que actualizar /etc/raidtab para que refleje esta nueva
información. Después, añadimos la nueva partición al volumen usando el
siguiente comando, reemplazando /dev/hde1 con el nombre de
dispositivo de la partición que estemos añadiendo:
Listado de Código 2.6: Añadir un nuevo dispositivo |
# raidhotadd /dev/md0 /dev/hde1
|
Los leds del disco duro deben empezar a iluminarse dado que la reconstrucción
ha comenzado. Comprobemos cat /proc/mdstat para ver el estado de la
reconstrucción RAID-1 en progreso:
Listado de Código 2.7: Comprobar el estado de la reconstrucción RAID-1 |
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md0 : active raid1 ide/host2/bus0/target0/lun0/part1[2] ide/host0/bus0/target0/lun0/part5[0]
4610496 blocks [2/1] [U_]
[>....................] recovery = 1.8% (84480/4610496) finish=3.5min speed=21120K/sec
unused devices: <none>
|
En cuestión de minutos, el volumen RAID-1 habrá recuperado su estado normal:
Listado de Código 2.8: El volumen RAID normal |
# cat /proc/mdstat
Personalities : [linear] [raid0] [raid1] [raid5]
read_ahead 1024 sectors
md0 : active raid1 ide/host2/bus0/target0/lun0/part1[1] ide/host0/bus0/target0/lun0/part5[0]
4610496 blocks [2/2] [UU]
unused devices: <none>
|
¡Aquí está! Lo hemos recuperado con éxito de un fallo simulado en la unidad de
disco, y estamos listos para empezar a usar RAID-1 en un entorno en producción.
Podemos poner la pegatina hecha en casa "Certificado en RAID-1" en nuestra
frente y empezar a agitar los brazos y a correr en nuestra oficina para
disfrute de nuestros compañeros. Aunque puede que, actualmente, esta no sea una
muy buena idea. Nos vemos en el siguiente artículo.
Rescursos
|
|