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.
- Requisito:
- 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.
- 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
- Os possíveis valores de bond_mode sãos:
- 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