0

[SysAdmin] Descomplicando o Bonding no Gnu/Linux

27 Flares 27 Flares ×

O Linux nos permite agregar varias interfaces de redes em uma única interface lógica. Usando o modulo de kernel bonding. O Channel bonding permite que duas ou mais interfaces de rede atuem como uma, aumentando simultâneamente a velocidade e disponibilidade, proporcionando redundância dos links.

Ha dois tipos de configuração mais usando, sendo um a soma dos links ou modo backup, chamando-se de balance-rr e active-backup respectivamente.

Abaixo, segue uma breve descrição dos tipos de configurações bonding:

  • Modo 0 (balance-rr). Transmite os pacotes em ordem sequencial do primeiro slave ao último. Provê tolerância a falhas e balanceamento. É o modo default, e também o único modo que permite com que o tráfego, seja distribuído entre as interfaces slave simultâneamente (ex.: duas placas 10/1000 serão uma única interface 2x(10/1000), ou seja, 2 Gbit max).
  • Modo 1 (active-backup). Apenas um slave estará ativo, as demais placas de rede apenas serão ativadas (uma de cada vez) no caso de falha do slave ativo. Provê tolerância a falhas e alta disponibilidade.
  • Modo 2 (balance-xor). Transmite os pacotes adotando uma política baseado em hashs, provê praticamente as mesmas funcionalidades do modo 0. É possível configurar políticas alternativas, modificando o parâmetro xmit_hash_policy ao carregar o módulo. A política padrão é baseada em MACs (origem/destino XOR’d).
  • Modo 3 (broadcast). Transmite todos os pacotes em todos os slaves. Provê tolerância a falhas e alta disponibilidade.
  • Modo 4 (padrão 802.3ad). Agregação dinâmica de links. É necessário um switch que suporte 802.3ad e que o ethtool consiga configurar os parâmetros speed e duplex em todos os slaves. É necessário também alguma configuração extra no switch.
  • Modo 5 (balance-tlb). O load-balance adaptável. Não requer nenhum suporte especial do switch, o tráfego de saída é distribuído de acordo com a carga em cada slave. O tráfego de entrada utiliza um único slave, se ele falhar outro assume e clona o MAC do slave que estava ativo.
  • Modo 6 (balance-alb). O Adaptative Load Balancing provê o Transmit Load Balancing e o Receive Load Balancing para o IPv4 por intermédio de ARP negociate. Não requer mudanças no switch mas se faz necessário a troca do endereço MAC enquanto este estiver aberto. De forma bem generalizada é modo 5 turbinado (tlb+rlb).

Check se o modulo de kernel bonding esta instalado

Em Rhel o modulo não é carregado por defatul. Para carregar execute o comando abaixo.

# modprobe --first-time bonding

Perceba que nenhuma saída é visível, isto indica que o modulo não estava carregado e apartir daqui foi carregado. Vale lembrar que desta forma o modulo foi carregado em não persistente e se perderá após reinicio do sistema.

Configurando o bonding

Já fiz esta configuração em vários sabores Linux, e temos um ponto de atenção para que tudo funcione perfeitamente bem. Os modos active-backup, balance-tlb e balance-alb não requerem nenhuma configuração específica do lado do switch. O modo balance-rr, que estamos usando por exemplo, requer que o switch tenha as portas configuradas para “etherchannel” ou “trunking”.

Temos que nos atentamos também​ para os arquivos de configurações que podem ser diferentes para cada distribuição. Para este artigo estou me baseando em Rhel/CentOS 6.x.

Primeiramente, vamos configurar para que o modulo seja carregado automaticamente (persistente). Vamos criar um arquivo chamado bonding.conf em /etc/modprobe.d/bonding.conf. Edite o arquivo bonding.conf desta forma:

alias bond0 bonding
options bond0 miimon=100 mode=0 downdelay=200 updelay=200

Onde:

  • bond0, é como vai se chamar a interface de rede virtual.
  • miimon=, especifica em milisegundos a frequência com que ocorre a monitoração dos links. Muito útil para HA, porque o MII verificar se o NIC esta ativo. O valor 100 é recomendado na documentação do kernel. Se o valor for 0, não haverá monitoramento do link.
  • mode=0, indicar o tipo de configuração do bonding, neste caso balance round robin.
  • downdelay especifica o tempo para derrubar uma interface em caso de falha. Esse valor deve ser múltiplo do parâmetro miimon.
  • updelay especifica o tempo para levantar a interface slave. O valor também deve ser múltiplo de miimon e preferencialmente idêntico ao valor de downdelay, mas nunca menor.

Criando uma interface bonding

Para criar uma interface bonding, iremos criar um arquivo chamado ifcfg-bond0 em /etc/sysconfig/network-scripts/. Editaremos o arquivo ifcfg-bond0 da forma que fique parecido com o exemplo:

DEVICE=bond0
IPADDR=10.10.0.100
NETMASK=255.255.254.0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no

Configure as interface de redes da forma que fique parecido com o exemplo. No final reinicie o sistema.

/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes

/etc/sysconfig/network-scripts/ifcfg-eth1.

DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes

Check as interfaces de rede

Perceba que as interfaces eth0 e eth1, estão setadas como (master bond0 state UP) e a interface virtual bond0 está como MASTER,UP.

# ip addr
[...]
2: eth0: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
    link/ether 52:54:00:19:28:fe brd ff:ff:ff:ff:ff:ff
3: eth1: <BROADCAST,MULTICAST,SLAVE,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
    link/ether 52:54:00:f6:63:9a brd ff:ff:ff:ff:ff:ff
4: bond0: <BROADCAST,MULTICAST,MASTER,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP 
    link/ether 52:54:00:19:28:fe brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.100/24 brd 192.168.100.255 scope global bond0
    inet6 fe80::5054:ff:fe19:28fe/64 scope link 
       valid_lft forever preferred_lft forever

Podemos checar o status das interfaces. Como se segue:

# cat /proc/net/bonding/bond0
 Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
  
 Bonding Mode: load balancing (round-robin)
 MII Status: up
 MII Polling Interval (ms): 100
 Up Delay (ms): 0
 Down Delay (ms): 0
 
 Slave Interface: eth0
 MII Status: up
 Speed: 1000 Mbps
 Duplex: full
 Link Failure Count: 0
 Permanent HW addr: 00:50:56:93:01:e7
 Slave queue ID: 0
 
 Slave Interface: eth1
 MII Status: up
 Speed: 1000 Mbps
 Duplex: full
 Link Failure Count: 0
 Permanent HW addr: 00:50:56:93:01:e8
 Slave queue ID: 0

Basicamente é isso pessoal, até a próxima !!!

:wp!

RECOMENDADO PARA VOCÊ

Jonatas Lopes

Sempre aprendendo coisas novas e passando o conhecimento adiante !!!

Dúvidas? Deixe seu comentário ou entre em contato.