quarta-feira, 15 de julho de 2015

Configuração de Agregação de Links no Linux

Olá Pessoal.

Um recurso bastante comum na interconexão de dispositivos da infraestrutura e também de servidores em redes de computadores é a agregação de links (ethernet bonding), técnica que permite a criação de uma interface lógica através do acoplamento de dois ou mais canais físicos. O resultado é que o novo canal lógico pode ter maior velocidade através da soma das vazões das interfaces físicas (load balancing), além de aumentar a disponibilidade da conexão por causa dos canais físicos redundantes (failover).

Assim como nos artigos anteriores, estou considerando que o servidor está instalado com a distribuição Debian GNU/Linux (ou seus derivados, como o Ubuntu). A primeira etapa consiste na instalação do pacote denominado ifenslave para que, posteriormente, as configurações de rede do Linux ofereçam suporte à agregação de links. Essa terafa é simples e rápida através do APT:

apt-get install ifenslave

Agora basta editar o arquivo de configuração das interfaces de rede que fica localizado em "/etc/network/interfaces". Criaremos uma nova interface lógica denominada bond0 que estará vinculada às interfaces físicas eth0 e eth1, conforme destacado em amarelo nas configurações abaixo

###--- em /etc/network/interfaces

auto eth0
iface eth0 inet manual

auto eth1
iface eth1 inet manual

auto bond0
iface bond0 inet static
    address 192.168.0.1
    netmask 255.255.255.0
    slaves eth0 eth1
    bond_mode balance-rr
    bond_miimon 100
    bond_downdelay 200
    bond_updelay 200

Em termos de configuração, é simples assim! É interessante destacar que existem vários modos de operação na agregação de links para prover serviços como disponibilidade (failover) ou balanceamento de carga (load balancing). Na configuração do campo bond_mode (destaque em azul) é possível informar os números ou nomes (entre parênteses) dos modos de operação explicados na sequência.

  • modo 00 (balance-rr) - trata-se da opção padrão em que os pacotes são transmitidos sequencialmente de maneira alternada (round-robin) entre todas as interfaces físicas, provendo ambas as funcionalidades de load balance e failover;
  • modo 01 (active-backup) - nesse modo de operação apenas uma interface física é utilizada para transmissão de pacotes, sendo que as demais ficam em espera (stand-by) até que a interface ativa venha a cair, provendo apenas a funcionalidade de failover;
  • modo 02 (balance-xor) - os pacotes são transmitidos em todas as interfaces físicas com base nos resultados de uma operação xor (ou exclusivo) entre os endereços físicos (MAC) de origem e destino, provendo ambas as funcionalidades de load balancing e failover;
  • modo 03 (broadcast) - transmite repetidamente  uma cópia dos pacotes em todas as interfaces físicas, provendo apenas a funcionalidade de failover;
  • modo 04 (802.3ad) - utiliza o protocolo dinâmico LACP (IEEE 802.3ad) para negociar automaticamente com o dispositivo vizinho (diretamente conectado) se é possível criar uma agregação lógica das interfaces físicas;
  • modo 05 (balance-tlb) - trata-se de uma forma especial de balanceamento de carga que não depende de nenhuma configuração no switch diretamente conectado, onde o tráfego de saída é distribuído entre as interfaces físicas (com base na carga de cada uma) e o tráfego de entrada chega em uma única interface ativa;
  • modo 06 (balance-alb) - trata-se de uma forma especial de balanceamento de carga que não depende de nenhuma configuração no switch diretamente conectado, onde ambos os tráfegos de saída e entrada são distribuídos entre as interfaces físicas;

A configuração da agregação de link no switch também deve ser devidamente realizada, dependendo do modo utilizado. A agregação lógica  de links físicos em switches Cisco Catalyst é denominada Port-Channel (ou Ether-Channel) e bastante simples de ser realizada manualmente, por exemplo através dos comandos abaixo para criar uma nova interface lógica po1 (f0/1 + f0/2).

Switch(config)# interface range f0/1 - 2
Switch(config-if)# channel-group 1 mode on

Obs.: Caso o Linux tenha sido configurado com bond_mode 802.3ad (modo 4), recomendo a leitura abaixo para configuração do protocolo dinâmico LACP (IEEE 802.3ad) no switch.

http://www.cisco.com/c/en/us/td/docs/ios/12_2sb/feature/guide/sbcelacp.html#wp1053817

Façam seus testes...

Samuel.

5 comentários:

  1. Olá, interessante a dica, este bonding funcionaria num servidor com 2 placas de rede, uma conectada num modem GVT por exemplo e a outra placa de rede na NET?

    Como ele saberia se um link caiu para assumir a outra? Ele realiza testes de ping, por exemplo?

    obrigado

    ResponderExcluir
    Respostas
    1. Não, agregação de link (camada 2) e conexões multi-homed à Internet (camada 3) são duas coisas distintas. Você não pode usar o recurso de agregação de link (camada 2) com dois IPs distintos (camada 3) na mesma interface lógica. Agregação de link é um recurso de camada dois para prover redundância e balanceamento na CONEXÃO FÍSICA ENTRE DISPOSITIVOS VIZINHOS. Para tratar dois links de Internet diferentes você precisa configurar políticas de roteamento (ou features como VRRP, HSRP, GLBP, etc). O que você pode fazer é agregar links em cada uma das conexões individuais, ou seja, você continuaria a ter duas conexões layer-3, mas cada uma delas com agregações em layer-2.

      Excluir
    2. Olá Samuel, obrigado pela resposta, entendi melhor o uso do bonding agora, Abraços

      Excluir
  2. Muito bom! Vi em https://help.ubuntu.com/community/UbuntuBonding que e preciso a configuração do arquivo “/etc/modules-load/modules.conf”

    # /etc/modules: kernel modules to load at boot time.
    #
    # This file contains the names of kernel modules that should be loaded
    # at boot time, one per line. Lines beginning with "#" are ignored.

    loop
    lp
    rtc
    bonding

    Realmente se faz necessário esta configuração?

    ResponderExcluir