[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Load Balancing



Load Balancing: Dá para melhorar desempenho?

Ola pessoal, tudo bem?

Implementei um Load Balancing, que ainda está em ambiente de testes, e aparentemente está funcionando OK. O que notei é que após implementar o Load Balancing, o desempenho da internet parece ter caído.

Vou explicar melhor:
Quanto compartilho a conexão, da forma como normalmente se faz usando somente um link (com somente 1 Gateway), quando dou um "ping" de alguma estação Windows qualquer, o ping corre "lisinho". Por exemplo vejam a saída do comando abaixo:

Resposta de 200.147.67.142: bytes=32 tempo=9ms TTL=242
Resposta de 200.147.67.142: bytes=32 tempo=10ms TTL=242
Resposta de 200.147.67.142: bytes=32 tempo=8ms TTL=242
Resposta de 200.147.67.142: bytes=32 tempo=9ms TTL=242
Resposta de 200.147.67.142: bytes=32 tempo=9ms TTL=242
Resposta de 200.147.67.142: bytes=32 tempo=10ms TTL=242
Resposta de 200.147.67.142: bytes=32 tempo=9ms TTL=242
Resposta de 200.147.67.142: bytes=32 tempo=10ms TTL=242
Resposta de 200.147.67.142: bytes=32 tempo=9ms TTL=242
Resposta de 200.147.67.142: bytes=32 tempo=9ms TTL=242
Resposta de 200.147.67.142: bytes=32 tempo=9ms TTL=242


E também quando uso o comando "tracert" para verificar as rotas e por qual roteador estão saindo os pacotes, noto que os saltos entre os roteadores no caminho ocorrem bem mais rápido do que quanto o Load Balancing está ativo.


Já quando ativo o Load Balancing (ativando as tabelas de roteamento em "/etc/iproute2/rt_table" para os 2 links e ativando as regras), quando dou o mesmo comando "ping" de alguma estação Windows, noto que o retorno do comando ping parece ficar mais lento o tempo de retorno dos pacotes também ficam mais lentos. Vejam abaixo a saída do comando ping (em uma estação Windows) após ativar o Load Balancing:

Resposta de 200.221.2.45: bytes=32 tempo=9ms TTL=52
Resposta de 200.221.2.45: bytes=32 tempo=9ms TTL=52
Esgotado o tempo limite do pedido.
Resposta de 200.221.2.45: bytes=32 tempo=9ms TTL=52
Resposta de 200.221.2.45: bytes=32 tempo=9ms TTL=52
Esgotado o tempo limite do pedido.
Resposta de 200.221.2.45: bytes=32 tempo=9ms TTL=52
Resposta de 200.221.2.45: bytes=32 tempo=8ms TTL=52
Esgotado o tempo limite do pedido.
Resposta de 200.221.2.45: bytes=32 tempo=9ms TTL=52
Resposta de 200.221.2.45: bytes=32 tempo=20ms TTL=52
Resposta de 200.221.2.45: bytes=32 tempo=30ms TTL=52
Resposta de 200.221.2.45: bytes=32 tempo=9ms TTL=52
Esgotado o tempo limite do pedido.
Resposta de 200.221.2.45: bytes=32 tempo=10ms TTL=52
Resposta de 200.221.2.45: bytes=32 tempo=9ms TTL=52
Resposta de 200.221.2.45: bytes=32 tempo=9ms TTL=52
Resposta de 200.221.2.45: bytes=32 tempo=9ms TTL=52
Resposta de 200.221.2.45: bytes=32 tempo=9ms TTL=52
Resposta de 200.221.2.45: bytes=32 tempo=9ms TTL=52
Esgotado o tempo limite do pedido.

E agora, se no prompt do Windows eu digitar o comando "tracert www.uol.com.br", observo que os saltos dos pacotes entre os roteadores pelo caminho percorrido se tornam mais lendo para retornar.

Abaixo segue a configuração que estou usando para fazer o Load Balancing:

# Dados da interfaces de rede conectadas com a internet - Link 1
placa_rede_1=eth1
tabela_1=nome_tabela_1
gateway_1=192.168.100.254
#peso_balanceamento_link_1=30
peso_balanceamento_link_1=10

# Dados da interfaces de rede conectadas com a internet - Link 2
placa_rede_2=eth2
tabela_2=nome_tabela_2
gateway_2=192.168.200.254
#peso_balanceamento_link_2=70
peso_balanceamento_link_2=10

# Dados da Rede Interna
placa_rede_interna=eth0
rede_interna=192.168.50.0/24

### Fim das Variáveis

#Carregar Modulos
echo "Carregando Modulos"
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


# 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
echo "Deletando Rota Default"
ip route del default

# Limpa as regras das tabelas
echo "Limpando Regras das Tabelas"
ip route flush table $tabela_1
ip route flush table $tabela_2

# Define a rota para as tabelas
echo "Definindo as Rotas 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

## Regras
echo "Definindo as Marcas dos para o Kernel"
ip rule add fwmark 0x10 lookup $tabela_1 prio 3
ip rule add fwmark 0x20 lookup $tabela_2 prio 3


# Aplicar as regras
echo "Aplicando as Regras"
ip route flush cache


# Compartilha a conexãi
echo "Compartilhando a Conexao atravez das Interfaces de Rede"
iptables -t nat -A POSTROUTING -o $placa_rede_1 -j MASQUERADE
iptables -t nat -A POSTROUTING -o $placa_rede_2 -j MASQUERADE

echo "Definindo quais pacotes saem por qual link"
iptables -I PREROUTING -t mangle -i $placa_rede_interna -s $rede_interna -d 0/0 -p tcp -m multiport --dports 110,23,25,465,587 -j MARK --set-mark 0x10 iptables -I PREROUTING -t mangle -i $placa_rede_interna -s $rede_interna -d 0/0 -p tcp -m multiport --dports 80,443 -j MARK --set-mark 0x20


Enfim, me dúvida é se posso melhor o desempenho deste Loading Balancing ???
Ou quando usa-se um Loading Balancing, perde-se um pouco do desempenho quando se está roteando os pacotes por entre os Gateways? Ou, no caso do meu Script, se vocês observarem estou marcando determinados pacotes para saírem por um Gateway específico, ou seja, no meu exemplo que a "navegação comum" (portas 80 e 443) utilize o Gateway 2 (que é o Link 2). Em outras palavras, marcar pacotes para depois redirecioná-los para gateways específicos prejudicam o desempenho/fluxo das entradas e saídas dos pacotes?

Espero ter sido claro!

Alguém já passou por isso? Dá para melhorar?

abraço,
Jurgen


Reply to: