segunda-feira, 8 de janeiro de 2007

Alta disponibilidade de links

Neste artigo venho compartilhar a minha experiência e desespero quando precisei criar um sistema de alta disponibilidade de links em ambiente Linux numa Sexta-feira às 5:30 da tarde. Acredito que muitos já passaram por isso. Obtive sucesso com a minha solução e espero que este artigo ajude muitas pessoas contribuindo ainda mais com a comunidade.








Introdução

Nosso objetivo consiste em construir um ambiente de alta disponibilidade de link e somente de link, para o nosso cliente.

Nós não utilizaremos ferramentas como iproute2 e heartbeat neste documento, pois nosso foco será somente alta disponibilidade de link e não balanceamento de link ou replicação de dados.







Ambiente

O cliente possui 2 links, o primeiro é uma LP de 256 Kbps e o segundo é um Speedy Empresarial.

Link 1 (Principal) LP = 200.232.63.203
GW = 200.232.63.201
IFACE = ETH0

Link 2 (Secundário/Speedy)IP = 200.207.207.91
GW = 200.207.207.65
IFACE = ETH2

Basicamente a idéia é que se o primeiro link cair, o outro assume, então a partir disto fui tentar achar algo na internet, mas nada do que eu achei me ajudou, ou era complicado demais para a solução que eu queria.

Então resolvi colocar a mão na massa e escrever um shell script com regex que resolvesse o meu problema.

A minha dúvida era como eu faria se o link secundário entrasse em ação após a queda do link primário e se o link primário voltasse a responder após alguns minutos, que ele voltasse a ser o link principal como antes, além disso, colocando as regras de MASQUERADE para cada interface de rede, toda vez que uma assumia o posto.

A solução foi trabalhar com rotas, manter a interface eth2 (link secundário) up sempre e fazer um script que ficasse pingando o gateway da LP (link principal) e não o próprio ip da eth0, isto é obvio, pois ele sempre irá conseguir pingar ele mesmo.

Se o gateway da LP (200.232.63.201) parar de responder, o script automaticamente apaga a rota default da LP e adiciona o ip do gateway da Speedy como rota default e finalmente adiciona a regras de MASQUERADE para todos na interface eth2 que agora se torna a principal.

Coloquei no crontab para este script rodar de 5 em 5 minutos, se o link principal voltar a responder, o script vai conseguir pingar a vai entrar em ação, deletando as rotas correspondentes ao link secundário e também as regras de POSTROUTING que estavam ativas na eth2, colocando a eth0 "LP" como link principal novamente.
Segue abaixo o script que torna esta solução possível, coloque-o em /etc/init.d e depois torne-o executável com "chmod 775":

#!/bin/bash
#
#####################################
# bruno@cdcorp.com.br 22/10/04 #
# levanta tunnel adsl #
#####################################


PATH=/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# gateway da LP
LPGW=200.232.63.201

# speedy
SPEEDY=200.207.207.65
IPTABLES=/sbin/iptables

# Testa acesso ao gateway da LP
if ping -c 2 -i 1 -q $LPGW > /dev/null 2>&1; then
echo "PING OK"
if route -n | grep $SPEEDY > /dev/null;then
echo "ROTA SPEEDY ENCONTRADA..DELETANDO..."
route del default gw $SPEEDY > /dev/null
echo "ROTA SPEEDY DELETADA"
route add default gw $LPGW > /dev/null
echo "ROTA LP adicionada"
echo "Iniciando regras de firewall"
$IPTABLES -t nat -D POSTROUTING 1 > /dev/null
$IPTABLES -t nat -A POSTROUTING -i eth0 -j MASQUERADE > dev/null
echo "REGRAS DE FIREWALL OK"
fi

# tudo ok
echo "OK..SAINDO"
exit 0

else
echo "SENAO...."

echo "Caso a LP esteja down"

echo "verifica se existe rota da LP, se existir deleta"
if route -n | grep $LPGW > /dev/null; then
route del default gw $LPGW > /dev/null
fi
echo "adiciono a rota default da speedy"
route add default gw $SPEEDY > /dev/null
echo "rota adicionada"
$IPTABLES -t nat -D POSTROUTING 1 > /dev/null
$IPTABLES -t nat -A POSTROUTING -i eth2 -j MASQUERADE > /dev/null
echo "regras de firewall adicionadas"

fi
done

1 comentários:

Maiquel disse...

Ola bzanelato,
era exatamente o que eu preciso, porém vou usar load balance, mas o script vai me ajudar e muito.

Att,
Maiquel

Twitter Delicious Facebook Digg Stumbleupon Favorites More

 
Powered by Blogger | Printable Coupons