Buenas pessoal!

Neste post vou explicar como fazemos bonding, ou seja, como fazemos várias interfaces de rede ( eths ) trabalharem como apenas uma ou como fazer interfaces de backup.

Obs: este post está focado para sistemas operacionais baseados em RedHat 😉

Vamos ao conceito:

Bonding vem de encontro a necessidade dos ambientes computacionais de aumentar o throughput da rede e trazer maior disponibilidade dos servidores.
Existem 7 modos de trabalho no bonding:

  • Modo 0 (balanceamento) : envia os pacotes ( no modo Round-robin ), de forma sequencial, pelas interfaces de rede configurada. Este modo traz traz tolerância a falhas e balanceamento de carga entre as interfaces. Obs: cuidado ao usar este modo, pois o switch pode se perder ao receber pacotes com um mesmo MAC em diferentes portas! ( passei por um problema assim esses dias ;( )
  • Modo 1 (backup) : Apenas uma interface fica ativa no bonding por vez. Se a interface cair, o bond seleciona outra interface para trabalhar.
  • Modo 2 (balanceamento xor) : baseando-se no MAC de origem, mantém uma mesma NIC escrava recebendo os pacotes. Este modo traz tolerância a falhas e balanceamento de carga entre as interfaces.
  • Modo 3 (broadcast) [ modo v1d4l0k4 ] : manda os pacotes para todas as NICs associadas. Este modo traz traz tolerância a falhas.
  • Modo 4 (Dynamic link aggregation) : Segue o padrão 802.3ad. Mas o switch tem que suportar este padrão também!
  • Modo 5 (balanceamento tlb) : Adaptive transmit load balancing, ou seja, os pacotes e as NICs são usadas conforme sua carga. ( as NICs compartilham o MAC )
  • Modo 6 (balanceamento alb) : É a soma de Adaptive transmit load balancing e Adaptive receive load balancing.

Como configurar uma interface BOND?

Primeiramente vamos configurar os módulos para reconhecer a interface nova:

[root@oel1 /]# echo -e "alias bond0 bondingnoptions bond0 mode=1 miimon=100" >> /etc/modprobe.d/dist.conf 
[root@oel1 /]# tail -n 2 /etc/modprobe.d/dist.conf 
alias bond0 bonding;
options bond0 mode=1 miimon=100

Observe que colocamos uma linha informando que existe uma interface de bonding chamada bond0 e na outra linha configuramos o seu modo de trabalho ( mode=1 ).
O parâmetro miimon=100 significa o tempo ( em millis ) de verificação do estado do link.

Agora que nossa máquina já conhece uma interface bond, vamos configurar uma.

Crie um arquivo chamado /etc/sysconfig/network-scripts/ifcfg-bond0 e nele coloque o seguinte conteúdo:

DEVICE=bond0
BOOTPROTO=dhcp
ONBOOT=yes
MASTER=yes

Depois disso, reconfigure as interfaces de rede que você deseja deixar como escravas e deixe-as parecido com:

[root@oel1 /]# more /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE="eth0"
BOOTPROTO="none"
ONBOOT="yes"
SLAVE=yes
MASTER=bond0
[root@oel1 /]# more /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE="eth1"
BOOTPROTO="dhcp"
ONBOOT="yes"
SLAVE=yes
MASTER=bond0

Pronto 🙂

Como ficou?

[root@oel1 ~]# service network restart
Shutting down interface bond0:                             [  OK  ]
Shutting down interface eth2:                              [  OK  ]
Shutting down loopback interface:                          [  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface bond0:                               [  OK  ]
Bringing up interface eth2:                                [  OK  ]
[root@oel1 ~]# ifconfig
bond0     Link encap:Ethernet  HWaddr 08:00:27:07:D1:EE  
          inet addr:192.0.0.111  Bcast:192.0.0.255  Mask:255.255.255.0
          inet6 addr: fe80::a00:27ff:fe07:d1ee/64 Scope:Link
          UP BROADCAST RUNNING MASTER MULTICAST  MTU:1500  Metric:1
          RX packets:5190 errors:0 dropped:33 overruns:0 frame:0
          TX packets:3356 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1998399 (1.9 MiB)  TX bytes:482756 (471.4 KiB)

eth0      Link encap:Ethernet  HWaddr 08:00:27:07:D1:EE  
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:354 errors:0 dropped:21 overruns:0 frame:0
          TX packets:264 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:45845 (44.7 KiB)  TX bytes:39725 (38.7 KiB)

eth1      Link encap:Ethernet  HWaddr 08:00:27:07:D1:EE  
          UP BROADCAST RUNNING SLAVE MULTICAST  MTU:1500  Metric:1
          RX packets:4836 errors:0 dropped:12 overruns:0 frame:0
          TX packets:3098 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1952554 (1.8 MiB)  TX bytes:443939 (433.5 KiB)

Agora temos uma interface bond0 com duas escravas!