Você está na página 1de 6

Balanceamento e alta disponibilidade com Bonding

Tabela de conteúdo
• 1 Introdução
• 2 Modos de operação do Bonding
• 3 Módulo bonding
• 3.1 Configurando o módulo bonding
• 3.2 Configurando multiplas interfaces bonding
• 4 Interface virtual bond
• 5 Configurando as interfaces físicas
• 6 Testes
• 7 Automatizando o processo
• 8 Erros
• 9 Referências
• 10 Autor

if (window.showTocToggle) { var tocShowText = "mostrar";


var tocHideText = "esconder"; showTocToggle(); } Introdução
Este tutorial tem o objetivo de explicar como fazer o seu servidor trabalhar com alta
disponibilidade e balanceamento de cargas fazendo múltiplas interfaces de rede responderem como
se fosse uma. Utilizaremos aqui o módulo do kernel "bonding".
Estarei utilizando neste artigo o Open Suse 10.1. Logo, se o seu for diferente deverá fazer os
devidos ajustes.

Modos de operação do Bonding


O Bonding possúi diversos modos de operação mas vou apresentar aqui os dois principais
• balance-rr ou modo 0
Neste modo todas as interfaces estão ativas e fazem balanceamento de carga (load balance)
trabalhando em velocidade igual a soma de suas velocidades separadas (duas placas de rede 10/100
trabalharão como uma de 200) e ainda faz alta disponibiliada, pois o serviço continua ativo mesmo
se alguma dessas interfaces pararem por qualquer motivo (como cabo rompido).
• active-backup ou modo 1
Neste modo apenas a alta disponibilida é implementada. Não é feito o balancemento de carga
pois uma placa fica como master e outra como slave. Se a marter parar de responder a slave assume.

Módulo bonding
Nas distribuições mais novas o módulo bonding já vem compilado como módulo do kernel,
precisando apenas ser configurado carregado. Se a sua distribuição não possúi, vc pode recompilar
o kernel e abilitar o módulo "bonding".
Para verificar se a sua possúe utilize o seguinte comando:

1
# find /lib/modules/`uname -r`/ | grep bonding
/lib/modules/2.6.16.21-0.25-default/kernel/drivers/net/bonding
/lib/modules/2.6.16.21-0.25-default/kernel/drivers/net/bonding/bonding.ko

Se você conseguiu um resultado parecido o seu sistema já possúe o módulo bonding compilado.
Para carregarmos o módulo utilizamos a seguinte sintaxe:
# modprobe bonding

Fazendo desta forma não temos a opção de configurar o módulo e ele trabalhará com a
configuração default (modo balance-rr) e não subirá na inicialização.

Configurando o módulo bonding


Iremos configurar o módulo do bonding e criaremos um alias para o mesmo. O alias é
interessante em situações que vc deseja fazer mais de um bonding na mesma máquina como no caso
de haver 4 interfaces de rede e desejar responder por 2 placas fazendo alta disponibiliadade.
No suse o arquivo que configura os módulos é o "/etc/modprobe.conf" que no final faz um
include do arquivo "/etc/modprobe.conf.local". Como este segundo arquivo é menor utilizaremos-
opara melhor organizar a nossa configuração. Inclua neste arquivo as seguinte linhas:
alias bond0 bonding
options bond0 mode=0 miimon=100 downdelay=200 updelay=200

Troque o mode=0 por mode=1 caso deseje utilizar o modo active-backup.


Com essas opções o seu módulo já subirá na inicialização do sistema.

Configurando multiplas interfaces bonding


Se desejar configurar várias dispositivos bonding com diferentes opções de rede devemos alerar
a inicialização dos módulos
Para criar vários dispositivos bonding com opções diferentes é neceessário iniciar o driver do
bonding várias vezes. Para iniciar várias intancias do módulo para especificar nomes diferentes para
cada instancia. Faremos da seguinte forma:
#bonding para a placa eth0 e eth1
alias bond0 bonding
options bond0 -o bond0 mode=0 miimon=100 downdelay=200 updelay=200

#bonding para a placa eth2 e eth3


alias bond1 bonding
options bond1 -o bond1 mode=1 miimon=100 downdelay=200 updelay=200

Veja que aqui temos diferentes tipos de bonding configurado. Podemos especificar quantas
intancias quanto quiser.

Interface virtual bond


Criaremos aqui a interface bond0 (ou outro nome que utilizou no alías) e atribuiremos as
configuraçõs de rede.
• Obs.: Não atribuiremos aqui o endereço físico da placa pois ele pegará a da primeira placa
que subir mas pode ser atribuído com a mesma sintaxe do comando ifconfig.

2
Atribuiremos um ip e sua respectiva máscara (neste caso 255.255.255.0 ou /24) e subiremos a
placa
# ip addr add 192.168.0.254/24 brd + dev bond0
# ip link set dev bond0 up

Caso fosse duas ou mais interfaces bonding faríamos assim:


# ip addr add 192.168.0.254/24 brd + dev bond0
# ip link set dev bond0 up
# ip addr add 10.1.0.254/24 brd + dev bond1
# ip link set dev bond1 up

Configurando as interfaces físicas


