Link Aggregation – a solução para não usar 10GbE ainda.
Posted by gondim | Posted in Dicas, FreeBSD, Tecnologia | Posted on 12-05-2012
Tags:lacp, lagg, link aggregation
0
Não é de hoje a busca por links de grande capacidade, principalmente por Provedores de Internet. Lembro da época que interfaces de rede Gigabit eram muito caras e vivíamos com redes 10/100. O provedor que trabalho, na época tinha link de 2Mbps quando ainda existiam conexões discadas. A interface de rede que ligava o provedor ao fornecedor do link Internet era uma 3Com 10/100 que atendia muito bem. Mas o crescimento chegou rápido e fomos aumentando nosso link até que chegamos em 100Mbps. Nesse patamar a boa e velha 3Com não atendia mais as necessidades e aí mudamos para interface Intel Gigabit. Continuamos crescendo e hoje nosso link pulou para 1.2Gbps. Mas como colocar 1.2Gbps em uma interface de apenas 1Gbps? Não coloca. Nesse ponto surge a necessidade de um upgrade de equipamento para 10GbE. Bem, são equipamentos extremamente caros e por isso partimos para outra solução conhecida como: Link Aggregation e que o FreeBSD faz muito bem.
Com o Link Aggregation (lagg) você pode adicionar interfaces de rede somando as velocidades e ao mesmo tempo balanceando e servindo de failover. Para o Provedor aqui foi preciso apenas adicionar mais uma interface de rede Intel Gigabit e configurar o lagg e com isso agora temos quase 2Gbps para nos atender sem grandes investimentos.
Irei mostra aqui um exemplo de configuração que inclusive está funcionando hoje em nosso router central que é um FreeBSD 9.0 64bits stable. Este router encontra-se ligado em uma switch com suporte à lagg que interliga nossas Cidades através de um clear channel em fibra.
Primeiramente precisamos do suporte ao lagg ativado. Isso pode ser feito de 2 formas, compilando no kernel ou carregando em tempo de boot.
Para colocar direto no kernel, basta adicionar a linha abaixo no seu kernel, compilar e instalar seu novo kernel.
device lagg
Caso não queira compilar o kernel com suporte você pode optar por carrega-lo como módulo no boot. Para isso basta adicionar a linha abaixo em /boot/loader.conf:
if_lagg_load=”YES”
Para essa configuração usei o esquema de start_if.<interface> diferente do usado no rc.conf e pode ser lido aqui.
No meu router criei os arquivos /etc/start_if.em2 e /etc/start_if.em3 conforme abaixo:
start_if.em2:
/sbin/ifconfig lagg1 create
/sbin/ifconfig em2 up
A primeira linha estou criando uma interface virtual de link aggregation chamada lagg1. Estou criando a lagg1 porque já tenho uma lagg0 junto ao meu fornecedor de link Internet e no final as configurações serão as mesmas, logo irei mostrar apenas uma.
Na segunda linha apenas levanto a interface em2, deixando-a ligada e sem IP mesmo.
start_if.em3:
/sbin/ifconfig em3 up
/sbin/ifconfig lagg1 laggproto lacp laggport em2 laggport em3 186.xxx.xx.1 netmask 255.255.255.224
Na configuração da outra interface em3 nós levantamos ela sem IP algum e na segunda linha é que configuramos nosso lagg. Onde dizemos que o lagg1 vai usar o protocolo lacp (Link Aggregation Control Protocol). Vai agregar as interfaces em2, em3 e setar o IP 186.xxx.xx.1 na lagg1.
Existem outras opções de protocolo mas o lacp é o mais completo e interessante ao meu ver. Você pode consultar outros protocolos através do: man lagg
Feito isso basta agora você interligar as 2 interfaces de rede nas 2 portas da switch que foram configuradas para fazer o lagg. Simplesmente isso. Para ter certeza que tudo vai funcionar certo, re-inicie o sistema.
Como saber se o lagg está funcionando? Simples também. Faça um ifconfig no lagg1 e veremos algo assim:
lagg1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
options=209b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,WOL_MAGIC>
ether 00:1e:67:07:9d:cc
inet 10.10.10.10 netmask 0xffffffff broadcast 10.10.10.10
inet6 fe80::21e:67ff:fe07:9dcc%lagg1 prefixlen 64 scopeid 0x12
nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>
media: Ethernet autoselect
status: active
laggproto lacp
laggport: em3 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
laggport: em2 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
Nas 2 últimas linhas tem que estar como ACTIVE nas 2 interfaces, senão o lagg não estará funcionando.
Para visualizarmos o consumo de banda independente por interface (em2 e em3) ou o somatório (lagg1) podemos instalar e usar o programa nload que está no ports.
# cd /usr/ports/net/nload/
# make install clean
Com o comando “nload -u k” e usando as setas para baixo e para cima você poderá navegar nas interfaces existentes. Abaixo as telas do meu sistema em funcionamento:
Bem é isso. Assim como muitas outras coisas no FreeBSD, essa não poderia deixar de ser tão simples e fácil.
Espero que seja útil e ajude. 😉