Como configurar duas placas de rede para trabalharem juntas, no linux.
Olá pessoal.
Vamos falar sobre a tecnologia "Bonding". O Linux permite que vinculemos múltiplas interfaces de rede em um único canal respondendo em conjunto. A ideia é permitir que duas ou mais interfaces de rede passem a agir como uma só, aumentando simultaneamente a largura de banda - performance - e proporcionando redundância - disponibilidade. O comportamento dessa nova interface depende do modo que for configurada.
Para entendermos melhor a vantagem, percebam a imagem abaixo, aonde duas placas (eth0 e eth1) respondem pelo mesmo ip (192.168.1.10), e mais outras duas placas (eth2 e eth3) respondem por outro ip (10.10.10.1). Caso uma dessas placas, de cada conjunto (Bond0 ou Bond1) venham a falhar, a segunda passa a responder automaticamente, sem perda de comunicação.
Configuração
Vamos configurar um exemplo de bonding. Irei usar 4 placas de rede para 2 "áreas" de conexões diferentes, aonde uma será pública e a outra privada. Você poderá usar essa configuração para sistemas em cluster, por exemplo.
Os procedimentos a seguir serão executados como usuário root. Para garantir que o modulo seja carregado, vamos criar um arquivo chamado bonding.conf em /etc/modprobe.d/ . O mesmo deverá conter os alias para as interfaces bond. No nosso exemplo bond0 e bond1. Para cada canal de bonding deverá existir uma entrada correspondente nesse arquivo.
[root@u2 ~]# cat /etc/modprobe.d/bonding.conf
alias bond0 bonding
alias bond1 bonding
[root@u2 ~]# modprobe bonding
Precisamos criar um arquivo de configuração de interface de ligação de canais (bonding) em /etc/sysconfig/network-scripts/ chamado ifcfg-bond <N>, substituindo <N>, com o número da interface, tais como 0 ou 1 e especificar os parâmetros de configuração no arquivo. Aqui estamos criando arquivo ifcfg-bond0 com seguinte conteúdo:
[root@u2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE="bond0"
BROADCAST="192.168.1.255"
GATEWAY="192.168.1.11"
IPADDR="192.168.1.8"
NETMASK="255.255.254.0"
ONBOOT="yes"
USERCTL=no
BONDING_OPTS="mode=0 miimon=100 downdelay=300 updelay=300"
[root@u2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-bond1
DEVICE="bond1"
BROADCAST="172.1.1.127"
GATEWAY="192.168.1.11"
IPADDR="172.1.1.10"
NETMASK="255.255.255.128"
ONBOOT="yes"
USERCTL=no
BONDING_OPTS="mode=0 miimon=100 downdelay=300 updelay=300"
[root@u2 ~]#
Após a interface de ligação de canal (Bonding) ser criado, as interfaces de rede a serem unidas devem ser configurados através da adição das diretivas do MASTER e SLAVE em seus arquivos de configuração. Os arquivos de configuração para cada uma das interfaces podem ser quase idênticos. Por exemplo, se duas interfaces Ethernet estão sendo ligadas, tanto eth0 e eth1 pode ser parecido com o exemplo a seguir:
[root@u2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
BOOTPROTO=none
MASTER=bond0
HWADDR=d8:d3:85:b7:e1:50
ONBOOT=yes
SLAVE=yes
USERCTL=no
[root@u2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth1
DEVICE=eth1
BOOTPROTO=none
MASTER=bond0
HWADDR="D8:D3:85:B7:E1:54"
ONBOOT=yes
SLAVE=yes
USERCTL=no
Para configurar as placas eth2 e eth3 no bond1:
[root@u2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth2
DEVICE=eth2
BOOTPROTO=none
MASTER=bond1
HWADDR="18:A9:05:78:E8:90"
ONBOOT=yes
SLAVE=yes
USERCTL=no
[root@u2 ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth3
DEVICE=eth3
BOOTPROTO=none
MASTER=bond1
HWADDR="18:A9:05:78:E8:91"
ONBOOT=yes
SLAVE=yes
USERCTL=no
Depois de configurar as seis interfaces - duas bond (bond0 e bond1) e quatro eth (eth0, eth1, eth2 e eth3) - poderemos levantar as interfaces de conexão:
[root@u2 ~]# ifconfig bond0 up
[root@u2 ~]# ifconfig bond1 up
Se as interfaces não levantarem:[root@u2 ~]# service network restart
Se tudo esta correto, deveremos ter a seguinte configuração:
[root@u2 ~]# ifconfig
bond0 Link encap:Ethernet HWaddr D8:D3:85:B7:E1:50
inet addr:192.168.1.10 Bcast:192.168.1.255 Mask:255.255.254.0
inet6 addr: fe80::dad3:85ff:feb7:e150/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:416527 errors:0 dropped:0 overruns:0 frame:0
TX packets:88508 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:397133528 (378.7 MiB) TX bytes:56030718 (53.4 MiB)
bond1 Link encap:Ethernet HWaddr 18:A9:05:78:E8:90
inet addr:172.1.1.10 Bcast:172.1.1.127 Mask:255.255.255.128
inet6 addr: fe80::1aa9:5ff:fe78:e890/64 Scope:Link
UP BROADCAST RUNNING MASTER MULTICAST MTU:1500 Metric:1
RX packets:110232 errors:0 dropped:0 overruns:0 frame:0
TX packets:27 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:9770922 (9.3 MiB) TX bytes:4306 (4.2 KiB)
eth0 Link encap:Ethernet HWaddr D8:D3:85:B7:E1:50
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:201105 errors:0 dropped:0 overruns:0 frame:0
TX packets:44347 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:203582987 (194.1 MiB) TX bytes:28143017 (26.8 MiB)
Interrupt:28 Memory:fb000000-fb7fffff
eth1 Link encap:Ethernet HWaddr D8:D3:85:B7:E1:50
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:215422 errors:0 dropped:0 overruns:0 frame:0
TX packets:44161 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:193550541 (184.5 MiB) TX bytes:27887701 (26.5 MiB)
Interrupt:40 Memory:fa000000-fa7fffff
eth2 Link encap:Ethernet HWaddr 18:A9:05:78:E8:90
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:55114 errors:0 dropped:0 overruns:0 frame:0
TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4885189 (4.6 MiB) TX bytes:2389 (2.3 KiB)
Interrupt:32
eth3 Link encap:Ethernet HWaddr 18:A9:05:78:E8:90
UP BROADCAST RUNNING SLAVE MULTICAST MTU:1500 Metric:1
RX packets:55118 errors:0 dropped:0 overruns:0 frame:0
TX packets:12 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:4885733 (4.6 MiB) TX bytes:1917 (1.8 KiB)
Interrupt:42
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:5449242 errors:0 dropped:0 overruns:0 frame:0
TX packets:5449242 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:3203787053 (2.9 GiB) TX bytes:3203787053 (2.9 GiB)
Comandos úteis
Para verificar os bonds existentes:[root@u2 ~]# cat /sys/class/net/bonding_mastersbond0 bond1[root@u2 ~]#
Para verificar o modo (mode) dos bonds :
[root@u2 ~]# cat /sys/class/net/bond0/bonding/mode
balance-rr 0
[root@u2 ~]# cat /sys/class/net/bond1/bonding/mode
balance-rr 0
[root@u2 ~]#
Para verificar os detalhes do bonding :
[root@u2 ~]# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 300
Down Delay (ms): 300
Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: d8:d3:85:b7:e1:50
Slave queue ID: 0
Slave Interface: eth1
MII Status: up
Speed: 100 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: d8:d3:85:b7:e1:54
Slave queue ID: 0
[root@u2 ~]# cat /proc/net/bonding/bond1
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 300
Down Delay (ms): 300
Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 18:a9:05:78:e8:90
Slave queue ID: 0
Slave Interface: eth3
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 18:a9:05:78:e8:91
Slave queue ID: 0
Bonding Mode
Várias políticas podem ser usadas no bonding, e devem ser setadas na diretiva mode=<value>, aonde o campo value deverá ser:
balance-rr or 0 — Seta a politica de round-robin cobrindo a tolerância à falha e balanceamento de carga. As transmissões serão recebidas e enviadas sequencialmente em cada uma das interfaces que compõem o bonding, começando pela primeira disponível.
balance-rr or 0 — Seta a politica de round-robin cobrindo a tolerância à falha e balanceamento de carga. As transmissões serão recebidas e enviadas sequencialmente em cada uma das interfaces que compõem o bonding, começando pela primeira disponível.
active-backup or 1 — Seta a política active-backup cobrindo a tolerância à falha. As transmissões são enviadas e recebidas pela primeira interface disponível no bonding. As demais interfaces só serão usadas em caso de falha dessa.
balance-xor or 2 — Seta a política XOR (exclusive-or) cobrindo a tolerância à falha e balanceamento de carga. Usando este método, a interface corresponde o endereço MAC da solicitação de entrada com o endereço MAC para uma das NICs do bonding. Uma vez que esta ligação é estabelecida, as transmissões são enviados sequencialmente começando com a primeira interface disponível.
broadcast or 3 — Seta a política de broadcast cobrindo a tolerância à falha. Todas as transmissões são enviadas a todas as interfaces do grupo do bonding..
802.3ad or 4 — Sets an IEEE 802.3ad dynamic link aggregation policy. Creates aggregation groups that share the same speed and duplex settings. Transmits and receives on all slaves in the active aggregator. Requires a switch that is 802.3ad compliant.
balance-tlb or 5 — Seta a política Transmit Load Balancing (TLB) cobrindo a tolerância à falha e balanceamento de carga. O tráfego de saída de dados é distribuído de acordo com a carga de cada interface do grupo de bonding. O tráfego de entrada é recebido pela interface corrente e se essa interface sofrer alguma falha, outra interface pega o endereço MAC dessa interface falha.
balance-alb or 6 — Seta a política Active Load Balancing (ALB) cobrindo a tolerância à falha e balanceamento de carga. Inclui balanceamento de carga para transmissão de entrada e saída de dados. O balanceamento de carga de entrada é através da ARP.
Finalmente, essa configuração poderá ser usada na maioria das distribuições linux, mas eu testei / uso nas distribuições ORacle Linux 6.x e Redhat Linux 6.x
Boa sorte a todos, estarei à disposição!
