
Estou executando um servidor de desenvolvimento simples (Ubuntu) no qual o MySQL e o MongoDB às vezes travam. Eu sempre os reinicio com sudo service mysql restart
.
Embora eu saiba que preciso investigar por que eles travaram (e o farei), no momento estou procurando uma maneira de reiniciá-los automaticamente após travarem. Acho que preciso de algum tipo de daemon que faça ping neles e os reinicie se eles não responderem mais, mas não tenho certeza de como fazer isso.
Eu li sobre ferramentas comoNagios, mas acho que isso é um pouco exagerado para a minha situação.
Alguém sabe como posso começar?
Responder1
Eu li sobre ferramentas comoNagios, mas acho que isso é um pouco exagerado para a minha situação.
Alguém sabe como posso começar?
Fácil. Considere definir configurações de monitoramento comMonitorar. É uma ferramenta de monitoramento de sistema leve e fácil de configurar, muito útil para configurar em cenários exatamente como você descreve; o serviço cai, reinicie-o e me avise sobre isso.
Eu o uso principalmente para servidores web Apache, mas existemmuitos exemplos do que pode ser feito para outros programas/softwarecomo MySQL e outros.
Configurando o Monit.
A maneira como eu configurei é alinhando isso. Primeiro, instale o próprio programa Monit assim:
sudo apt-get install monit
Depois de instalado, edite a configuração aqui; Eu prefiro usar nano
, mas fique à vontade para usar o editor de texto de sua preferência:
sudo nano /etc/monit/monitrc
Ajuste os valores padrão do daemon para verificar serviços a cada 60 segundos com um atraso inicial de 120:
set daemon 60
with start delay 60
Em seguida, encontre a mailserver
área de monitrc
e adicione a seguinte linha. O Postfix ou um SMTP precisa estar ativo para que isso funcione. Normalmente tenho o Postfix instalado em meus servidores, então uso a seguinte configuração:
set mailserver localhost
Então, certifico-me de que um diretório de configuração do Monit esteja configurado assim:
sudo mkdir -p /etc/monit/conf.d
Configurando um conjunto de regras de monitoramento Monit Apache2.
Agora, como eu disse, eu uso principalmente o Monit para monitoramento do Apache, então esta é uma configuração simples que gosto de usar, mas o conceito básico é semelhante para MySQL, MongoDB ou outras coisas. Eu salvaria neste arquivo:
sudo nano /etc/monit/conf.d/apache2.conf
E este seria o conteúdo desse arquivo:
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 }
A sintaxe é bastante autoexplicativa, mas basicamente:
- O processo depende do
apache2.pid
; certifique-se de alterar isso para corresponder à localização real do seuapache2.pid
ambientehttpd.pid
. - Depois tem comandos ligados aos processos de
start
estop
. - E possui lógica que monitora o servidor web na porta
80
emlocalhost
(127.0.0.1
) - E apenas os atos do servidor ficam inacessíveis por 15 segundos.
- E se tiver que agir, ele tenta reiniciar.
- E então envia um alerta para o endereço de e-mail especificado sobre incidentes de tempo limite do servidor ou inexistência.
Configurando um conjunto de regras de monitoramento Monit MySQL.
Baseado emos exemplos que vinculei acima, eu presumiria que uma configuração como essa funcionaria para MySQL. Primeiro, crie um arquivo como este:
sudo nano /etc/monit/conf.d/mysql.conf
E adaptei o exemplo para que - eu presumo - se comporte de maneira semelhante ao que configurei para o 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 }
É claro que isso deve ser ajustado para corresponder ao seu ambiente de trabalho real - como ajustar a localização do arquivo mysqld.pid
, o endereço de e-mail e outros - mas, além disso, é bastante genérico em ideias/implementação.
Depois de definido, reinicie monit
e tudo ficará bem:
sudo service monit restart
Configurando um conjunto de regras de monitoramento Monit MongoDB.
Para criar um conjunto de regras de monitoramento MongoDB, crie um arquivo como este:
sudo nano /etc/monit/conf.d/mongod.conf
E aqui está a regra de monitoramento do MongoDB; observe que isso corresponde ao daemon ativo do MongoDB e não a um PID (também conhecido como mongod.lock
:), pois não parece funcionar com isso:
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 }
É claro que isso deve ser ajustado para corresponder ao seu ambiente de trabalho real - como ajustar o caminho real do /usr/bin/mongod
binário, o endereço de e-mail e outros - mas, além disso, é bastante genérico em ideias/implementação.
Depois de definido, reinicie monit
e tudo ficará bem:
sudo service monit restart
Monitoramento Monit.
Você pode seguir o log do Monit para vê-lo em ação:
sudo tail -f -n 200 /var/log/monit.log
E como teste, você pode simplesmente parar o servidor MySQL ou MongoDB e ver o que aparece nesse log. Se tudo correr bem, você deverá ver todo o processo de monitoramento e a reinicialização acontecer, incluindo um e-mail sendo enviado para o endereço que você definiu na configuração.
Responder2
Um simples script bash (ou qualquer outra linguagem de script com a qual você esteja familiarizado) fará o trabalho (para ser executado com 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