fev 28

Bonding no Linux (ALTA DISPONIBILIDADE DOS LINKS)

Estive muitos dias sem escrever no meu blog porque estou envolvido em alguns projetos que provavelmente irei postar aqui algumas coisas interessantes para todos estudarem. Principalmente o que diz respeito a virtualização com XEN e integração com o exchange usando o postfix e o dovecot.

Mas hoje eu quero falar de BONDING no Linux, tantos em sistemas baseados em RHEL como o CentOS e em Debian como o Ubuntu. Para quem não conhece, bonding é a capacidade que temos de ter 2 links agregados a um único canal de dados que permite maior velocidade e disponibilidade dos links em uso de acordo com as normas IEEE 802.3ad OU IEEE 802.3.

Em uma distribuição Linux vamos precisar carregar o modulo bounding com os seus parametros que vai criar um adaptador de rede virtual chamado bounding que vai agregar os seus 2 adaptadores de rede, sendo um virtua ou ajato (poder), por exemplo ou um embratel (poder), e outro oi (eca/sux).

Entao vamos simular que vc possui o seguinte cenário:

eth0 -> 10.0.0.100 (embratel)

eth1 -> 10.0.0.200 (ajato)

ENTAO VAMOS CARREGAR O MODULO BONDING:

# modprobe bonding -o bound0 miimon=1000 mode=1

Essa linha carrega o módulo de bounding, define a velocidade da interface em 1000 e indica o modo de trabalho, no caso, o número 1 é referente ao modo backup.

ou apenas

#modprobe bonding

AO CARREGAR O MODULO bonding ele vai criar o bond0 sendo um dispositivo para bonding, o bond0.

Vamos zerar as interfaces de rede? Porque? Porque vamos colocar cada uma delas cujo onde esta funcionando seus links para ser escravo da placa bond0, ou seja toda informação de pacote que chega ou sai nas 2 placas de redes (eth0 ou eth1), será encaminhada para a placa bonding (ou bond0).

#ifconfig eth0 0.0.0.0

#ifconfig eth1 0.0.0.0

Entao vamos definir um enderecamento de IP para o bond0.

#ifconfig bond0 10.0.0.2 netmask 255.255.255.0 up

veja abaixo a saida de um ifconfig:

bond0  Encapsulamento do Link: Ethernet  Endereço de HW 00:19:B9:CC:D8:57
inet end.: 10.0.0.2  Bcast:10.0.0.255  Masc:255.255.255.0
UP BROADCASTRUNNING MASTER MULTICAST  MTU:1500  Métrica:1
RX packets:3667 errors:0 dropped:0 overruns:0 frame:0
TX packets:973 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:497097 (485.4 KiB)  TX bytes:150203 (146.6 KiB)

Próximo passo é definir a sua rota padrão como vc faz normalmente no seu Linux.

#route add default gw 10.0.0.1

(vale lembrar que em sistemas FreeBSD ou em outras versões do UNIX o parametro gw não deve ser colocado).

PROXIMO E ULTIMO PASSO é configurar como SLAVE as 2 outras placas de rede físicas onde estao fisicamente conectados links como do virtua, ajato, embratel, oi, e outros. Podemos utilizar o comando ifenslave que permite agregar 2 adaptadores em 1.

# ifenslave bond0 eth0   #(definimos que a eth0 será SLAVE da interface bond0)
# ifenslave bond0 eth1    #(definimos que a eth1 será SLAVE da interface bond0)

Pronto, ja esta funcionando, veja a saida do meu ifconfig:

# ifconfig
bond0      Encapsulamento do Link: Ethernet  Endereço de HW 00:19:B9:CC:D8:57
inet end.: 10.0.0.2 Bcast:10.0.0.255  Masc:255.255.255.0
UP BROADCASTRUNNING MASTER MULTICAST  MTU:1500  Métrica:1
RX packets:3667 errors:0 dropped:0 overruns:0 frame:0
TX packets:973 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:0
RX bytes:497097 (485.4 KiB)  TX bytes:150203 (146.6 KiB)

