|
|||||||
| Wiki | Classificados | Galeria | Reviews | Jogos | Comunidades | RSS Feeds | FAQ | Termos de Uso | Sobre |
| Cadastre-se | Fotos | Blogs | Lista de Membros | Calendário | Pesquisar | Mensagens de Hoje | Marcar Fóruns Como Lidos |
FerramentasPublicidade |
From UnderLinux WikiBalanceamento e alta disponibilidade com Bonding
[editar] IntroduçãoEste 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. [editar] Modos de operação do BondingO Bonding possúi diversos modos de operação mas vou apresentar aqui os dois principais
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).
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. [editar] Módulo bondingNas 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. [editar] Configurando o módulo bondingIremos 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. [editar] Configurando multiplas interfaces bondingSe 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. [editar] Interface virtual bondCriaremos aqui a interface bond0 (ou outro nome que utilizou no alías) e atribuiremos as configuraçõs de rede.
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 [editar] Configurando as interfaces físicasO 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 [editar] TestesNeste 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. [editar] Automatizando o processoAs 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 [editar] Erros[editar] Referências
[editar] Autor
|