Monitoreo · 7 min read · Oct 09, 2025
El Clúster Web Perfecto con Balanceo de Carga y Alta Disponibilidad con 2 Servidores Ejecutando Xen en Ubuntu 8.04 Hardy Heron - Página 9
15. Scripts personalizados para monitoreo (lb1, lb2, web1, web2)
Hice algunos scripts bash para monitorear toda la configuración (son un poco feos pero funcionan). Si los mejoras, ¡no dudes en enviármelos!
15.1 Monitoreo desde lb1.example.com
Primero debemos instalar sendmail para que lb1.example.com pueda enviar correos:
apt-get install sendmail
El primer script verificará si el balanceador de carga de respaldo (lb2.example.com) sigue disponible para tomar el control:
vi /root/lb2_check
#!/bin/bash
# Verificación del balanceador de carga de respaldo
# Copyright (c) 2008 blogama.org
# Este script está licenciado bajo GNU GPL versión 2.0 o superior
# ---------------------------------------------------------------------
### Este script hace 1 verificación ###
### 1) Verifica si el balanceador de carga de respaldo falló y envía notificación por correo ###
### Para ser modificado ###
EMAIL="[email protected]"
###### No hacer modificaciones debajo ######
### Binarios ###
MAIL=$(which mail)
### Para restaurar a original cuando el problema esté solucionado ###
if [ $1 ]; then
if [ $1=="fix" ]; then
rm /root/lb2_problem.txt
> /var/log/ha-log
exit 1;
fi
fi
### Verificar si ya se notificó ###
cd /root
if [ -f lb2_problem.txt ]; then
exit 1;
fi
### Verificar si Heartbeat está corriendo en espera activa ###
tail /var/log/ha-log 2>&1 | grep "Asking other side for ping node count"
if [ "$?" -ne "1" ]; then
echo "El balanceador de carga de respaldo falló" > /root/lb2_problem.txt
$MAIL -s "Problema con el balanceador de carga de respaldo" $EMAIL < /root/lb2_problem.txt
fiHacemos que este script sea ejecutable:
chmod +x /root/lb2_check
Si lb2.example.com falla, entonces creará un archivo /root/lb2_problem.txt y enviará una notificación por correo. Hasta que el archivo lb2_problem.txt esté allí, no volverá a verificar. También debemos vaciar el archivo de registro una vez que el problema esté solucionado para que el script funcione correctamente.
Una vez que el problema esté solucionado en lb2.example.com, por favor ejecuta manualmente:
/root/lb2_check fix
El siguiente script verificará si algún puerto falló en web1 o web2 revisando el archivo de registro de ldirectord. Ya hay una notificación por correo con ldirectord, pero envía millones de notificaciones, el mío solo envía una hasta que soluciones el problema:
vi /root/ports_failed
y haz que se vea así:
#!/bin/bash
# Verificación de fallos de puertos de Ldirectord
# Copyright (c) 2008 blogama.org
# Este script está licenciado bajo GNU GPL versión 2.0 o superior
# ---------------------------------------------------------------------
### Este script hace 1 verificación ###
### 1) Verifica fallos de puertos en servidores balanceados ###
### Para ser modificado ###
EMAIL="[email protected]"
###### No hacer modificaciones debajo ######
### Binarios ###
MAIL=$(which mail)
# para restaurar a original cuando el problema esté solucionado
if [ $1 ]; then
if [ $1=="fix" ]; then
rm /root/port_problem.txt
> /var/log/ldirectord.log
fi
fi
### verificar si ya se notificó ###
cd /root
if [ -f port_problem.txt ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
exit 1;
fi
### Verificar si el puerto falló ###
cat /var/log/ldirectord.log 2>&1 | grep Deleted
if [ "$?" -ne "1" ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
cat "Problema de puertos ver archivo de registro /var/log/port_problem.log" > /root/port_problem.txt
$MAIL -s "Algunos puertos fallaron" $EMAIL < /root/port_problem.txt
fiHacemos que sea ejecutable:
chmod +x /root/ports_failed
Esto es lo mismo que el primer script, una vez que el problema esté solucionado debes ejecutar:
/root/ports_failed fix
a fin de que el script vuelva a funcionar.
Ahora agrega ambos scripts a tu crontab:
crontab -e
* * * * * /root/ports_failed >/dev/null 2>&1
* * * * * /root/lb2_check >/dev/null 2>&115.2 Monitoreo desde lb2.example.com
El monitoreo del segundo balanceador de carga es importante porque nos dirá si el balanceador de carga maestro falló y, si lo hizo, mantener un ojo en los fallos de puertos en web1 y web2.
Primero debemos instalar sendmail para que lb2.example.com pueda enviar correos:
apt-get install sendmail
vi /root/ports_check
Y pega este script:
#!/bin/bash
# Verificación de fallos de puertos de Ldirectord
# Copyright (c) 2008 blogama.org
# Este script está licenciado bajo GNU GPL versión 2.0 o superior
# ---------------------------------------------------------------------
### Este script hace 2 verificaciones ###
### 1) verifica si el balanceador de carga maestro falló y envía notificación por correo ###
### 2) Si el balanceador de carga maestro falló, verifica fallos de puertos en servidores balanceados ###
### Para ser modificado ###
EMAIL="[email protected]"
###### No hacer modificaciones debajo ######
### Binarios ###
MAIL=$(which mail)
### Fecha ###
NOW=$(date)
### Para restaurar a original cuando el problema esté solucionado ###
if [ $1 ]; then
cd /root/
if [ $1=="fix" ]; then
if [ -f lb1_problem.txt ]; then
rm /root/lb1_problem.txt
fi
if [ -f port_problem.txt ]; then
rm /root/port_problem.txt
fi
if [ -f /root/server_problem_notified.txt ]; then
rm /root/server_problem_notified.txt
fi
> /var/log/ldirectord.log
> /var/log/ha-log
exit 1;
fi
fi
# verificar si ldirectord está corriendo en lb2.example.com (significa que lb1.example.com falló)
#$LDIRECTORD /etc/ha.d/ldirectord.cf status 2>&1 | grep running
cat /var/log/ha-log | grep "takeover complete" > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
### verificar si ya se notificó ###
cd /root
if [ -f port_problem.txt ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
exit 1;
fi
### Verificar si el puerto falló ###
cat /var/log/ldirectord.log 2>&1 | grep Deleted
if [ "$?" -ne "1" ]; then
cat /var/log/ldirectord.log | grep Deleted > /var/log/port_problem.log
echo "Problema de puertos ver archivo de registro /var/log/port_problem.log" > /root/port_problem.txt
$MAIL -s "Algunos puertos fallaron" $EMAIL < /root/port_problem.txt
fi
### Verificar si ya se notificó que el balanceador de carga maestro falló ###
cd /root
if [ -f server_problem_notified.txt ]; then
exit 1;
fi
### Notificar que el balanceador de carga maestro falló ###
cd /root
MESSAGE="$NOW : El balanceador de carga maestro falló"
echo $MESSAGE > lb1_problem.txt
$MAIL -s "El balanceador de carga maestro falló" $EMAIL < /root/lb1_problem.txt
echo "notificado" > server_problem_notified.txt
fiHacemos que sea ejecutable:
chmod +x /root/ports_check
Y lo agregamos a nuestro crontab:
crontab -e
* * * * * /root/ports_failed >/dev/null 2>&1Cuando recibas una notificación del script, por favor ejecuta después:
/root/ports_check fix
15.3 Monitoreo desde web1 y web2
El monitoreo del clúster web ya está parcialmente hecho con monit y munin.
La parte que aún no está cubierta es el monitoreo de la replicación de MySQL.
Por favor, lee el siguiente artículo:
Reparar la replicación maestro-maestro de MySQL
El monitoreo de MySQL es opcional, pero en un servidor de producción, pueden ocurrir problemas con la replicación de MySQL, así que realmente recomiendo usar esos scripts o algo similar para verificar la consistencia de las bases de datos.
15.4 Monitoreo desde un servidor remoto
Esta parte agrega seguridad adicional al verificar puertos importantes (25,53,80,443) desde un servidor remoto (instalar dns-utils para dig):
#!/bin/bash
# Script para verificar puertos importantes en un servidor web remoto
# Copyright (c) 2008 blogama.org
# Este script está licenciado bajo GNU GPL versión 2.0 o superior
# ---------------------------------------------------------------------
### Este script hace una verificación en los puertos 25, 53, 80 y 443 ###
### Después de 2 verificaciones fallidas, enviará una notificación por correo ###
### Para ser modificado ###
WEBSERVERIP="192.168.1.106"
MAILSERVERIP="192.168.1.106"
EMAIL="[email protected]"
DNSSERVERIP="192.168.1.106"
DOMAINTOCHECKDNS="example.com"
DOMAINIP="192.168.1.106"
###### No hacer modificaciones debajo ######
### Binarios ###
MAIL=$(which mail)
TELNET=$(which telnet)
DIG=$(which dig)
### Verificar si ya se notificó ###
cd /root
if [ -f server_problem.txt ]; then
exit 1;
fi
### Probar SMTP ###
(
echo "quit"
) | $TELNET $MAILSERVERIP 25 | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
echo "PUERTO CONECTADO"
else
if [ -f server_problem_first_time_25.txt ]; then
echo "PUERTO 25 NO CONECTADO" >> /root/server_problem.txt
else
echo "NO CONECTADO" > /root/server_problem_first_time_25.txt
fi
fi
### Probar HTTP ###
(
echo "quit"
) | $TELNET $WEBSERVERIP 80 | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
echo "PUERTO CONECTADO"
else
if [ -f server_problem_first_time_80.txt ]; then
echo "PUERTO 80 NO CONECTADO" >> /root/server_problem.txt
else
echo "NO CONECTADO" > /root/server_problem_first_time_80.txt
fi
fi
### Probar HTTPS###
(
echo "quit"
) | $TELNET $WEBSERVERIP 443 | grep Connected > /dev/null 2>&1
if [ "$?" -ne "1" ]; then
echo "PUERTO CONECTADO"
else
if [ -f server_problem_first_time_443.txt ]; then
echo "PUERTO 81 NO CONECTADO" >> /root/server_problem.txt
else
echo "NO CONECTADO" > /root/server_problem_first_time_443.txt
fi
fi
### Probar DNS ###
$DIG $DOMAINTOCHECKDNS @$DNSSERVERIP | grep $DOMAINIP
if [ "$?" -ne "1" ]; then
echo "PUERTO CONECTADO"
else
if [ -f server_problem_first_time_53.txt ]; then
echo "PUERTO 53 NO CONECTADO" >> /root/server_problem.txt
else
echo "NO CONECTADO" > /root/server_problem_first_time_53.txt
fi
fi
### Enviar notificación por correo después de 2 verificaciones fallidas ###
if [ -f server_problem.txt ]; then
$MAIL -s "Problema del servidor" $EMAIL < /root/server_problem.txt
fi¡Y voilà! No dudes en enviarme correos privados a admin [at] marchost.com o publicar comentarios aquí o en mi página: blogama.org
Recibe nuevas publicaciones en tu bandeja de entrada.
No spam. Cancela la suscripción en cualquier momento.