Differences

This shows you the differences between two versions of the page.

Link to this comparison view

instalando_e_configurando_bonding_no_debian_squeeze_pt_br [2017/09/05 12:18] (current)
Line 1: Line 1:
 +====== ​ Instalando e Configurando Bonding no Debian Squeeze ======
  
 +Ethernet bonding, regulado pela norma IEEE 802.3ad com o título link aggregation é uma técnica em redes de computadores usada para o acoplamento de dois ou mais canais Ethernet em paralelo para produzir um único canal de maior velocidade e/ou aumentar a disponibilidade e redundância desse canal.
 +
 +Aqui vamos configurar o bonding para mantermos a redundância de uma conexão de rede.
 +
 +Prepare o seu sistema com o seguinte script http://​wiki.douglasqsantos.com.br/​doku.php/​confinicialsqueeze_en para que não falte nenhum pacote ou configuração.
 +
 +Aqui vamos precisar de uma máquina com duas interfaces de rede no mínimo eu vou utilizar uma VM com 3 interfaces para demostrar a utilização.
 +
 +Vamos instalar os pacotes necessários
 +<sxh bash>
 +
 +aptitude update && aptitude install ifenslave ethtool -y
 +</​sxh>​
 +
 +Agora vamos inserir o módulo do bonding para ser carregado com o sistema
 +<sxh bash>
 +
 +echo "alias bond0 bonding"​ >> /​etc/​modprobe.d/​bonding.conf
 +echo "​options bonding mode=0 miimon=100"​ >> /​etc/​modprobe.d/​bonding.conf
 +</​sxh>​
 +
 +Vamos dar uma olhadas nas opções acima que vamos utilizar para o bond
 +
 +Na primeira linha estamos carregando o modulo bonding e criando a interface virtual bond0. Na segunda linha informa que o módulo bonding deve operar em mode 0. Veja os diferentes tipos de configuração do módulo bonding:
 +  - **mode 0 - balance-rr** - Balanceamento entre as interfaces usando o algoritmo Round-Robin. Transmite os pacotes em uma ordem seqüencial,​ da primeira a última placa de rede agregada ao bonding que estiver disponível. Este modo provê o balanceamento da carga e tolerância as falhas.
 +  - **mode 1 - active-backup** - Apenas uma das interfaces agregadas ao bonding fica ativa. Outra interface se torna ativa se, e somente se, a interface atualmente ativa vier a falhar. O endereço MAC da interface bonding fica visível externamente em apenas uma placa de rede, para evitar confusão no switch. Este modo provê tolerancia à falhas.
 +  - **mode 2 - balance-xor** - Balanceamento usando o algorítimo Xor, com o MAC da placa de rede de destino do pacote, para selecionar a interface de rede que será utilizada. O bonding ultilizará sempre a mesma placa de rede para cada endereço MAC de destino. Este modo provê o balanceamento da carga e tolerancia à falhas.
 +  - **mode 3 - broadcast** - Transmissão dos pacotes utilizando o conceito de broadcast. Os pacotes são transmitidos em todas as interfaces agregadas ao bonding. Este  modo provê tolerancia à falhas.
 +  - **mode 4 - 802.3ad** - Agregação de links dinamicamente. Criação de grupos de agregações que possuem a mesma velocidade e definições de comunicação (duplex). Transmite e recebe dados em todas as interfaces do grupo. Prerequisitos:​ 1) Suporte ao Ethtool para obeter as informações de velocidade e definições de comunicação (duplex) de cada placa de rede. 2) Switch com suporte aos padrões IEEE 802.3ad e agregação dinâmica de links.
 +  - **mode 5 - balance-tlb** - Balanceamento de carga de transmissão adaptativa. Não requer switch com características especificas. O tráfego de saída é distribuido de acordo com a capacidade e o uso atual de cada placa de rede agregada ao bonding. O tráfego de entrada é recebido pela placa de rede atualmente em uso. Se a placa de rede que está recebendo dados vier a falhar, outra placa de rede assume seu MAC, e passa a receber os dados em seu lugar. Prerequisitos:​ 1) Suporte ao Ethtool para obeter as informações de velocidade de cada placa de rede.
 +  - **mode 6 - balance-alb** - Balanceamento de carga adaptativo para transmissão e recebimento de informações para o protocolo IPV4. Não requer switch com características especificas. O balanceamento da carga é feito utilizando negociações ARP interceptadas pelo driver bonding. Prerequisitos:​ 1) Suporte ao Ethtool para obeter as informações de velocidade de cada placa de rede. 2) Driver de rede com suporte à alteração do endereço MAC da placa com a mesma em uso.
 + 
 +  * **miimon** - Especifica a frequência de monitorização MII link em milissegundos. Isto determina quantas vezes o estado do link de cada slave é inspecionados para falhas de link. Um valor de zero desativa MII monitoramento de links. Um valor de 100 é um bom ponto de partida.
 +
 +
 +Vamos listar as interfaces de rede
 +<sxh bash>
 +
 +mii-tool ​
 +eth0: no autonegotiation,​ 1000baseT-FD flow-control,​ link ok
 +eth1: no autonegotiation,​ 1000baseT-FD flow-control,​ link ok
 +eth2: no autonegotiation,​ 1000baseT-FD flow-control,​ link ok
 +</​sxh>​
 +
 +Agora vamos configurar o bonding, podemos deixar o arquivo como abaixo, não precisamos configurar a interface eth0 e eth1 somente a interface bond0 no meu caso ;)
 +<sxh bash>
 +
 +vim /​etc/​network/​interfaces
 +#Interface de Loopback
 +auto lo
 +iface lo inet loopback
 +
 +#Interface Interna
 +auto eth0
 +iface eth0 inet static
 +        address 10.101.0.25
 +        netmask 255.255.255.0
 +        network 10.101.0.0
 +        broadcast 10.101.0.255
 +
 +#Interface do bonding
 +auto bond0
 +        iface bond0 inet static
 +        address 10.101.0.23
 +        netmask 255.255.255.0
 +        network 10.101.0.0
 +        gateway 10.101.0.254
 +        bond-slaves eth1 eth2
 +</​sxh>​
 +
 +
 +Agora vamos reiniciar o servidor para testarmos, pois como vamos tirar a configuração de alguma outra interface e subir ela em conjunto o sistema se perde o mais fácil é reiniciar
 +<sxh bash>
 +
 +reboot
 +</​sxh>​
 +
 +Agora vamos visualizar as interfaces com o mii-tool
 +<sxh bash>
 +
 +mii-tool ​
 +eth0: no autonegotiation,​ 1000baseT-FD flow-control,​ link ok
 +eth1: no autonegotiation,​ 1000baseT-FD flow-control,​ link ok
 +eth2: no autonegotiation,​ 1000baseT-FD flow-control,​ link ok
 +</​sxh>​
 +
 +Agora vamos visualizar o status das interfaces
 +<sxh bash>
 +
 +ip link show
 +1: lo: <​LOOPBACK,​UP,​LOWER_UP>​ mtu 16436 qdisc noqueue state UNKNOWN ​
 +    link/​loopback 00:​00:​00:​00:​00:​00 brd 00:​00:​00:​00:​00:​00
 +2: eth0: <​BROADCAST,​MULTICAST,​UP,​LOWER_UP>​ mtu 1500 qdisc pfifo_fast state UP qlen 1000
 +    link/ether 08:​00:​27:​3f:​b0:​b8 brd ff:​ff:​ff:​ff:​ff:​ff
 +3: eth1: <​BROADCAST,​MULTICAST>​ mtu 1500 qdisc noop state DOWN qlen 1000
 +    link/ether 08:​00:​27:​9d:​8e:​f7 brd ff:​ff:​ff:​ff:​ff:​ff
 +4: eth2: <​BROADCAST,​MULTICAST,​SLAVE,​UP,​LOWER_UP>​ mtu 1500 qdisc pfifo_fast master bond0 state UP qlen 1000
 +    link/ether 08:​00:​27:​ff:​cd:​7c brd ff:​ff:​ff:​ff:​ff:​ff
 +5: bond0: <​BROADCAST,​MULTICAST,​MASTER,​UP,​LOWER_UP>​ mtu 1500 qdisc noqueue state UP 
 +    link/ether 08:​00:​27:​ff:​cd:​7c brd ff:​ff:​ff:​ff:​ff:​ff
 +</​sxh>​
 +
 +Vamos Conferir com o ifconfig
 +<sxh bash>
 +
 +ifconfig
 +bond0     Link encap:​Ethernet ​ Endereço de HW 08:​00:​27:​ff:​cd:​7c  ​
 +          inet end.: 10.101.0.23 ​ Bcast:​10.101.0.255 ​ Masc:​255.255.255.0
 +          endereço inet6: fe80::​a00:​27ff:​feff:​cd7c/​64 Escopo:Link
 +          UP BROADCASTRUNNING MASTER MULTICAST ​ MTU:​1500 ​ Métrica:1
 +          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
 +          TX packets:65 errors:0 dropped:0 overruns:0 carrier:0
 +          colisões:0 txqueuelen:​0 ​
 +          RX bytes:0 (0.0 B)  TX bytes:2946 (2.8 KiB)
 +
 +eth0      Link encap:​Ethernet ​ Endereço de HW 08:​00:​27:​3f:​b0:​b8  ​
 +          inet end.: 10.101.0.25 ​ Bcast:​10.101.0.255 ​ Masc:​255.255.255.0
 +          endereço inet6: fe80::​a00:​27ff:​fe3f:​b0b8/​64 Escopo:Link
 +          UP BROADCASTRUNNING MULTICAST ​ MTU:​1500 ​ Métrica:1
 +          RX packets:​2825 errors:0 dropped:0 overruns:0 frame:0
 +          TX packets:59 errors:0 dropped:0 overruns:0 carrier:0
 +          colisões:0 txqueuelen:​1000 ​
 +          RX bytes:​207738 (202.8 KiB)  TX bytes:12344 (12.0 KiB)
 +
 +eth2      Link encap:​Ethernet ​ Endereço de HW 08:​00:​27:​ff:​cd:​7c  ​
 +          UP BROADCASTRUNNING SLAVE MULTICAST ​ MTU:​1500 ​ Métrica:1
 +          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
 +          TX packets:65 errors:0 dropped:0 overruns:0 carrier:0
 +          colisões:0 txqueuelen:​1000 ​
 +          RX bytes:0 (0.0 B)  TX bytes:2946 (2.8 KiB)
 +
 +lo        Link encap:​Loopback Local  ​
 +          inet end.: 127.0.0.1 ​ Masc:​255.0.0.0
 +          endereço inet6: ::1/128 Escopo:​Máquina
 +          UP LOOPBACKRUNNING ​ MTU:​16436 ​ Métrica:1
 +          RX packets:46 errors:0 dropped:0 overruns:0 frame:0
 +          TX packets:46 errors:0 dropped:0 overruns:0 carrier:0
 +          colisões:0 txqueuelen:​0 ​
 +          RX bytes:4578 (4.4 KiB)  TX bytes:4578 (4.4 KiB)
 +</​sxh>​
 +
 +
 +Agora vamos fazer um teste simples de ping
 +<sxh bash>
 +
 +ping -c 5 10.101.0.23
 +PING 10.101.0.23 (10.101.0.23) 56(84) bytes of data.
 +64 bytes from 10.101.0.23:​ icmp_req=1 ttl=64 time=0.383 ms
 +64 bytes from 10.101.0.23:​ icmp_req=2 ttl=64 time=0.383 ms
 +64 bytes from 10.101.0.23:​ icmp_req=3 ttl=64 time=0.361 ms
 +64 bytes from 10.101.0.23:​ icmp_req=4 ttl=64 time=0.354 ms
 +64 bytes from 10.101.0.23:​ icmp_req=5 ttl=64 time=0.353 ms
 +
 +--- 10.101.0.23 ping statistics ---
 +5 packets transmitted,​ 5 received, 0% packet loss, time 3997ms
 +rtt min/​avg/​max/​mdev = 0.353/​0.366/​0.383/​0.027 ms
 +</​sxh>​
 +
 +Agora vamos desativar uma interface, vou desativar a interface eth1 e vamos ver o status dela
 +<sxh bash>
 +
 +mii-tool ​
 +eth0: no autonegotiation,​ 1000baseT-FD flow-control,​ link ok
 +eth1: no autonegotiation,​ 1000baseT-FD flow-control,​ no link
 +eth2: no autonegotiation,​ 1000baseT-FD flow-control,​ link ok
 +</​sxh>​
 +
 +Agora vamos efetuar o teste de ping novamente
 +<sxh bash>
 +
 +ping -c 5 10.101.0.23
 +PING 10.101.0.23 (10.101.0.23) 56(84) bytes of data.
 +64 bytes from 10.101.0.23:​ icmp_req=1 ttl=64 time=0.383 ms
 +64 bytes from 10.101.0.23:​ icmp_req=2 ttl=64 time=0.352 ms
 +64 bytes from 10.101.0.23:​ icmp_req=3 ttl=64 time=0.350 ms
 +64 bytes from 10.101.0.23:​ icmp_req=4 ttl=64 time=0.291 ms
 +64 bytes from 10.101.0.23:​ icmp_req=5 ttl=64 time=0.239 ms
 +
 +--- 10.101.0.23 ping statistics ---
 +5 packets transmitted,​ 5 received, 0% packet loss, time 3997ms
 +rtt min/​avg/​max/​mdev = 0.239/​0.323/​0.383/​0.051 ms
 +</​sxh>​
 +
 +Funcionando Agora vamos habilitar a interface novamente, e vamos ver o seu status
 +<sxh bash>
 +
 +mii-tool ​
 +eth0: no autonegotiation,​ 1000baseT-FD flow-control,​ link ok
 +eth1: no autonegotiation,​ 1000baseT-FD flow-control,​ link ok
 +eth2: no autonegotiation,​ 1000baseT-FD flow-control,​ link ok
 +</​sxh>​
 +
 +Vamos efetuar um teste com ping novamente
 +<sxh bash>
 +
 +ping -c 5 10.101.0.23
 +PING 10.101.0.23 (10.101.0.23) 56(84) bytes of data.
 +64 bytes from 10.101.0.23:​ icmp_req=1 ttl=64 time=0.395 ms
 +64 bytes from 10.101.0.23:​ icmp_req=2 ttl=64 time=0.376 ms
 +64 bytes from 10.101.0.23:​ icmp_req=3 ttl=64 time=0.359 ms
 +64 bytes from 10.101.0.23:​ icmp_req=4 ttl=64 time=0.380 ms
 +64 bytes from 10.101.0.23:​ icmp_req=5 ttl=64 time=0.369 ms
 +
 +--- 10.101.0.23 ping statistics ---
 +5 packets transmitted,​ 5 received, 0% packet loss, time 3997ms
 +rtt min/​avg/​max/​mdev = 0.359/​0.375/​0.395/​0.027 ms
 +</​sxh>​
 +
 +Agora vamos desativar uma interface, vou desativar a interface eth2 e vamos ver o status dela
 +<sxh bash>
 +
 +mii-tool ​
 +eth0: no autonegotiation,​ 1000baseT-FD flow-control,​ link ok
 +eth1: no autonegotiation,​ 1000baseT-FD flow-control,​ link ok
 +eth2: no autonegotiation,​ 1000baseT-FD flow-control,​ no link
 +</​sxh>​
 +
 +Agora vamos efetuar mais um teste com o ping
 +<sxh bash>
 +
 +ping -c 5 10.101.0.23
 +PING 10.101.0.23 (10.101.0.23) 56(84) bytes of data.
 +64 bytes from 10.101.0.23:​ icmp_req=1 ttl=64 time=0.416 ms
 +64 bytes from 10.101.0.23:​ icmp_req=2 ttl=64 time=0.342 ms
 +64 bytes from 10.101.0.23:​ icmp_req=3 ttl=64 time=0.354 ms
 +64 bytes from 10.101.0.23:​ icmp_req=4 ttl=64 time=0.350 ms
 +64 bytes from 10.101.0.23:​ icmp_req=5 ttl=64 time=0.377 ms
 +
 +--- 10.101.0.23 ping statistics ---
 +5 packets transmitted,​ 5 received, 0% packet loss, time 3997ms
 +rtt min/​avg/​max/​mdev = 0.342/​0.367/​0.416/​0.036 ms
 +</​sxh>​
 +
 +Como pode ser notado temos a nossa redundância com interfaces de Rede ;)
 +
 +====== Referências ======
 +  - http://​linux.die.net/​man/​8/​ifenslave
 +  - http://​www.kernel.org/​doc/​Documentation/​networking/​bonding.txt