Redundância de links com shell script
Me deparei com um problema em um cliente, que tinha um ambiente longe do ideal: uma placa Cyclades PC300 no servidor linux, que o ligava a um link de 1mbps com a Embratel. O problema, era que as quedas desse link eram mais freqüentes do que o cliente gostaria que fosse, e esse queria fazer uma redundância através de uma conexão wireless. Balanceamento não era necessário, e o cliente queria apenas que o link wireless assumisse no caso da conexão com a embratel cair.
Meu script ficou no cron, rodando a todo minuto, e tentando pingar o google por 20 vezes consecutivas. Caso não obtivesse nenhuma resposta dos 20 pacotes enviados, trocava a rota default para o IP do rádio wireless, e enviava um e-mail para o CPD avisando da queda. Um outro script ficava rodando a cada 15 minutos, e no caso do link da embratel voltar, ele retornava a rota default para o valor original.
Abaixo está o script:
PING=www.google.com
DATA=`date ‘+%A, %d de %B de %Y as %R’`ping ${PING} -c 20 #>&/dev/null
if [ $? -ne 1 ]
then
echo ‘O Google esta pingando, estamos com acesso a internet…’if ls /tmp/embratel.lock>&/dev/null;
then
if ls /tmp/wireless.lock>&/dev/null;
then
echo ‘ERRO! Dois arquivos de lock encontrados!’ >&/tmp/erro.log
mandamail -f thiago@vinhas.org -t thiago@vinhas.org -s ‘Atencao! Problema com os lock files!’ -m /tmp/erro.log >&/dev/null
rm -f /tmp/erro.log ; exit;
fi
echo ‘Estamos usando o link da Embratel. Tudo certo.’; exit;
else
if ls /tmp/wireless.lock>&/dev/null;
then
if ls /tmp/embratel.lock>&/dev/null;
then
echo ‘ERRO! Dois arquivos de lock encontrados!’ >&/tmp/erro.log
mandamail -f thiago@vinhas.org -t thiago@vinhas.org -s ‘Atencao! Problema com os lock files!’ -m /tmp/erro.log >&/dev/null
rm -f /tmp/erro.log ; exit;
fi### echo ‘Estamos usando o link Wireless. Verifique se a Embratel voltou.’;
else
echo ‘Esta faltando o lockfile da Embratel ou do Wireless!’ >&/tmp/erro.log
mandamail -f thiago@vinhas.org -t thiago@vinhas.org -s ‘Atencao! Problema com os lock files!’ -m /tmp/erro.log >&/dev/null
rm -f /tmp/erro.log ; exit;
fi
fielse
echo ‘O Google nao esta pingando! Hora de fazer a magica…’if ls /tmp/embratel.lock>&/dev/null;
then
echo ‘Mudando o gateway default para a Wireless’
route del default gw 10.0.0.1
route add default gw 192.168.0.3
rm -f /tmp/embratel.lock
touch /tmp/wireless.lock
echo Link da Embratel parou em $DATA >&/tmp/erro.log
mandamail -f thiago@vinhas.org -t thiago@vinhas.org -s ‘Atencao! Link da Embratel caiu!’ -m /tmp/erro.log >&/dev/nullrm -f /tmp/erro.log ; exit;
fiif ls /tmp/wireless.lock>&/dev/null;
then
echo ‘Mudando o gateway default para a Embratel’
route del default gw 192.168.0.3
route add default gw 10.0.0.1
rm -f /tmp/wireless.lock
touch /tmp/embratel.lock
echo Link Wireless parou em $DATA >&/tmp/erro.log
mandamail -f thiago@vinhas.org -t thiago@vinhas.org -s ‘Atencao! Link Wireless caiu!’ -m /tmp/erro.log >&/dev/nullrm -f /tmp/erro.log ; exit;
fifi