Passo a passo para configurar um servidor com placa de rede tolerante a falhas ou balanceamento de carga, ou os 2. ;)
Plataforma:
CentOS 6.4
Podem ser usados N interfaces de rede. As interfaces de rede precisam estar na mesma VLAN.
1. Configurando o módulo de interface.
Crie o arquivo
bonding.conf em
/etc/modprobe.d/bonding.conf:
alias bond0 bonding
options bond0 miimon=100 mode=0
Onde
bond0, é como vai se chamar a interface de rede virtual. E
mode=0, é o modo de operação do channel bonding (ver mais modos de operação no final).
2. Criando os arquivos
ifcfg-xxxx:
bond0 ::
/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
IPADDR=172.20.11.200
NETMASK=255.255.254.0
GATEWAY=172.20.11.1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
NM_CONTROLLED=no
eth0 ::
/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes
eth1 ::
/etc/sysconfig/network-scripts/ifcfg-bond1
DEVICE=eth1
ONBOOT=yes
BOOTPROTO=none
USERCTL=no
MASTER=bond0
SLAVE=yes
Configurado as interfaces de rede, reinicie o servidor.
3. Checando as interfaces de rede:
# ifconfig -a
bond0 Link encap:Ethernet HWaddr 00:50:56:93:01:E7
inet addr:172.20.11.200 Bcast:172.20.11.255 Mask:255.255.254.0
inet6 addr: fe80::250:56ff:fe93:1e7/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:100120 errors:0 dropped:0 overruns:0 frame:0
TX packets:6709 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:6742886 (6.4 MiB) TX bytes:719297 (702.4 KiB)
eth0 Link encap:Ethernet HWaddr 00:50:56:93:01:E7
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:42558 errors:0 dropped:0 overruns:0 frame:0
TX packets:2368 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:2852022 (2.7 MiB) TX bytes:256888 (250.8 KiB)
eth1 Link encap:Ethernet HWaddr 00:50:56:93:01:E7
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:57562 errors:0 dropped:0 overruns:0 frame:0
TX packets:4341 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:3890864 (3.7 MiB) TX bytes:462409 (451.5 KiB)
Obs.: perceba que as interfaces
eth0 e
eth1, estão setadas como
SLAVE MULTICAST e
Bond0 como
MASTER MULTICAST.
4. Checando o status das interfaces de rede:
# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.6.0 (September 26, 2009)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:50:56:93:01:e7
Slave queue ID: 0
Slave Interface: eth1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 00:50:56:93:01:e8
Slave queue ID: 0
5. Testes
a. Derrube a interface
eth0:
# ifconfig eth0 down
a.1. Verifique se o IP continua pingando na interface de rede
bond0.
a.2. Verifique o status da interface
eth0 em
/proc/net/bonding/bond0.
a.3. Suba novamente a interface
eth0:
# ifconfig eth0 up
a.4. Verifique novamente o status da interface em
/proc/net/bonding/bond0.
b. Derrube a interface
eth1:
# ifconfig eth1 down
b.1. verifique se o IP continua pingando na interface de rede
bond0.
b.2. verifique o status da interface eth1 em
/proc/net/bonding/bond0.
b.3. suba novamente a interface
eth1:
# ifconfig eth1 up
b.4. verifique o status da interface
eth1 em
/proc/net/bonding/bond0.
6. Modos de operação do Channel Bonding:
Para alterar o modo de operação, basta alterar a variável
mode em
/etc/modprobe.d/bonding.conf.
Os modos foram retirados desta fonte:
Abaixo, segue uma breve descrição dos tipos operações:
- Modo 0 (balance-rr) :: transmite os pacotes em ordem sequencial do primeiro slave ao último. Provê tolerância a falhas e balanceamento. É o modo default, e também o único modo que permite com que o tráfego, seja distribuído entre as interfaces slave simultaneamente (ex.: duas placas 10/1000 serão uma única interface 2x(10/1000), ou seja, 2 Gbit max).
- Modo 1 (active-backup) :: apenas um slave estará ativo, as demais placas de rede apenas serão ativadas (uma de cada vez) no caso de falha do slave ativo. Provê tolerância a falhas e alta disponibilidade.
- Modo 2 (balance-xor) :: transmite os pacotes adotando uma política baseado em hashs, provê praticamente as mesmas funcionalidades do modo 0. É possível configurar políticas alternativas, modificando o parâmetro xmit_hash_policy ao carregar o módulo. A política padrão é baseada em MACs (origem/destino XOR'd).
- Modo 3 (broadcast) :: transmite todos os pacotes em todos os slaves. Provê tolerância a falhas e alta disponibilidade.
- Modo 4 (padrão 802.3ad) :: agregação dinâmica de links. É necessário um switch que suporte 802.3ad e que o ethtool consiga configurar os parâmetros speed e duplex em todos os slaves. É necessário também alguma configuração extra no switch; no switch utilizado neste artigo, esta configuração tem o nome LACP (IEEE 802.3ad Link Aggregation Protocol).
- Modo 5 (balance-tlb) :: load-balance adaptável. Não requer nenhum suporte especial do switch, o tráfego de saída é distribuído de acordo com a carga em cada slave. O tráfego de entrada utiliza um único slave, se ele falhar outro assume e clona o MAC do slave que estava ativo.
- Modo 6 (balance-alb) :: o Adaptative Load Balancing provê o Transmit Load Balancing e o Receive Load Balancing para o IPv4 por intermédio de negociação ARP. Não requer mudanças no switch mas se faz necessário a troca do endereço MAC enquanto este estiver aberto. De forma bem generalizada é modo 5 turbinado (tlb+rlb).
Abraços.
Leonardo Macedo Cerqueira