Como configurar o Bonding para balanceamento e alta disponibilidade - SempreUPdate
Como configurar o Bonding para balanceamento e alta disponibilidade
Por sempreupdate Última atualização 17 jul, 2017
O Bonding vem se tornando popular entre os usuários Linux, em especial, porque ele é módulo do Kernel Linux e que permite usar várias interfaces de rede em uma única interface lógica. Não é tão complicado de fazer, e por sinal, 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
Para configurar várias interfaces de rede em um servidor para que haja balanceamento de carga e alta disponibilidade. Usaremos o pacote ifenslave no Debian 8, execute os comandos abaixo como ROOT:
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 somente será 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:
Minha configuração ficou da seguinte forma:
address 10.1.1.58
bond-updelay 800]
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
Se até agora tudo ocorreu bem o comando ifconfig deve retornar algo assim:
Execute o comando abaixo como ROOT e aguarde as saídas no terminal:
Saída do terminal devem ser parecidas com as abaixo:
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
RX packets:2393283 errors:0 dropped:0 overruns:0 frame:0
RX bytes:569079706 (542.7 MiB) TX bytes:2918345 (2.7 MiB)
eth0 Link encap:Ethernet HWaddr 00:1f:d0:e2:06:93
RX packets:1196664 errors:0 dropped:0 overruns:0 frame:0
TX packets:16344 errors:0 dropped:0 overruns:0 carrier:0
RX bytes:284857293 (271.6 MiB) TX bytes:1438910 (1.3 MiB)
eth1 Link encap:Ethernet HWaddr 00:1f:d0:e2:06:93
RX packets:1196619 errors:0 dropped:0 overruns:0 frame:0
RX bytes:284222413 (271.0 MiB) TX bytes:1479435 (1.4 MiB)
É mostrado acima que o bond0 esta 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:
# cat /proc/net/bonding/bond0
Terá como saída algo como:
Up Delay (ms): 800
Down Delay (ms): 400
Permanent HW addr: 00:1f:d0:e2:06:93
Permanent HW addr: 5c:d9:98:4c:0e:25
Um campo interessando nesse arquivo é o "Link Failure Count" que mostra as falhas que a interface teve.
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:
Teste do iptraf
Baixe algum arquivo grande (como uma iso) usando o wget por exemplo
No momento que o arquivo esta sendo baixado, inicie o iptraf para que ele possa monitorar o download da iso.
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.
Agora desconecte um 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.