Ethernet bonding / Link aggregation / Agregação de interfaces de rede

image_pdfimage_print

Link aggregation  ou Agregação de interfaces de rede ou Ethernet bonding, regulado pela norma IEEE 802.3ad com o título link aggregation é um termo da disciplina de redes de computadores que descreve o acoplamento de dois ou mais canais Ethernet em paralelo para produzir um único canal de maior velocidade e/ou aumentar a disponibilidade e redundância desse canal.

Assim como os RAID fazem e servem aos dispositivos de armazenamento, podemos dizer que o Ethernet bonding o é e faz para interfaces de rede. Há os seguintes tipos:

  • mode=0 (Balance Round Robin)
    • É o modo padrão. Ele transmite pacotes em ordem seqüencial do primeiro escravo (interface) disponível até o último. Este modo fornece balanceamento de carga e tolerância a falhas.
  • mode=1 (Active backup)
    • Neste modo, apenas uma interface escrava do bond na ligação estará ativa. A outra interface ficará ativo somente quando o escravo anteriormente ativo falhar. O endereço MAC do vínculo é visível externamente em apenas uma porta (adaptador de rede) para evitar confundir o switch. Este modo fornece tolerância a falhas.
  • mode=2 (Balance XOR)
    • Transmitir com base em [(endereço MAC de origem XOR’d com endereço MAC de destino) contagem de módulos escravos]. Isso seleciona o mesmo escravo para cada endereço MAC de destino. Este modo fornece balanceamento de carga e tolerância a falhas.
  • mode=3 (Broadcast)
    • Transmite tudo em todas as interfaces escravas. Este modo fornece tolerância a falhas.
  • mode=4 (802.3ad)
    • IEEE 802.3ad Agregação de link dinâmico. Cria grupos de agregação que compartilham as mesmas configurações de velocidade e modo duplex. Utiliza todos os escravos no agregador ativo de acordo com a especificação 802.3ad.
    •  Pré-requisitos:
      • Suporte Ethtool nos drivers de base para recuperar a velocidade e o duplex de cada escravo.
      • Um switch que suporta a agregação de link dinâmico IEEE 802.3ad. A maioria dos switches exigirá algum tipo de configuração para ativar o modo 802.3ad.
  • mode=5 (Balance TLB)
    • Ligação de canal que não requer nenhum suporte especial para interruptores. O tráfego de saída é distribuído de acordo com a carga atual (calculada em relação à velocidade) em cada escravo. O tráfego recebido é recebido pelo escravo atual. Se o escravo receptor falhar, outro escravo assume o endereço MAC do escravo receptor recebido.
      • Requisito:
        • Suporte de Ethtool nos drivers de base para recuperar a velocidade de cada escravo.
  • mode=6 (Balance ALB)(Adaptive load balancing)
    • Inclui balance-tlb mais receber balanceamento de carga (rlb) para o tráfego IPV4 e não requer nenhum suporte de chave especial.
    • O balanceamento de carga de recebimento é alcançado pela negociação ARP. O driver de ligação intercepta as respostas ARP enviadas pelo sistema local ao sair e substitui o endereço de hardware de origem pelo endereço de hardware exclusivo de um dos escravos na ligação, de modo que diferentes pares usem diferentes endereços de hardware para o servidor.

Rapidamente iremos demonstrar como configurar um Ethernet bonding mode igual a 0 no Debian, ou seja, ambos os links sendo utilizados como se fossem um só para aumentar a velocidade.

Primeiramente, instale o ifenslave.

apt-get install ifenslave

Em seguida, ative o módulo ‘bonding’ do Kernel para poder ativar e configurar a interface bond0.

modprobe bonding

Desative todas as conexões de todas placas de rede que serão utilizadas. No nosso caso de exemplo, iremos desativar a conexão das duas placas.

#Se não funcionar, tente utilizar ifconfig eth0 down
ifdown eth0
ifdown eth1

Num caso com mais placas, repita o processo até desativar a conexão de todos.

Em seguida, desative o serviço de rede do Debian

/etc/init.d/networking stop

Em seguida, edite o arquivo de rede /etc/network/interfaces

auto bond0

iface bond0 inet static
    address 192.168.25.10
    netmask 255.255.255.0
    network 192.168.25.0
    gateway 192.168.25.1
    slaves eth0 eth1
    bond_mode balance-rr
    bond_miimon 100
    bond_downdelay 200
    bond_updelay 200
  • bond-mode : É o modo como as conexões bonding irão trabalhar.
    • Os possíveis valores de bond_mode sãos:
      • balance-rr
      • active-backup
      • balance-xor
      • broadcast
      • 802.3ad
      • balance-tlb
      • balance-alb
  • bond-miimon: É o tempo de delay para monitoramento.
  • bond-downdelay: Define o tempo em milissegundos, para aguardar antes de desabilitar um escravo após ter sido detectado um falha de link. É valida somente para uso com bond-miimon.
  • Bond-updelay: Define o tempo em milissegundos, para aguardar antes de ativar um escravo ter sido detectados como um recuperação de link.

Agora ative a conexão

ifup bond0
/etc/init.d/networking start

E pronto!

Para as próximas inicializações do sistema, é necessário criar o arquivo /etc/modprobe.d/bonding.conf com o conteúdo abaixo:

alias bond0 bonding
options bonding mode=1 arp_interval=2000 arp_ip_target=<IP_do_gateway>

Para conferir a configuração, pode ser utilizado o ifconfig. A saída deverá conter a interface bond constando como MASTER, que no nosso caso é bond0, e todas as interfaces de rede que foram utilizadas no agrupamento, devem constar como SLAVE e não devem ter IP. Somente a interface bond terá ip. O MAC Address da interface bond e de todas utilizadas no agrupamento devem ser o mesmo, visto que devem ser visto como uma só interface pela rede.

bond0     Link encap:Ethernet  HWaddr 00:31:1f:ba:6e:81
          inet addr:192.168.25.10  Bcast:192.168.25.255  Mask:255.255.255.0
          inet6 addr: fe80::230:1bff::/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:754985435 errors:0 dropped:0 overruns:0 frame:0
          TX packets:32324886 errors:0 dropped:0 overruns:5 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:182493494027 (174.4 GiB)  TX bytes:103808404228 (961.3 GiB)

eth0      Link encap:Ethernet  HWaddr 00:31:1f:ba:6e:81
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:12004063 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5654023 errors:0 dropped:0 overruns:5 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:597782690 (570.0 MiB)  TX bytes:519229722 (495.1 MiB)
          Interrupt:18 Base address:0xa000

eth1      Link encap:Ethernet  HWaddr 00:31:1f:ba:6e:81
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:11335436 errors:0 dropped:0 overruns:0 frame:0
          TX packets:5654025 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:3880119013 (3.6 GiB)  TX bytes:488810506 (466.1 MiB)

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:19324 errors:0 dropped:0 overruns:0 frame:0
          TX packets:19324 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:3100919 (3.1 MiB)  TX bytes:3100919 (3.1 MiB)

Outra forma possível de verificar o bonding é executando o comando:

cat /proc/net/bonding/bond0

Abaixo um exemplo de saída de um bonding do tipo active-backup, efetuado sobre eht1 e eth2. (note que não foi sobre eth0).

Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth1
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200

Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 09:11:7a:6a:19:ff
Slave queue ID: 0

Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 09:11:7a:6a:19:ff
Slave queue ID: 0
Gostou? Tire um minutinho e dê sua contribuição para Drall Dev Community no Patreon!