
Estoy ejecutando un servidor de desarrollo simple (Ubuntu) en el que MySQL y MongoDB a veces fallan. Siempre los reinicio con sudo service mysql restart
.
Aunque sé que necesito investigar por qué fallan (y lo haré), actualmente estoy buscando una manera de reiniciarlos automáticamente después de que fallaron. Supongo que necesito tener algún tipo de demonio que les haga ping y los reinicie si ya no responden, pero no estoy seguro de cómo hacerlo.
Leí sobre herramientas comoNagios, pero supongo que eso es un poco excesivo para mi situación.
¿Alguien sabe cómo puedo empezar?
Respuesta1
Leí sobre herramientas comoNagios, pero supongo que eso es un poco excesivo para mi situación.
¿Alguien sabe cómo puedo empezar?
Fácil. Considere la posibilidad de configurar configuraciones de monitoreo conmonitor. Es una herramienta de monitoreo del sistema liviana y fácil de configurar que es muy útil para configurar en escenarios exactamente como usted describe; El servicio se cae, reinícielo y avíseme al respecto.
Lo he usado principalmente para servidores web Apache, pero haymuchos ejemplos de lo que se puede hacer con otros programas/softwarecomo MySQL y demás.
Configurando Monit.
La forma en que lo configuré es esta línea. Primero, instale el programa Monit de esta manera:
sudo apt-get install monit
Una vez instalado, edite la configuración aquí; Prefiero usar nano
, pero siéntete libre de usar cualquier editor de texto que prefieras:
sudo nano /etc/monit/monitrc
Ajuste los valores predeterminados del demonio para verificar los servicios cada 60 segundos con un retraso de inicio de 120:
set daemon 60
with start delay 60
Luego encuentra el mailserver
área de monitrc
y agrega la siguiente línea. Postfix o SMTP deben estar activos para que esto funcione. Normalmente tengo Postfix instalado en mis servidores, así que uso la siguiente configuración:
set mailserver localhost
Luego me aseguro de que el directorio de configuración de Monit esté configurado de esta manera:
sudo mkdir -p /etc/monit/conf.d
Configuración de un conjunto de reglas de monitoreo de Monit Apache2.
Ahora, como dije, uso principalmente Monit para monitorear Apache, por lo que esta es una configuración simple que me gusta usar, pero el concepto básico es similar para MySQL, MongoDB u otras cosas. Yo lo guardaría en este archivo:
sudo nano /etc/monit/conf.d/apache2.conf
Y este sería el contenido de ese archivo:
check process apache with pidfile /var/run/apache2.pid
start "/usr/sbin/service apache2 start"
stop "/usr/sbin/service apache2 stop"
if failed host 127.0.0.1 port 80
with timeout 15 seconds
then restart
alert [email protected] only on { timeout, nonexist }
La sintaxis se explica por sí misma, pero básicamente:
- El proceso depende del
apache2.pid
; asegúrese de cambiarlo para que coincida con la ubicación real de suapache2.pid
ohttpd.pid
en su entorno. - Luego tiene comandos conectados a los procesos de
start
ystop
. - Y tiene lógica que monitorea el servidor web en el
80
puertolocalhost
(127.0.0.1
) - Y sólo los actos del servidor son inalcanzables durante 15 segundos.
- Y si tiene que actuar, intenta reiniciar.
- Y luego envía una alerta a la dirección de correo electrónico especificada sobre incidentes en los que el servidor se agota o no existe.
Configuración de un conjunto de reglas de monitoreo de Monit MySQL.
Residencia enlos ejemplos que vinculé arriba, Supongo que una configuración como esta funcionaría para MySQL. Primero, crea un archivo como este:
sudo nano /etc/monit/conf.d/mysql.conf
Y he adaptado el ejemplo para que, supongo, se comporte de manera similar a lo que configuré para Apache:
check process mysqld with pidfile /var/run/mysqld/mysqld.pid
start program = "/usr/sbin/service mysql start"
stop program = "/usr/sbin/service mysql stop"
if failed host 127.0.0.1 port 3306 protocol mysql
with timeout 15 seconds
then restart
alert [email protected] only on { timeout, nonexist }
Por supuesto, esto debe modificarse para que coincida con su entorno de trabajo real, como ajustar la ubicación del correo electrónico mysqld.pid
, la dirección de correo electrónico y demás, pero más allá de eso, es bastante genérico en ideas/implementación.
Una vez configurado, reinicie monit
y todo debería estar bien:
sudo service monit restart
Configuración de un conjunto de reglas de monitoreo de Monit MongoDB.
Para crear un conjunto de reglas de monitoreo de MongoDB, cree un archivo como este:
sudo nano /etc/monit/conf.d/mongod.conf
Y aquí está la regla de monitoreo de MongoDB; tenga en cuenta que esto coincide con el demonio MongoDB activo y no con un PID (también conocido como mongod.lock
:) ya que no parecía funcionar con eso:
check process mongod matching "/usr/bin/mongod"
start program = "/usr/sbin/service mongod start"
stop program = "/usr/sbin/service mongod stop"
if failed host 127.0.0.1 port 27017 protocol http
with timeout 15 seconds
then restart
alert [email protected] only on { timeout, nonexist }
Por supuesto, esto debe modificarse para que coincida con su entorno de trabajo real, como ajustar la ruta real del /usr/bin/mongod
binario, la dirección de correo electrónico y demás, pero más allá de eso, es bastante genérico en ideas/implementación.
Una vez configurado, reinicie monit
y todo debería estar bien:
sudo service monit restart
Monitoreo de Monitoreo.
Puedes seguir el registro de Monit para verlo en acción:
sudo tail -f -n 200 /var/log/monit.log
Y como prueba, simplemente puede detener el servidor MySQL o MongoDB y luego ver qué aparece en ese registro. Si todo va bien, debería ver todo el proceso de monitoreo y reinicio, incluido el envío de un correo electrónico a la dirección que configuró en la configuración.
Respuesta2
Un script bash simple (o cualquier otro lenguaje de script con el que esté familiarizado) hará el trabajo (para ejecutar con sudo):
while true
do
# Ping the MySQL server (or run a real SELECT command using mysql client)
mysqladmin ping
# Check the return code: should be 0 if server is alive
if [[ $? != 0 ]]
then
service mysql restart
fi
# Wait until next check
sleep 60
done