rwd - Restart When Down

Projeto com foco em manter os serviços de web hosting operantes, prolongando o tempo online, mesmo em situações desfavoráveis. Feito, testado e usado apenas em servidores WHM/cPanel.

[ Hits: 613 ]

Por: Danillo Costa em 01/11/2018


Introdução



Projeto com foco em manter os serviços de web hosting operantes, prolongando o tempo online, mesmo em situações desfavoráveis. Feito, testado e usado apenas em servidores WHM/cPanel.

Ao identificar que o Apache ou o MySQL não estão rodando, que o servidor esteja com o load average alto ou com alto uso de memória swap, o rwd irá reiniciar o Apache e/ou o MySQL, afim que os mantenham online. As ações são registradas em log, podendo habilitar as notificações por e-mail.

Inicialmente desenvolvido para cobrir a deficiência do monitor do WHM/cPanel. Iniciado em abril de 2011 em shell script, sendo reescrito em Python 2 em 2012, ganhou novas funcionalidades e aperfeiçoamentos até dezembro de 2014, quando não recebeu mais nenhuma modificação pela minha falta de disponibilidade, motivo pelo qual estou abrindo o código.

WHM/cPanel

É mundialmente aceito e oferece uma série de ferramentas necessárias aos provedores de hospedagem web para que gerencie a infraestrutura e as contas de hospedagens. Com isso, o rwd pode vir a ser útil principalmente a esse grupo.

Motivação

Esse projeto nasceu na empresa que trabalho, SoftHost. Era comum presenciar servidores inoperantes devido a travamentos ocasionados por falta de processamento ou memória RAM para a carga de trabalho que exigiam, sendo que o monitor do próprio WHM/cPanel não oferecia resiliência para este tipo de cenário. Enquanto o cliente não otimizava a carga de trabalho ou contratava mais recursos de processamento ou memória RAM, tínhamos que intervir, reiniciando o servidor até que o cliente conseguisse acesso ao servidor e o estabilizasse.

Assim nasceu um script em shell que automaticamente reiniciava apenas o Apache quando o detectava que não estava online ou quando o servidor estava sobrecarregado, evitando que o servidor travasse, já que na época as sobrecargas em 99.9% dos casos eram oriundas do serviço Apache. Depois nasceu o rwd em Python para cobrir um espectro maior de possibilidades, ainda com a finalidade de não deixar os servidores ficarem inoperantes, de forma automática.

Como o rwd funciona

A cada ciclo de 20 segundos (padrão) é realizado 3 tipos de verificação:
  1. Swap - Por padrão, ao chegar em 50% de uso de memória swap, o Apache e o MySQL serão reiniciados.
  2. MySQL - Se o MySQL não estiver operante, o MySQL será reiniciado.
  3. Apache - Se o Apache não estiver operante ou o servidor esteja sobrecarregado, o Apache será reiniciado.

Existem mecanismos que impedem várias reinicializações em um curto período de tempo, em casos como alto uso de swap ou sistema sobrecarregado.

Pré-requisitos

  • WHM/cPanel;
  • CentOS 6/7;
  • Desmarcar o Apache e o MySQL da coluna "Monitor" em "Service Manager" do WHM, para evitar conflito.

Instalação

Execute os comandos:

# mkdir -p /root/scripts/ 2> /dev/null
# cd /root/scripts/
# git clone https://github.com/hellnux/rwd.git
# cd rwd
# chmod 700 rwd.py rwd.conf
# mv -f rwd /etc/rc.d/init.d/
# cd /etc/rc.d/init.d/
# chmod 755 rwd
# chkconfig --add rwd
# chkconfig --level 3 rwd on
# service rwd start


Uso

O rwd já vem pronto para uso, mas pode editar o arquivo de configuração em /root/scripts/rwd/rwd.conf, bastando reiniciar o rwd para ter efeito.

Monitorar o log:

# tail -f /root/scripts/rwd/rwd.log

Iniciar o rwd:

# service rwd start

Parar o rwd:

# service rwd stop

Reiniciar o rwd:

# service rwd restart

Desinstalação

Execute:

# service rwd stop;
# chkconfig --del rwd
# rm -f /etc/init.d/rwd
# systemctl daemon-reload 2> /dev/null
# rm -Rf /root/scripts/rwd/


Alguns detalhes sobre a programação

O rwd foi o meu primeiro e único programa escrito em Python. Tenho mais vivência em shell script pela minha natureza de sysadmin. Como não sou um programador profissional, espero que o rwd seja útil. Fiz esforço para que o código fosse 100% em Python, porém, houve dois pontos na época que o código em Python obteve performance inferior aos comandos em shell invocado por dentro do Python.

Assim, abandonei o smtplib para realizar o envio das notificações via e-mail, adotando o comando mail, e um dos métodos para verificar o Apache acabei ficando com o comando curl.

Projeto hospedado sobre a licença MIT em: https://github.com/hellnux/rwd

   

Páginas do artigo
   1. Introdução
Outros artigos deste autor

Gnome Shell e Extensions no Ubuntu 11.10

chkconfig - Adicionando o seu shell script

Shell Script como serviço no Windows

Adium, IM open source

Blacklist - O que é? Como consultar o IP? Como automatizar?

Leitura recomendada

Arduino com Bluetooth e pySerial

Alimentando Desktopcouch com Zeitgeist

Python - Threads

Robótica com Android e Arduino

Introdução a Threads e como implementá-las em Python

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário