Você está na página 1de 5

Balanceamento de links - Load balance +

Failover + Failback

gieri

Após diversos artigos/tutorias seguidos passo a passo e sem resultado, me vi na situação


desesperada de não conseguir fazer funcionar o balanceamento de links de internet (load
balance), migração de links em caso de queda (failover) e restauração do link que voltou
a funcionar (failback).

[ Hits: 22.421 ]

Por: Carpegieri Torezani em 03/08/2015

Denuncie Favoritos Indicar Impressora

Introdução

Após diversos artigos/tutorias seguidos passo a passo e sem resultado, me vi na situação


desesperada de não conseguir fazer funcionar:

 Balanceamento de links de internet (load balance).

 Migração de links em caso de queda de um link (failover).

 Restauração do link que voltou a funcionar (failback).

Como minha necessidade era urgente adquiri o Roteador TP-Link TL-R470T, que me
permitiu usufruir de todas essas funcionalidades, posso dizer que só tenho elogios ao
mesmo. No entanto sempre tive o desejo de fazer funcionar com minhas próprias mãos
e utilizando o GNU/Linux. Após muito tempo com inúmeras tentativas conseguir fazer
funcionar todas essas funções, neste artigo mostrarei como fazê-las.

Este artigo será dividido em partes, de modo que, seguido todos os passos ou até apenas
um, o leitor terá a capacidade de implementá-los. Todos os dados/comandos utilizados
neste artigo foram obtidos da internet durante os últimos anos, desta forma existem
dezenas de partes adquiridas de fontes diversas e algumas funções desenvolvidas por
mim.

Primeiramente trabalharemos com o balanceamento de carga, permitindo que uma rede


utilize dois links ou mais ao mesmo tempo. A maioria dos artigos não deixa claro os
requisitos e as configurações para o correto funcionamento do balanceamento de carga.
Mostraremos aqui todos os detalhes de modo que qualquer pessoa que seguir esse artigo
possa implementar todos as funções de forma eficaz.

Requisitos:

 iproute2

 iptables

Configurações:

Criar as tabelas no arquivo rt_tables localizado em /etc/iproute2/rt_tables. Adicionando


duas novas tabelas, como exemplo criaremos as duas tabelas abaixo, sabendo que as
tabelas deve conter um número de identificação e o nome:

200 nome_tabela_1
201 nome_tabela_2

Observação: não defina nenhum gateway na configuração das placas de rede, pois o
balanceamento não será reconhecido e o sistema utilizará apenas o gateway default.

Utilizaremos como base uma pasta criada na raiz do sistema com o nome internet, onde
ficaram os arquivos para balanceamento de link e migração de link, ficando assim:

 /internet/

Balanceamento de links de internet (load


balance)
Para o script de balanceamento de carga, crie um novo arquivo com o nome
"balanceamento.sh" na pasta padrão, sendo o arquivo acessado pelo seguinte endereço:

 /internet/balanceamento.sh
Conteúdo do arquivo "balanceamento.sh":

# Dados da interfaces de rede conectadas com a internet - Link 1


placa_rede_1=eth0
tabela_1=nome_tabela_1
gateway_1=192.168.0.1
peso_balanceamento_link_1=30

# Dados da interfaces de rede conectadas com a internet - Link 2


placa_rede_2=eth1
tabela_2=nome_tabela_2
gateway_2=192.168.1.1
peso_balanceamento_link_2=70

# Dados da Rede Interna


placa_rede_interna=eth2
rede_interna=10.0.0.0/24

### Fim das Variáveis

#Carregar módulos
modprobe iptable_nat
modprobe ip_nat_ftp
modprobe ipt_MARK
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 1 > /proc/sys/net/ipv4/ip_dynaddr

# O uso do rp_filter faz o firewall sempre responder aos pacotes na mesma interface da
qual eles foram originados, prevenindo previne ataques diversos tentem tirar proveito da
regra que permite conexões na interface de loopback.
# No entanto faz com que o balanceamento seja menor, obrigando os pacotes irem
sempre pelas mesmas interfaces
# Zero (0) para desativado e (1) para ativado
echo "1" > /proc/sys/net/ipv4/conf/default/rp_filter
echo "1" > /proc/sys/net/ipv4/conf/all/rp_filter

# Deletar a rota default


ip route del default

# Limpa as regras das tabelas


ip route flush table $tabela_1
ip route flush table $tabela_2

# Define a rota para as tabelas


ip route add default dev $placa_rede_1 via $gateway_1 table $tabela_1
ip route add default dev $placa_rede_2 via $gateway_2 table $tabela_2

# Define as regras para balanceamento dos links


ip route add default scope global nexthop via $gateway_1 dev $placa_rede_1 weight
$peso_balanceamento_link_1 nexthop via $gateway_2 dev $placa_rede_2 weight
$peso_balanceamento_link_2

# Aplicar as regras
ip route flush cache

# Compartilha a conexão
iptables -t nat -A POSTROUTING -o $placa_rede_1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $placa_rede_2 -j MASQUERADE

Migração e restauração de links em caso


de quedas (failover + failback)
Nos dias atuais a redundância de links de internet é fundamental na estabilidade das
empresas, onde poucos minutos sem conexão geram prejuízos gigantescos. A cada dia
pequenas, médias e grandes empresas investem em tecnologias e redundância, com os
links de acesso à internet não é diferente. Uma das dificuldades é como manter tudo
funcionando e de forma redundante.

Para o script de migração e restauração de links em caso de quedas, crie um novo


arquivo com o nome "failover.sh" na pasta padrão, sendo o arquivo acessado pelo
seguinte endereço:

 /internet/failover.sh.

#!/bin/bash

# Adicionar no rc.local nohup > /dev/null /internet/failover &

# Tempo esperado para testar a conexão novamente


tempo_espera=30

# Número de pacotes a ser pingados


numero_pacotes=2

# Nome das interfaces de rede conectadas com a internet


placa_rede_1=eth0
placa_rede_2=eth1

# Gateway das interfaces


gateway_1=192.168.0.1
gateway_2=192.168.1.1

# Endereço IP a ser pingado (8.8.8.8 é o DNS do Google)


endereco_ping=8.8.8.8
# Arquivo de balanceamento de links
arquivo=/internet/balanceamento.sh

# Não alterar nada daqui para baixo


# Variáveis destinadas ao controle
i=0
link1=1
link2=1

# Ativação do Balanceamento de Links


sh $arquivo > /dev/null

while [ $i -le 10 ];
do

if [ $link1 = 0 ] || [ $link2 = 0 ]; then


sh $arquivo > /dev/null
fi

if (ping -I $placa_rede_1 -c $numero_pacotes $endereco_ping > /dev/null)


then
link1="1"
else
ip route del default
ip route add default via $gateway_2
ip route flush cache
link1="0"
fi

if (ping -I $placa_rede_2 -c $numero_pacotes $endereco_ping > /dev/null)


then
link2="1"
else
ip route del default
ip route add default via $gateway_1
ip route flush cache
link2="0"
fi

sleep $tempo_espera

done

Você também pode gostar