Como configurar o Bonding para balanceamento e alta disponibilidade no Linux

Bonding

servidores-linux-bond

O Bonding vem se tornando popular entre os usuários Linux, em especial, porque ele é módulo do Kernel Linux e permite usar várias interfaces de rede em uma única interface lógica. Não é tão complicado de fazer, anda bem documentado, mas é bem complicado encontrar tutoriais claros que orientem como configurar o Bonding para balanceamento e alta disponibilidade.

Bonding: Modos e configuração no Linux

Para configurar várias interfaces de rede em um servidor para haver balanceamento de carga e alta disponibilidade. Usaremos o pacote ifenslave no Debian, execute os comandos abaixo como ROOT:

Terminal
apt-get install ifenslave

Depois da instalação é hora de decidir qual modelo de bond aplicar nas interfaces. Uns são fáceis de aplicar, já outras, necessitam de configurações especiais sobre os router e switch.

  • Mode=0 (balanceamento round-robin) – Neste modo é feito um balanceamento round-robin entre as interfaces slaves. Por exemplo. Se tivermos 2 interfaces slaves ao recebermos 2 pacotes o primeiro irá pela interface1 disponível e o segundo irá pela inteface2. Um terceiro pacote irá novamente pela interface1 e assim por diante. Este modo provê balanceamento de carga e tolerância a falhas.
  • Mode=1 (ativo-backup) – Neste modo as interfaces participantes do bond funcionarão no modo ativo/backup, ou seja, somente 1 interface física será usada. A outra será somente usada caso a primeira falhe. Este modo provê somente tolerância a falha.
  • Mode=2 (balanceamento XOR) – Neste modo o MAC de destino do pacote será associado a uma interface slave participante. Assim uma mesma conexão será usada pela mesma interface.
  • Mode=3 (broadcast) – Este modo é similar ao modo=0 porém o balanceamento é feito de forma aleatória. Provê somente tolerância a falha.5).
  • Mode=4 (802.3ad) – Este modo também é conhecido como DLA (Dynamic Link Aggregation). Ele agrupa interfaces com mesmas características de velocidade e configuração duplex. Neste modo é necessário um switch que suporte o padrão IEEE 802.3ad.
  • Mode=5 (balanceamento-tlb) – Também conhecido como Balanceamento de Carga com transmissão adaptativa (Adaptative transmit load balance). O tráfego de saída é balanceado de acordo com a carga e fila (queue) em cada interface slave.
  • Mode=6 (balanceamento-alb) – Conhecido como Balanceamento de carga adaptativa (Adaptative load balance). Inclui rlb+tlb (receive load balance + transmitt load balance). Neste modo o bond intercepta do pacote ARP respondido pelo servidor alterando o MAC de origem para o MAC da interface slave elegida.
Em meu caso, usei em um servidor de arquivos, logo minha opção foi a bond-mode 0

Usei duas interfaces de rede (eth0 e eth1). Para configurar o bond edite o arquivo interfaces:

Terminal
vim /etc/networking/interfaces

Minha configuração ficou da seguinte forma:

# This file describes the network interfaces available on your system 
# and how to activate them. For more information, see interfaces(5). source /etc/network/interfaces.d/* 
# The loopback network interface auto lo 
#iface lo inet loopback auto bond0 iface bond0 inet static address 10.1.1.58 netmask 255.255.255.0 gateway 10.1.1.1 bond-mode 0 bond-slaves eth0 eth1 bond-miimon 100 bond-downdelay 400 bond-updelay 800

Considerações

  • bond-mode – vou usar o bond para balanceamento de carga e backup;
  • bond-slaves – São minhas interfaces que trabalharam no bond, se eu tivesse mais interfaces iria incluir junto a eth0 e eth1 separando-as apenas por espaço;
  • bond-miimon – Diz ao kernel que o link será inspecionado a cada 100 milissegundos (no meu caso);
  • bond-downdelay – É o tempo que o sistema irá aguardar antes de concluir que uma interface ativa caiu, assim, fazendo a outra assumir sozinha (no meu caso 400 milissegundos);
  • bond-updelay – ao contrário do downdelay.