O próximo passo é dizer ao driver quais interfaces de redes físicas (neste caso eth0 e eth1) irão
fazer parte deste TEAM, constituindo a interface lógica bond0.
ifenslave bond0 eth0 eth1

Novamente se fossem duas iterfaces bonding ficaria assim:


ifenslave bond0 eth0 eth1
ifenslave bond1 eth2 eth3

Testes
Neste ponto o bonding já deve estar funcionando. Você pode testar mandando a máquina pingar
em algum canto (seu roteador por exemplo) com os dois cabos de rede. Faça o teste de tirar um
cabo e veja se parou de pingar. Coloque novamente e tire o outro. Verifique se parou de pingar. Se
não parou está correto.

Automatizando o processo
As configurações funcionaram perfeitamente mas e se seu servidor reiniciar? Logicamente ele
não vai funcionar. O que faremos? Simples. Colocaremos um script que faça estes comandos para
nós. Este script estará em /etc/inid.d/ com o nome de bond:
#!/bin/bash
#
# Script criado para subir as placas de rede eth0 e eth1
# em bonding mode=0 (alta disponibilidade e load balance)
# Este Script é colocado em /etc/inid.d/bond
#
# É também criado um link para este em:
# /etc/inid.d/rc2.d/wbond
# /etc/inid.d/rc3.d/wbond
# /etc/inid.d/rc5.d/wbond
# O nome do link wbond é para ele ser iniciado depois de todos os
processos
# Na verdade só é necessário que rode depois do script de rede
#
# É também criado o link em /bin/bond para que o comando "bond" fique no
PATH
#

3
# Data de criação: 24/11/2006
# Última Alteração: 29/11/2006
# Autor: Willian Itiho Amano - WhiteTiger (willian@underlinux.com.br)
#
#
#

#Faz um include para utilizar o comando que mostra quando a opção terminou
corretamente ou com falha
. /etc/rc.status

#IP que o bonding vai reponder


IP_BONDING="xxx.xxx.xxx.xxx"

#mascara que o bonding utilizará


MASC_Bonding="24"

#IP da placa extra


IP_EXTRA=xxx.xxx.xxx.xxx

#Mascara da placa extra


MASC_EXTRA="255.255.255.255"

case "$1" in
start*)
echo "Iniciando as placas de rede em modo bonding"
#Derruba todas as placas
ifconfig eth0 down
ifconfig eth1 down
ifconfig eth2 down
ifconfig bond0 down

#Derruba todos os módulos das placas de rede


rmmod e1000
rmmod tg3

#Sobe os módulos na odem certa eth0 e eth1 são as onboard


modprobe tg3
modprobe e1000

#Configura a placa off


ifconfig eth2 $IP_EXTRA netmask $MASC_EXTRA

#configura a rota default (gateway)


route add default gw 200.142.11.129

#Espera que o módulo das placas estarem preparados para receber


as configurações do bonding (Não. Elas não estarão prontas automaticamente após
o levantamento do módulo). Tempo de 5 segundos.
sleep 5

#Atribue as configurações de rede do bond0


ip addr add $IP_BONDING/$MASC_Bonding brd + dev bond0

#Sobe a interface bond0


ip link set dev bond0 up

#Atribue as interfaces eth0 e eth1 como slave de bond0


ifenslave bond0 eth0 eth1
rc_status -v

4
;;
stop)
echo "Derrubando as placas de rede em modo bonding"

#Esse comando derruba a interface bonding e consequentemente a


eth0 e eth1.
ip link set dev bond0 down

#Não é necessário derrubar os módulos e as configurações das


placas de rede pois os scripts de finalização do linux se encarrega disso.
rc_status -v
;;
restart)
$0 stop
$0 start
;;
status)
#Checa o status do bonding pois o ifconfig não apresenta
corretamente as configurações
cat /proc/net/bonding/bond0
;;
*)
#Se o cara não entrar com start, stop ou status mostra essa
mensagem
echo "Utilize $0 {start|stop|restart|status}"
esac

De permissão de execução ao arquivo:


#chmod a+x /etc/init.d/bond

Agora temos de configurar para iniciar nos diversos init (2, 3 e 5). Para isto temos de colocar
um link simbólico nas respectivas pastas rc2.d, rc3.d e rc5.d que encontram-se dentro de /etc/inid.d.
Os arquivos desas pastas são iniciadas por ordem alfabética então colocaremos o script do bond
por último mudando o nome do link simbólico da sequinte maneira:
# ln - /etc/inid.d/bond /etc/inid.d/rc2.d/wbond
# ln - /etc/inid.d/bond /etc/inid.d/rc3.d/wbond
# ln - /etc/inid.d/bond /etc/inid.d/rc5.d/wbond

Erros

Referências
• http://linux-net.osdl.org/index.php/Bonding
• http://www.vivaolinux.com.br/artigos/verArtigo.php?codigo=4564&
• http://www.redhat.com/docs/manuals/enterprise/RHEL-4-Manual/ref-guide/s1-
networkscripts-interfaces.html
• http://www.gentoo.org/doc/pt_br/handbook/handbook-x86.xml?part=4&chap=3

Autor
• White Tiger (itihoitiho@gmail.com)

5
6

Você também pode gostar