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
Modo | Política | Funcionamento | Tolerância a erros | Balanceamento de carga |
0 | Balance-rr | 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); | No | Yes |
1 | Active-Backup | Apenas um slave fica ativo, os outros ficam em modo standby e só é ativo caso falhe o outro slave; | Yes | No |
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). | Yes | Yes |
3 | Broadcast | Transmite todos os pacotes em todos os slaves; | Yes | No |
4 | Dynamic Link Aggregation | 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; | Yes | Yes |
5 | Transmit Load Balancing (TLB) | 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; | Yes | Yes |
6 | Adaptive Load Balancing (ALB) | O Adaptative Load Balancing provê o Transmit Load Balancing e o Receive Load Balancing 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. | Yes | Yes |
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