Essas são as minhas configurações, mas podem ser alteradas ou acrescentadas novas opções conforme sua necessidade. Então, feitas as configurações, basta reiniciar o servidor ou reiniciar o serviço de rede.

Testando a configuração Bond no Linux

Execute o comando abaixo como ROOT e aguarde as saídas no terminal:

Terminal
ifconfig

Exemplo da saída do Terminal no Linux:

Saída do Terminal
bond0 Link encap:Ethernet HWaddr 00:1f:d0:e2:06:93 inet addr:10.1.1.58 Bcast:10.1.1.255 Mask:255.255.255.0 inet6 addr: fe80::21f:d0ff:fee2:693/64 Scope:Link UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1 RX packets:2393283 errors:0 dropped:0 overruns:0 frame:0 TX packets:32679 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:569079706 (542.7 MiB) TX bytes:2918345 (2.7 MiB) eth0 Link encap:Ethernet HWaddr 00:1f:d0:e2:06:93 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:1196664 errors:0 dropped:0 overruns:0 frame:0 TX packets:16344 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:284857293 (271.6 MiB) TX bytes:1438910 (1.3 MiB) eth1 Link encap:Ethernet HWaddr 00:1f:d0:e2:06:93 UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1 RX packets:1196619 errors:0 dropped:0 overruns:0 frame:0 TX packets:16335 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:284222413 (271.0 MiB) TX bytes:1479435 (1.4 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:65536 Metric:1 RX packets:1 errors:0 dropped:0 overruns:0 frame:0 TX packets:1 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:84 (84.0 B) TX bytes:84 (84.0 B)

É mostrado acima que o bond0 está ativo (MASTER) com determinado IP, logo abaixo, mostra as interfaces eth0 e eth1 como SLAVE. Você pode consultar o arquivo bond0 para ver as especificações da sua configuração executando os comandos abaixo:

Terminal
cat /proc/net/bonding/bond0

Terá como saída algo como:

Saída do Terminal
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2022) Bonding Mode: load balancing (round-robin) MII Status: up MII Polling Interval (ms): 100 Up Delay (ms): 800 Down Delay (ms): 400 Slave Interface: eth0 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 00:1f:d0:e2:06:93 Slave queue ID: 0 Slave Interface: eth1 MII Status: up Speed: 1000 Mbps Duplex: full Link Failure Count: 0 Permanent HW addr: 5c:d9:98:4c:0e:25 Slave queue ID: 0

Um campo interessando nesse arquivo é o “Link Failure Count” que mostra as falhas que a interface teve.

Como testar o bond no Linux

Para testar se realmente seu bond esta funcionando, faça o seguinte:

  • Feita as configurações acima, reinicie seu servidor que subirá com as configurações do bond;
  • Instale o iptraf para monitorar as transmissões de pacote, execute o comando abaixo como ROOT:
Terminal
apt-get install iptraf

Teste do iptraf no Linux

  1. Baixe algum arquivo grande (como uma iso) usando o wget por exemplo
  2. No momento que o arquivo esta sendo baixado, inicie o iptraf para que ele possa monitorar o download da iso.
  3. Com o Iptraf ativo, vá em “IP Traffic monitor” – “All interfaces”, você verá as duas interfaces dividindo a recepção do pacote. Concluimos que o modo balanceamento funciona.
  4. Agora desconecte o cabo de rede da eth0, você verá somente a eth1 funcionando, reconecte, para as duas balancear a carga, retire da eth1, você verá apenas a eth0 funcionando, reconecte. Portanto, o backup também funciona.
Esses teste foi realizado numa máquina física, não funcionou em máquina virtual. 

Você pode acompanhar o processo de desativação de interface em um outro tty, do comando:

Terminal
tail -f /var/log/syslog

Neste artigo, você viu como configurar o Bonding para balanceamento e alta disponibilidade, esperamos que ter ajudado.

Artigo enviado por: Benedito Gonçalves