Loadbalance FAILOVER:
Em um servidor com dois links de Internet, este script atuará no gerenciamento dos links. Caso o link que estiver ativo no momento, apresente erro (ou perda de conexão com a Internet por algum motivo), o script mudará o tráfego automaticamente para outro link existente. E se os dois links apresentarem problemas, então o script tenta uma reparação, restartando a rede e setando novamente as configurações: variáveis, limpeza de tabelas (iptables), roteamento, NAT e gateways.Obs.: É extremamente importante que cada gateway esteja configurado de acordo com sua interface nas VARIÁVEIS (“iface1” de acordo com “gw1” e “iface2” de acordo com “gw2″) do script, para que o route trate corretamente as saídas.Exemplo:
iface1=eth0 (interface)
gw1=”10.26.20.1″ (gateway)
Em um servidor com dois links de Internet, este script atuará no gerenciamento dos links. Caso o link que estiver ativo no momento, apresente erro (ou perda de conexão com a Internet por algum motivo), o script mudará o tráfego automaticamente para outro link existente. E se os dois links apresentarem problemas, então o script tenta uma reparação, restartando a rede e setando novamente as configurações: variáveis, limpeza de tabelas (iptables), roteamento, NAT e gateways.Obs.: É extremamente importante que cada gateway esteja configurado de acordo com sua interface nas VARIÁVEIS (“iface1” de acordo com “gw1” e “iface2” de acordo com “gw2″) do script, para que o route trate corretamente as saídas.Exemplo:
iface1=eth0 (interface)
gw1=”10.26.20.1″ (gateway)
iface2=eth1 (interface)
gw2=”10.15.20.1” (gateway)
[ Download: loadbalanceFAILOVER.sh ] [ Enviar nova versão ]
#!/bin/bash ### CONFIGURE AS VARIÁVEIS AQUI: testeip= "8.8.8.8" iface1=eth0 iface2=eth1 gw1= "10.26.20.1" gw2= "10.15.20.1" nomeGw1= "CTBC" nomeGw2= "EMBRATEL" ### FIM DA CONFIG. rota1=0 rota2=0 nomeScript= "loadbalanceFAILOVER.sh" iniciar(){ ### LIMPEZA: iptables -t mangle -F iptables -t mangle -X iptables --flush iptables -F iptables -t nat -F iptables -X iptables -t nat -X ip route flush cache ### HABILITA ROTEAMENTO: echo "1" > /proc/sys/net/ipv4/ip_forward ### MASCARA OS PACOTES COM DESTINO A INTERNET (NAT): iptables -t nat -A POSTROUTING -o $iface1 -j MASQUERADE iptables -t nat -A POSTROUTING -o $iface2 -j MASQUERADE ### ADICIONA OS GATEWAYS NAS DEVIDAS INTERFACES: route add -net default gw $gw1 dev $iface1 route add -net default gw $gw2 dev $iface2 ### LINK 1 ATIVO clear echo "Link em atividade: $nomeGw1" echo "Interface:$iface1" echo "Gateway:$gw1" echo "Status: Ok" while [ $( ping -qc 3 $testeip -I $iface1 > /dev/null 2>&1 ; echo $? ) = 0 ] do if [ $rota1 = 0 ] then rota1=1 route del -net default gw $gw2 dev $iface2 fi done route add -net default gw $gw2 dev $iface2 ### LINK 2 ATIVO clear echo "Link em atividade: $nomeGw2" echo "Interface:$iface2" echo "Gateway:$gw2" echo "Status: Ok" while [ $( ping -qc 3 $testeip -I $iface2 > /dev/null 2>&1 ; echo $? ) = 0 ] do if [ $rota2 = 0 ] then rota2=1 route del -net default gw $gw1 dev $iface1 fi done ### Se os links estiverem 'down', tenta uma reparação restartando a rede e chamando novamente o script: if [ $( ping -qc 3 $testeip -I $iface1 > /dev/null 2>&1 ; echo $? ) != 0 ] || [ $( ping -qc 3 $testeip -I $iface2 > /dev/null 2>&1 ; echo $? ) != 0 ] then clear echo "Sem conexao!" echo "Tentando reparar..." /etc/init .d /networking stop /etc/init .d /networking start iniciar fi } parar(){ kill -9 ` ps aux | grep $nomeScript | awk '{print $2}' ` echo "Morto" exit } helpp(){ echo "Para executar o script, usa-se a seguinte sintaxe:" echo " " echo "Iniciar:" echo "sh $nomeScript start" echo "Parar:" echo "sh $nomeScript stop" echo "Rodar em modo background:" echo "sh $nomeScript start &" echo "Após rodar em background, verifique se está rodando:" echo "ps aux | grep $nomeScript" echo "Obs.: Não esquecer de configurar as VARIÁVEIS do script de acordo com sua rede." echo " " echo "Desenvolvido por: Marcelo Viana" echo " " exit } case $1 in 'start' ) iniciar ; exit ;; 'stop' ) parar ; exit ;; '--help' ) helpp ; exit ;; *) echo "Parâmetro desconhecido: '$1'" ; echo "Utilize --help para informações. Exemplo: sh $nomeScript --help" ; exit ;; esac # É o Senhor que mostra os caminhos. Agradeço por me ajudar através de tantos exemplos. # E que bom existe o vivaolinux! # www.technocristo.com |
http://www.vivaolinux.com.br/script/LoadbalanceFAILOVER