você está aqui: Home  → Arquivo de Mensagens

Link aggregation/Bonding em linux

Colaboração: Gustavo Mendes de Carvalho

Data de Publicação: 12 de junho de 2010

Seguem algumas informações e dois scripts úteis para adição e configuração de interfaces em link agregation/bonding em linux. Eu fiz isso em Debian 3.1, mas vale para qualquer linux.

No exemplo abaixo (/etc/init.d/start_bonding) eu tenho um servidor com 4 interfaces de rede e estou criando 2 link aggregation, para uso em dois switches trabalhando com HSRP (Cisco). Eu vou criar a interface lógica bond0 com as interfaces físicas eth0 e eth1, e a interface lógica bond1 com as interfaces físicas eth2 e eth3.

Vale lembrar que se você tem 1 servidor e 1 switch operando em modo bonding, a escolha do modo é muito importante para o correto balanceamento.

No caso do servidor, o melhor modo para balanceamento é o mode=0, que envia um pacote para cada interface alternadamente. A escolha do modo vale somente para o envio dos pacotes, uma vez que quando o bonding ou aggregation está ativado, qualquer que seja o modo de configuração do bonding, o outro equipamento deve ser capaz de recebê-los sem problema. Ou seja, eu posso ter modo de envio 0 (Round-robin mode) do servidor para o switch e modo 1 (Active-backup mode) do switch para o servidor, e eles serão capazes de trocar tráfego sem problema.

  #!/bin/sh
  # arquivo /etc/init.d/start_bonding
  # obtendo os MACs
  MAC_ADDR_0=`/sbin/ifconfig -a | /bin/grep eth0 | /bin/awk  {print $5} `
  MAC_ADDR_1=`/sbin/ifconfig -a | /bin/grep eth2 | /bin/awk  {print $5} `
  
  # modos de operacao de bonding suportados
  # mode=0 ==> Round-robin policy
  # mode=1 ==> Active-backup policy
  # mode=2 ==> Balance-xor policy
  # mode=3 ==> Broadcast policy
  # mode=4 ==> 802.3ad policy
  # mode=5 ==> Balance-tlb (Adaptive transmit load balancing) policy
  # mode=6 ==> Balance-alb (Adaptive load balancing) policy
  
  # carregando o modulo em memoria para o primeiro bonding
  /sbin/modprobe bonding mode=0                  ## bond0
  
  # pulo do gato para criar o segundo bonding no mesmo servidor
  /sbin/modprobe bonding -o bonding1 mode=0      ## bond1
  
  # criando a interface bond0 e dando-lhe um MAC
  /sbin/ifconfig bond0 hw ether $MAC_ADDR_0
  /sbin/ifconfig bond0 up
  
  # criando a interface bond1 e dando-lhe um MAC
  /sbin/ifconfig bond1 hw ether $MAC_ADDR_1
  /sbin/ifconfig bond1 up
  
  # adicionando as interfaces físicas ao bond 0
  /sbin/ifenslave bond0 eth0
  /sbin/ifenslave bond0 eth1
  
  # adicionando as interfaces físicas ao bond 1
  /sbin/ifenslave bond1 eth2
  /sbin/ifenslave bond1 eth3
  
  # ativando as interfaces físicas
  /sbin/ifconfig eth0 up
  /sbin/ifconfig eth1 up
  /sbin/ifconfig eth2 up
  /sbin/ifconfig eth3 up
  
  #========eof /etc/init.d/start_bonding

É claro que este exemplo server para mostrar o que pode ser feito, mas é possível também adicionar mais interfaces físicas em um mesmo bonding. No exemplo abaixo, eu vou criar 1 bonding com 4 interfaces físicas.

  #!/bin/sh
  # arquivo /etc/init.d/start_bonding
  # obtendo os MACs
  MAC_ADDR_0=`/sbin/ifconfig -a | /bin/grep eth0 | /bin/awk  {print $5} `
  
  # carregando os modulos em memoria
  # mode=0 ==> Round-robin policy
  # mode=1 ==> Active-backup policy
  # mode=2 ==> Balance-xor policy
  # mode=3 ==> Broadcast policy
  # mode=4 ==> 802.3ad policy
  # mode=5 ==> Balance-tlb (Adaptive transmit load balancing) policy
  # mode=6 ==> Balance-alb (Adaptive load balancing) policy
  
  # carregando o modulo em meoria para o primeiro bonding
  /sbin/modprobe bonding mode=0                  ## bond0
  
  # criando a interface bond0 e dando-lhe um MAC
  /sbin/ifconfig bond0 hw ether $MAC_ADDR_0
  /sbin/ifconfig bond0 up
  
  # adicionando as interfaces físicas ao bond 0
  /sbin/ifenslave bond0 eth0
  /sbin/ifenslave bond0 eth1
  /sbin/ifenslave bond0 eth2
  /sbin/ifenslave bond0 eth3
  
  # ativando as interfaces físicas
  /sbin/ifconfig eth0 up
  /sbin/ifconfig eth1 up
  /sbin/ifconfig eth2 up
  /sbin/ifconfig eth3 up
  
  #========eof /etc/init.d/start_bonding

Já para desfazer estas interfaces, o caminho deve ser desfeito de trás para frente. Veja o script para desfazer is dois bondings com 2 interfaces físicas cada.

  #!/bin/sh
  # arquivo /etc/init.d/stop_bonding
  
  # colocando as interfaces físicas em down
  /sbin/ifconfig eth1 down
  /sbin/ifconfig eth2 down
  /sbin/ifconfig eth3 down
  /sbin/ifconfig eth4 down
  
  # desvinculando as interfaces físicas do bonding
  /sbin/ifenslave -d bond0 eth0
  /sbin/ifenslave -d bond0 eth1
  /sbin/ifenslave -d bond1 eth2
  /sbin/ifenslave -d bond1 eth3
  
  # colocando as interfaces de bonding em down
  /sbin/ifconfig bond0 down
  /sbin/ifconfig bond1 down
  
  #===========eof  /etc/init.d/stop_bonding


 

 

Veja a relação completa dos artigos de Gustavo Mendes de Carvalho

Opinião dos Leitores

Leandro
05 Jun 2013, 16:40
Boa Tarde! É possível seguir estes procedimentos utilizando diversos modens 3g?

Obrigado
Paulo Henrique Lopes
17 Dez 2012, 20:39
boa noite, cara tenho um servidor samba, 2 placas de rede gigabit, meu switch é o TP-Link TL-SG2224WEB, 24portas gigabit, gostaria de unir estas duas placas de rede a modo que quando um terminal puxar algum arquivo deste servidor, a velocidade fique maior... tem como? qual modo eu devo usar? tenho que fazer alguma config no switch? obrigado
Jair Adriano
16 Fev 2011, 19:42
No meu Debian funfou direitinho. Obrigado.
Andre Miguel
10 Jul 2010, 21:49
Muito bacana. Acredito que a agilidade nas respostas a clientes, por exemplo, deve-se ter percebido uma melhora bem expressiva. Agora, perguntinha: as placas são gigabit?
*Nome:
Email:
Me notifique sobre novos comentários nessa página
Oculte meu email
*Texto:
 
  Para publicar seu comentário, digite o código contido na imagem acima
 


Powered by Scriptsmill Comments Script