|
G A C E T A D E L I N U X ...haciendo a Linux un poco más divertido! |
| Pero todas mis particiones fueron replicadas
Por Graham Jenkins Traducción al español por Julio César Mejía Terán
|
Esta historia realmente empieza con la llamada de un usuario mientras paseaba de regreso al trabajo bajo el brillo del sol a la hora del almuerzo un viernes. La conversación fue algo así:
"Hola Graham, parece que tenemos algunos problemas viendo la base de datos para la aplicación ACME. ¿Puedes echarle un vistazo?, por favor"
"Seguro, estoy a diez minutos de mi escritorio, te llamaré cuando esté allí. Todo lo de ese servidor está replicado; lo más probable es que el archivo de logs no esté siendo movido al almacenamiento secundario. Debería poder resolver ésto en pocos minutos."
Y diez minutos después: "Chicos, ésto va a tomar más de unos minutos. Más o menos unas horas, en realidad. Parece que hemos perdido los discos de ambos lados de la réplica!"
Entonces, ¿qué anduvo mal? Las partes de la réplica estaban en discos separados conectados a controladores separados, no hubo evidencias de un pico alto de energía eléctrica o temblor de tierra. Y no podemos culpar al personal nocturno de limpieza por desconectar los cables de electricidad ya que ellos pudieron usar sus máquinas de limpieza.
La respuesta es que no perdimos ambos lados a la vez. En realidad sufrimos la pérdida de un lado una semana antes. Mi compañía tiene un excelente sistema de monitoreo y alarma para detectar ocurrencias como ésta, pero olvidamos avisar a la gente de alarma que este servidor fue movido del estado "construcción" al estado "producción". Ésto no es algo que nosotros estemos propensos a hacer de nuevo!
Unas semanas atrás, mi estación de trabajo en casa experimento su segunda falla de disco en seis meses. Seguro, el disco fue remplazado de nuevo bajo la garantía. Pero decidí corregir ese momento replicando todo en un disco adicional.
Entonces empecé a pensar: "¿Cómo sabría si una partición en un disco se queda fuera de línea?" no es como puedo justificar el enganchar mi estación de trabajo casera al sistema de alarma de mi compañía.
Alguien dijo: "Verifica el archivo de mensajes, lee el corre-e del 'root' " Grandiosa teoría chicos. El problema es, que tengo una cónyuge cuya idea de "mensajes" se compara con una pila de notas Post-It, y quien piensa que "email" significa "Hotmail". Y ella hace mucho uso de mi maquina cuando yo no estoy por ahí.
La solución aquí resultó ser un mecanismo para destellar la luz
Scroll_Lock a intervalos de un segundo cada diez segundos.
Si una partición no consigue replicarse, la luz se enciende. Ningún
hardware adicional, absolutamente fácil de entender.
Lo que tenemos aquí es un perro guardián simple, el cual ladra
periódicamente para demostrar que aún está vivo, y ladra continuamente
cuando alguna cosa va mal.
Así que ¿cómo haces para que la luz Scroll-Lock destelle? Si estas usando Xwindows, es fácil: 'xset led 3' la enciende, 'xset -led 3' la apaga. Incluso funciona si tienes el protector de pantalla ejecutándose y/o tu monitor apagado - siempre que hayas iniciado sesión.
Si nadie inició sesión, o si no estas usando Xwindows, no va a funcionar. Para estos casos, necesitas instalar algo como el programa 'blinker' que viene como parte del paquete "morse2led" disponible en el sitio-web node.to
Aquí está lo que podrías ver cuando introduces 'cat /proc/mdstat' en una maquina que tiene una réplica dañada:
Personalities : [raid1]
read_ahead 1024 sectors
md2 : active raid1 hda6[0] hdb6[1](F)
1959808 blocks [2/1] [U_]
md1 : active raid1 hda5[0] hdb5[1]
5863616 blocks [2/2] [UU]
md0 : active raid1 hda3[1] hdb3[0]
104320 blocks [2/2] [UU]
unused devices: <none>
Y aquí está nuestro programa que detecta cuando algo está mal (a través de
la búsqueda de una guión-inferior '_', en esas líneas que contienen 'blocks'),
entonces activa la luz scroll-lock como consecuencia. Ésto funcionará bajo la
mayoría de los shells Bourne-compatibles, y ha sido extendido para detectar
un para de condiciones de alarma extra. Puedes añadirle lo que tu veas conveniente.
#!/bin/sh
# ledblink System monitor. Scroll-lock light will remain on if any faults.
# Graham Jenkins, IBM GSA, July 2003.
PATH=/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/local/bin
On=1
while : ; do # Use 'blinker' if it works,
blinker -d `expr $On \* 1000` s 2>/dev/null ||# else use 'xset' to flash the
( xset led 3 && sleep $On && xset -led 3 ) # scroll-lock light on and off.
sleep `expr 10 - $On`
On=10 # Set on-time to 10 seconds.
#
# Raid status
grep blocks /proc/mdstat | grep _ >/dev/null 2>&1 && continue
#
# Filesystem capacity
df -x iso9660 |tr -d '%'|awk '{if (NR > 1) if ($5 > 90) exit 1}' || continue
#
# Swap usage
swapon -s | awk '{ if (NR > 1) { Size=Size+$3; Used=Used+$4 } }
END { if (Used*100/Size > 70 ) exit 1 }' || continue
#
On=1 # If there are no problems
done # reset on-time to 1 second.
Si estas contento con ejecutar 'ledblink' solo cuando alguien inició sesión con un sistema Xwindows, es fácil. Si tu maquina tiene un directorio 'xinitrc.d', coloca el siguiente script en éste. De otra manera, coloca la línea no comentada en el archivo 'xinitrc'.
#!/bin/sh # ledblink Place this file in: /usr/X11R6/lib/X11/xinit/xinitrc.d # and make it readable and executable for everyone. [ -x /usr/local/bin/ledblink ] && /usr/local/bin/ledblink &Si tienes el programa 'blinker', puedes iniciar 'ledblink' al momento de encender el equipo con el siguiente script.
#!/bin/sh
# ledblink Start/stope the 'ledblink' system monitor program.
# Graham Jenkins, IBM GSA, July 2003.
#
# chkconfig: 2345 98 7
# description: Start/stops the 'ledblink' system monitor program.
case "$1" in
start) if [ -x /usr/local/bin/ledblink ] ; then
[ -s /var/run/ledblink.pid ] && exit 0
echo "Starting 'ledblink' system monitor program .."
/usr/local/bin/ledblink &
echo $! >/var/run/ledblink.pid
fi ;;
stop) if [ -n "`cat /var/run/ledblink.pid`" ] ; then
echo "Stopping 'ledblink' system monitor program .."
kill `cat /var/run/ledblink.pid`
rm /var/run/ledblink.pid
fi ;;
esac