eth0       Encapsulamento do Link: Ethernet  Endereço de HW 00:19:B9:CC:D8:57
UP BROADCASTRUNNING SLAVE MULTICAST  MTU:1500  Métrica:1
RX packets:2383 errors:0 dropped:0 overruns:0 frame:0
TX packets:951 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:298041 (291.0 KiB)  TX bytes:148124 (144.6 KiB)
IRQ:169 Memória:f4000000-f4011100

eth1       Encapsulamento do Link: Ethernet  Endereço de HW 00:19:B9:CC:D8:57
UP BROADCASTRUNNING SLAVE MULTICAST  MTU:1500  Métrica:1
RX packets:1284 errors:0 dropped:0 overruns:0 frame:0
TX packets:22 errors:0 dropped:0 overruns:0 carrier:0
colisões:0 txqueuelen:1000
RX bytes:199056 (194.3 KiB)  TX bytes:2079 (2.0 KiB)
IRQ:169 Memória:f8000000-f8011100

Vc nunca deve esquecer de configurar no /etc/modprobe.conf para que o seu Linux sempre levante o determinado modulo e o seu dispositivo bond0. Apenas faça o seguinte:

#vi /etc/modprobe.conf (e adcione)

alias bond0 bonding
options bond0 miimon=1000 mode=1

NOTA: caso o seu dispositivo nao tenha funcionado com a taxa de velocidade mii adaptada somente para 1000 entao vc nem precisa colocar a segunda linha.

Em sistemas Debian não se esqueça de usar o arquivo /etc/network/interfaces para adcionar as informações dos adaptadores de rede voltados para o seu cenário utilizando o “up” na frente de cada comando. Não esquecer de configurar o hostname (opcional) .

Em sistemas baseados em Red Hat como o Fedora ou CentOS vc precisa editar a configuracao dos seguintes arquivos dentro de /etc/sysconfig/network-scripts/ LEMBRANDO QUE NO SUSE FICA EM /etc/sysconfig/network/

#vi /etc/sysconfig/network-scripts/ifcfg-bond0

DEVICE=bond0
BOOTPROTO=none
ONBOOT=yes
NETWORK=10.0.0.0
NETMASK=255.255.255.0
IPADDR=10.0.0.2
USERCTL=no
NOZEROCONF=yes (em caso de dhcp)

Ajustes as configurações das interfaces eth0 e eth1:

# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no

# vi /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
MASTER=bond0
SLAVE=yes
USERCTL=no

Para exibir informações do dispositivo de acesso bond0 vc pode usar o proprio /proc do kernel. E então MONITORAR usando e combinando o comando com o watch -n 1.

# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v2.6.3-rh (June 8, 2005)

Bonding Mode: fault-tolerance (active-backup)
Primary Slave: None
Currently Active Slave: eth0
MII Status: up
MII Polling Interval (ms): 1000
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Link Failure Count: 1
Permanent HW addr: 00:19:b9:cc:d8:59

Slave Interface: eth1
MII Status: up
Link Failure Count: 1
Permanent HW addr: 00:19:b9:cc:d8:57

Lembre-se que vc pode usar normalmente o iproute2 no Debian /Ubuntu como no RHEL/SUSE para fazer tal operacao normalmente.

Nao devemos esquecer também que os adaptadores como vao ser escravo do bond0 entao o seu link deve estar funcionando para que tudo de certo. Caso nao, podemos utilizar no debian o post-up e no RHEL o arquivo de rotas e adcionar suas rotas com: route add -net REDE netmask MASCARA gw GATEWAY dev bond0, e tambem do outro adaptador.

Em alguns casos como no debian é bom remover o pacote dhcp3-server. Sendo que o mesmo pode junto ao network-manager ferrar toda a sua configuração.

# ip addr add 10.0.0.2/24 brd + dev bond0

# ip link set dev bond0 up

# ifenslave bond0 eth0 eth1

Falow galera: aprigio@linuxstudent.com.br

Comments are closed.

preload preload preload
Powered by Moblie Video for WordPress + Daniel Watrous