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: 3.541 ]

Por: Danillo Costa em 01/11/2018 | Blog: https://nillow.com.br/


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

Adium, IM open source

Overclock em placas de vídeo GeForce

Gerenciando Mouses da Razer

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

Shell Script como serviço no Windows

Leitura recomendada

PEP 8 - Guia de estilo para código Python

Convertendo Texto em Fala com Python e pyttsx3

Varredura de PING Utilizando o Python

Python + ADB

Como isolar seus projetos Python com virtualenv (ambiente virtual)

  
Comentários

Nenhum comentário foi encontrado.


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts