Visite também: Br-Linux ·  VivaOLinux ·  LinuxSecurity ·  Dicas-L ·  NoticiasLinux ·  SoftwareLivre.org ·  [mais]
Voltar   Under-Linux.org > UnderLinux Wiki
Fóruns Wiki Videos Grupos Sociais RSS Feeds FAQ Termos de Uso Contato Sobre Twitter
Registrar Blogs Calendário Marcar Fóruns Como Lidos

Ferramentas pessoais
Publicidade

From UnderLinux Wiki

Balanceamento e alta disponibilidade com Bonding

Tabela de conteúdo

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:

# 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.

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
#
#       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
        ;;
    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

Autor


Horários baseados na GMT -3. Agora são 22:30.


Powered by vBulletin®
Copyright ©2000 - 2009, Jelsoft Enterprises Ltd.
SEO by vBSEO 3.3.0 ©2009, Crawlability, Inc.
Powered by vbWiki Pro 1.3 RC5. Copyright ©2006-2007, NuHit, LLC