Infraestrutura · 6 de agosto de 2018 · 6 min de leitura

BONDING: Aumente a disponibilidade e velocidade da sua rede com a combinação de interfaces

Descubra como configurar o BONDING para garantir alta disponibilidade, redundância e maior performance nos servidores, otimizando a infraestrutura de rede.

Introdução ao BONDING: Otimizando a Disponibilidade e Velocidade de Redes

Em ambientes de servidores, garantir alta disponibilidade, redundância e velocidade é essencial para manter a operação contínua e eficiente. O BONDING, uma técnica que combina duas ou mais interfaces de rede para trabalharem como uma única, surge como uma solução poderosa para esses desafios. Ao implementar o BONDING, os administradores de rede podem distribuir o tráfego de dados de forma equilibrada, aumentar a capacidade de transmissão e garantir que, mesmo em caso de falha de uma interface, o sistema continue funcionando sem interrupções. Neste laboratório, exploraremos como configurar e utilizar o BONDING para otimizar sua infraestrutura de rede.

Tabela 1 – Tabela modo de operações Bonding

<table width="758"><tbody><tr><td width="56"><strong>Modo</strong></td><td width="86"><strong>Política</strong></td><td width="359"><strong>Funcionamento</strong></td><td width="85"><strong>Tolerância a erros</strong></td><td width="113"><strong>Balanceamento de carga</strong></td></tr><tr><td width="56">0</td><td width="86">Balance-rr</td><td width="359">Transmite os pacotes de forma sequencial do primeiro ao último slave. Este é o único modo que permite que o tráfego seja distribuído simultaneamente entre as interfaces. (ex. duas placas 10/1000 serão uma única 2x(10/1000), ou seja, 2Gbit max);</td><td width="85"><strong>No</strong></td><td width="113"><span><strong>Yes</strong></span></td></tr><tr><td width="56">1</td><td width="86">Active-Backup</td><td width="359">Apenas um slave fica ativo, os outros ficam em modo standby e só é ativo caso falhe o outro slave;</td><td width="85"><span><strong>Yes</strong></span></td><td width="113"><strong>No</strong></td></tr><tr><td width="56">2</td><td width="86">Balance-xor</td><td width="359">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).</td><td width="85"><span><strong>Yes</strong></span></td><td width="113"><span><strong>Yes</strong></span></td></tr><tr><td width="56">3</td><td width="86">Broadcast</td><td width="359">Transmite todos os pacotes em todos os slaves;</td><td width="85"><span><strong>Yes</strong></span></td><td width="113"><strong>No</strong></td></tr><tr><td width="56">4</td><td width="86">Dynamic Link Aggregation</td><td width="359">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;</td><td width="85"><span><strong>Yes</strong></span></td><td width="113"><span><strong>Yes</strong></span></td></tr><tr><td width="56">5</td><td width="86">Transmit Load Balancing (TLB)</td><td width="359">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;</td><td width="85"><span><strong>Yes</strong></span></td><td width="113"><span><strong>Yes</strong></span></td></tr><tr><td width="56">6</td><td width="86">Adaptive Load Balancing (ALB)</td><td width="359">O <em>Adaptative Load Balancing</em> provê o <em>Transmit Load Balancing</em> e o <em>Receive Load Balancing</em> para o IPv4 por intermédio de negociação ARP. Não requer mudanças no switch, mas se faz necessário a troca do endereço MAC enquanto este estiver aberto.</td><td width="85"><span><strong>Yes</strong></span></td><td width="113"><span><strong>Yes</strong></span></td></tr></tbody></table>

Pré-Requisitos

Neste Lab iremos configurar o netwok bonding no RHEL 7. Sendo necessário:

  • Duas placas de rede;
  • Carregar o modulo bonding no Linux, por meio do comando: modprobe bonding.

Configurando o modo Adaptive Load Balancing (ALB)

Para certificarmos das informações do módulo bonding, use o seguinte comando:

[root@lab01 ~]# modinfo bonding

Criação do arquivo de interface Bond **

**

Será criado o arquivo de configuração (ifcfg-bond0) dentro da pasta “/etc/sysconfig/network-scripts/”

[root@lab01 network-scripts]# vim ifcfg-bond0
DEVICE=bond0
TYPE=Bond
NAME=bond0
BONDING_MASTER=yes
BOOTPROTO=none
ONBOOT=yes
IPADDR=192.168.249.77
PREFIX=24
GATEWAY=192.168.249.1
DNS1=192.168.249.1
DNS2=8.8.8.8
DNS3=192.168.249.151
BONDING_OPTS="mode=6 miimon=100"

Considerações:

