Ir para o conteúdo
ou

Software livre Brasil

0 integrantes

Nenhum(a)

Red Hat Magazine

redirection forbidden: http://www.redhat.com/magazine/rss20.xml -> https://www.redhat.com/magazine/rss20.xml

 Voltar a torontux
Tela cheia Sugerir um artigo

Load Balance com o Linux

30 de Abril de 2010, 0:00 , por Software Livre Brasil - 0sem comentários ainda | Ninguém está seguindo este artigo ainda.
Visualizado 1106 vezes
   Esta semana tive a necessidade de fazer um load balance entre dois links de operadoras distintas e com o linux esta tarefa é absolutamente fácil! Vou postar o script que realiza tal tarefa, contudo, como de costume, vamos a um pouco de teoria. A ferramenta que torna isso possível é o binário ip que vem dentro do pacote iproute2, que é uma coletânea de ferramentas para controles de pacotes TCP/IP, lembra do tc? Pois é, felizmente a maioria das distros linux já vem com esse pacote instalado.
   Resumindo, o que vamos fazer é criar mais duas tabelas de roteamento com dois gateways diferentes e configurar o linux para fazer uma espécie de "round-robin" de pacotes entre esses gateways, onde podemos definir peso entre essas rotas default e até implementar um failover.
   Precisaremos de pelo menos três placas de rede no servidor, onde uma seria para a rede interna e as outras duas seriam para os links.

LoadBalance

   Em primeiro lugar vamos adicionar as duas novas tabelas no arquivo /etc/iproute2/rt_tables

#
# reserved values
#
255     local
254     main
253     default
0       unspec
#
# local
#
#1      inr.ruhep
10      LINK_A  # Operadora A
20      LINK_B  # Operadora B

Agora vamos ao script comentado:

#!/bin/bash
ip route add [REDE A] dev eth0 src [IP DA PLACA A] table LINK_A
ip route add default [GATEWAY DA REDE A] table LINK_A

ip route add [REDE B] dev eth1 src [IP DA PLACA B] table LINK_B
ip route add default via [GATEWAY DA REDE B] table LINK_B

ip rule add from [IP DA PLACA A] table LINK_A
ip rule add from [IP DA PLACA B] table LINK_B

ip route add default scope global nexthop via [GATEWAY DA REDE A] dev eth0 weight 1 nexthop via [GATEWAY DA REDE B] dev eth1 weight 1





   Os comandos acima estão adicionando rotas para as novas tabelas que criamos que no caso foram duas, onde o parâmetro nexthop na ultima linha do script é fundamental para o load balance. É ele que vai fazer a alternação entre os links de internet, além disso tem o parâmetro weight que é responsável por definir o peso de cada rota, quanto maior o peso, mais pacotes vão por ela, observe que coloquei os pesos iguais.

Para facilitar a sua vida, vou repetir o script com alguns exemplos de IP`s:

 
#!/bin/bash
ip route add 200.232.30.8/29 dev eth0 src 200.232.30.9 table LINK_A
ip route add default 200.232.30.10 table LINK_A

ip route add 189.130.231.8/29 dev eth1 src 189.130.231.9 table LINK_B
ip route add default via 189.130.231.10 table LINK_B

ip rule add from 200.232.30.9 table LINK_A
ip rule add from 189.130.231.9 table LINK_B

ip route add default scope global nexthop via 200.232.30.10 dev eth0 weight 1 nexthop via 189.130.231.10 dev eth1 weight 1

Para testar direcione o ping pelas interfaces que estão no load balance:

[root@Owner scripts]# ping www.google.com.br -I eth0
PING www.l.google.com (64.233.163.104) from 200.232.30.9 eth0: 56(84) bytes of data.
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_seq=1 ttl=53 time=52.9 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_seq=2 ttl=53 time=51.1 ms

e depois: 
[root@Owner scripts]# ping www.google.com.br -I eth1
PING www.l.google.com (64.233.163.104) from 189.130.231.9 eth2: 56(84) bytes of data.
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_seq=1 ttl=52 time=73.6 ms
64 bytes from bs-in-f104.1e100.net (64.233.163.104): icmp_seq=2 ttl=54 time=49.3 ms

FailOver
   Para implementarmos o failover baixe o script feito por outro blogueiro (Let's share the code) no endereço abaixo:
http://blog.taragana.com/wp-content/upload/gwping
  1. Mude a permissão do arquivo para virar um executável (chmod 755 gwping) e coloque-o no diretório /usr/bin/
  2. Altere os seguintes parâmetros:
  • Interfaces de rede externas
    EXTIF1=eth0
    EXTIF2=eth1
  • IP`s das interfaces
    IP1=200.232.30.9
    IP2=
    189.130.231.9
  • Gateways das redes
    GW1=200.232.30.10
    GW2=
    189.130.231.10
  • Peso das rotas
    W1=1
    W2=1
  • Nome das tabelas de roteamento
    NAME1=LINK_A
    NAME2=LINK_B
  • Quantidade de vezes a testar antes de mudar as rotas
    SUCCESSREPEATCOUNT=4
    FAILUREREPEATCOUNT=2
Pronto! Basta colocar no final do script esta linha:

nohup /usr/sbin/gwping &

OBS1: Lembre-se de colocar no arquivo rc.local uma menção ao seu script para que ele seja executado todas as vezes que a máquina ligar;
OBS2: Você pode ter problemas com sites HTTPS, para solucionar basta apenas colocar uma rota estática.

Sites relacionados:

FreeBSD


Fonte: http://torontux.blogspot.com/2010/04/load-balance-com-o-linux.html

0sem comentários ainda

Enviar um comentário

Os campos são obrigatórios.

Se você é um usuário registrado, pode se identificar e ser reconhecido automaticamente.