Compartilhando Carga através de múltiplas Interfaces :: Admirável Mundo Novo




Muito Bem Vindo

Prezado Leitor, a proposta desse Blog é compartilhar conhecimento com as pessoas que trabalham com Linux, Asterisk, OpenSER, e com tecnologia de voz sobre a rede IP em geral, através de tutoriais, dicas, howto, notícias entre outros assuntos.

Atente para termo de uso do conteúdo do blog no rodapé da página.

sábado, 10 de janeiro de 2009

Compartilhando Carga através de múltiplas Interfaces




Capítulo 10. Compartilhando Carga através de múltiplas Interfaces

Existem várias formas de se fazer isso. Uma das formas mais fácil e simples é o equalizador de link ‘TEGL’ – “True” (ou “trivial”). Como a maioria das coisas que precisa fazer com enfileiramento, compartilhamento de carga segue duas formas. Ambas as pontas de um link pode precisar participar para o efeito completo.

Imagine essa situação:

+-------+ eth1 +-------+
| |==========| |
'rede 1' ----| A | | B |---- 'rede 2'
| |==========| |
+-------+ eth2 +-------+


Os blocos A e B são roteadores, e nesse momento nós assumiremos que ambos rodam o Linux. Se o tráfego está indo da rede 1 para a rede 2, o roteador A precisa distribuir os pacotes sobre ambos os links na direção de B. O roteador B precisa ser configurado para aceitar isso. O mesmo acontece no sentido contrário, quando pacotes seguem da rede 2 para a rede 1, o roteador B precisa enviar os pacotes sobre ambas as interfaces eth1 e eth2.

A parte de distribuição é feita por um dispositivo ‘TEQL’, como aqui (isso não podia ser mais fácil):

# tc qdisc add dev eth1 root teql0
# tc qdisc add dev eth2 root teql0
# ip link set dev teql0 up


Não esqueça o comando ‘ip link set up’!

Isso precisa ser feito em ambos os hosts. O dispositivo teql0 é basicamente um distribuidor cíclico (roundrobbin) sobre as interfaces eth1 e eth2, para envio de pacotes. Nunca chega dado algum através do dispositivo teql, ele aparece justamente sobre as interfaces eth1 e eth2 ‘raw’.

Porém justamente agora nós possuímos os dispositivos, também precisamos de roteamento adequando. Uma forma de fazer isso é atribuir uma rede /31 em ambos os links, e uma rede /31 ao dispositivo teql0 também:


No roteador A:

# ip addr add dev eth1 10.0.0.0/31
# ip addr add dev eth2 10.0.0.2/31
# ip addr add dev teql0 10.0.0.4/31


No roteador B:

# ip addr add dev eth1 10.0.0.1/31
# ip addr add dev eth2 10.0.0.3/31
# ip addr add dev teql0 10.0.0.5/31


O roteador A deve ser capaz agora de pingar 10.0.0.1, 10.0.0.3 e 10.0.0.5 sobre os dois links reais e o dispositivo 1 equalizado. O roteador B deve ser capaz de pingar 10.0.0.0, 10.0.0.2 e 10.0.0.4 sobre os links.

Se isso funcionar, o roteador A deve torna 10.0.0.5 sua rota para alcançar a rede 2, e o roteador B deve tornar 10.0.0.4 sua rota para alcançar a rede 1. Para o caso especial onde a rede 1 é sua rede de casa, e a rede 2 é a Internet, o roteador A deve tornar 10.0.0.5 seu gateway padrão.


10.1. Advertências

Nada é tão fácil quanto parece ser. As interfaces eth1 e eth2 em ambos os roteadores A e B precisa ter a filtragem de caminho de retorno desativado, porque, do contrário, eles descartarão pacotes destinados aos endereços IP exceto os seus próprios:

# echo 0 > /proc/sys/net/ipv4/conf/eth1/rp_filter
# echo 0 > /proc/sys/net/ipv4/conf/eth2/rp_filter

Então existe o problema sujo de reordenamento de pacote. Digamos que 6 pacotes precisam ser enviados de A para B – eth1 pega 1, 3 e 5. A interface eth2 pegaria então 2, 4 e 6. Em um mundo ideal, o roteador B receberia isso na ordem, 1, 2, 3, 4, 5, 6. Mas é muito real a possibilidade de que o kernel possa fazer isso como: 2, 1, 4, 3, 6, 5. O problema é que isso confunde o TCP/IP. Desde que não haja problema para os links transportar muitas sessões TCP/IP diferentes, você não seria capaz de empacotar múltiplos links e fazer FTP muito rápido a um único arquivo, exceto quando seu OS que está recebendo ou enviando seja o Linux, que não seja facilmente afetado por alguma reordenação simples.

No entanto, para muitas aplicações, o balanceamento de carga do link é uma idéia boa.


10.2. Outras possibilidades

William Stearns tem usado uma instalação de tunelamento avançada para conseguir bom uso de múltiplas conexões Internet juntas, não relacionadas. Isso pode ser encontrado em sua página sobre tunelamento.

O HOWTO pode detalhar mais a respeito disso no futuro.


Leituras Complementares:
http://www.rnp.br/newsgen/0201/roteamento_linux.html;
http://linuxflex.blogspot.com/2008/02/controle-de-trfego.html;
http://www.numaboa.com/informatica/linux/configuracoes/703-roteamento-linux;
http://ornellas.apanela.com/dokuwiki/pub:pt-br:linuxfwrt.











Autores Originais dos textos:

Bert Hubert (Netherlabs BV)
bert.hubert@netherlabs.nl

Thomas Graf (Autor de Seção)
tgraf@suug.ch

Gregory Maxwell (Autor de Seção)
greg@linuxpower.cx

Remco van Mook (Autor de Seção)
remco@virtu.nl

Martijn van Oosterhout (Autor de Seção)
kleptog@cupid.suninternet.com

Paul B Schroeder (Autor de Seção)
paulsch@us.ibm.com

Jasper Spaans (Autor de Seção)
jasper@spaans.ds9a.nl

Pedro Larroy (Autor de Seção)
piotr@member.fsf.org








Nenhum comentário:




Creative Commons License
Admirável Mundo Novo: Tudo Sobre Asterisk, OpenSER, Linux e Tecnologias de Voz sobre IP
by Cléviton Mendes de Araújo is licensed under a Creative Commons Atribuição 2.5 Brasil License.