BONDING_MASTER=yes > Determina a interface como Master
BONDING_OPTS=”mode=6 miimon=100″ > Descreve o modo a ser utilizado e diz ao kernel que o link será inspecionado a cada 100 milissegundos.

Ajustar as interfaces de rede a serem utilizadas no bonding **

**

[root@lab01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-enp2s0
TYPE=Ethernet
BOOTPROTO=none
DEVICE=enp2s0
ONBOOT=yes
HWADDR="00:e0:4c:44:04:00"
MASTER=bond0
SLAVE=yes
[root@lab01 ~]# vim /etc/sysconfig/network-scripts/ifcfg-enp3s0
TYPE=Ethernet
BOOTPROTO=none
DEVICE=enp3s0
ONBOOT=yes
HWADDR="88:d7:f6:65:86:50"
MASTER=bond0
SLAVE=yes

Considerações:

Como podemos verificar nas configurações acima, foram adicionadas as linhas:

MASTER=bond0 > Indica qual a interface Master
SLAVE=yes > determina esta interface como Slave

Nota-se que é necessário o endereço MAC, pois será utilizado pelo modo escolhido (Adaptive Load Balancing) Ajustar as interfaces de rede a serem utilizadas no bonding

**

** Reiniciar o serviço Network

[root@lab01 ~]# systemctl restart network

Testes e verificação da interface bond **

**

[root@lab01 ~]# ifconfig
bond0: flags=5187<UP,BROADCAST,RUNNING,MASTER,MULTICAST>  mtu 1500
        inet 192.168.249.77  netmask 255.255.255.0  broadcast 192.168.249.255
        inet6 fe80::2e0:4cff:fe44:400  prefixlen 64  scopeid 0x20<link>
        ether 00:e0:4c:44:04:00  txqueuelen 0  (Ethernet)
        RX packets 914260  bytes 139186447 (132.7 MiB)
        RX errors 0  dropped 269464  overruns 0  frame 0
        TX packets 678716  bytes 55386742 (52.8 MiB)
        TX errors 0  dropped 4 overruns 0  carrier 0  collisions 0
 
enp2s0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 00:e0:4c:44:04:00  txqueuelen 1000  (Ethernet)
        RX packets 543073  bytes 69170037 (65.9 MiB)
        RX errors 0  dropped 489  overruns 0  frame 0
        TX packets 269731  bytes 16380796 (15.6 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
enp3s0: flags=6211<UP,BROADCAST,RUNNING,SLAVE,MULTICAST>  mtu 1500
        ether 88:d7:f6:65:86:50  txqueuelen 1000  (Ethernet)
        RX packets 398917  bytes 73687770 (70.2 MiB)
        RX errors 0  dropped 268046  overruns 0  frame 0
        TX packets 410337  bytes 39228964 (37.4 MiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
lo: flags=73<UP,LOOPBACK,RUNNING>  mtu 65536
        inet 127.0.0.1  netmask 255.0.0.0
        inet6 ::1  prefixlen 128  scopeid 0x10<host>
        loop  txqueuelen 0  (Loopback Local)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
 
virbr0: flags=4099<UP,BROADCAST,MULTICAST>  mtu 1500
        inet 192.168.122.1  netmask 255.255.255.0  broadcast 192.168.122.255
        ether 52:54:00:73:0d:55  txqueuelen 0  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
[root@lab01 ~]# cat /proc/net/bonding/bond0
[root@lab01 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
 
Bonding Mode: adaptive load balancing
Primary Slave: None
Currently Active Slave: enp2s0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
 
Slave Interface: enp2s0
MII Status: up
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:e0:4c:44:04:00
Slave queue ID: 0
 
Slave Interface: enp3s0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 88:d7:f6:65:86:50
Slave queue ID: 0
[root@lab01 ~]# ifdown enp2s0
[root@lab01 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: adaptive load balancing
Primary Slave: None
 
Currently Active Slave: enp3s0
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
 
Slave Interface: enp3s0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 88:d7:f6:65:86:50
Slave queue ID: 0
 

Referências

Oracle Technology NetworkArtigosGrid Computing:https://www.oracle.com/technetwork/pt/articles/grid/grid-infrastructure-12cr1-parte-2-2099500-ptb.html

Configure NIC (Network Interface Card) bonding in CentOS 7 / RHEL 7:https://www.linuxtechi.com/configure-nic-bonding-in-centos-7-rhel-7/

RHEL Networking Guide: https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/networking_guide/ch-configure_network_bonding

 

Atualizado em 16 de setembro de 2024.

Esse problema aparece no seu ambiente?

Diagnóstico gratuito de infraestrutura e banco de dados — sem compromisso.

Falar com um especialista