
Estou tentando conectar um servidor Linux com duas NICs de 1 Gbps com um switch Netgear ProSafe GSM7248V2 usando ligação, especificamente o modo 802.3ad. Os resultados são muito confusos. Ficaria grato por qualquer dica sobre o que tentar a seguir.
No lado do servidor, este é meu /etc/network/interfaces:
auto bond0
iface bond0 inet static
address 192.168.1.15/24
gateway 192.168.1.254
dns-nameservers 8.8.8.8
dns-search my-domain.org
bond-slaves eno1 eno2
bond-mode 4
bond-miimon 100
bond-lacp-rate 1
bond-xmit_hash_policy layer3+4
hwaddress aa:bb:cc:dd:ee:ff
A configuração do switch é a seguinte:
(GSM7248V2) #show port-channel 3/2
Local Interface................................ 3/2
Channel Name................................... fubarlg
Link State..................................... Up
Admin Mode..................................... Enabled
Type........................................... Dynamic
Load Balance Option............................ 6
(Src/Dest IP and TCP/UDP Port fields)
Mbr Device/ Port Port
Ports Timeout Speed Active
------ ------------- --------- -------
0/7 actor/long Auto True
partner/long
0/8 actor/long Auto True
partner/long
(GSM7248V2) #show lacp actor 0/7
Sys Admin Port Admin
Intf Priority Key Priority State
------ -------- ----- -------- -----------
0/7 1 55 128 ACT|AGG|LTO
(GSM7248V2) #show lacp actor 0/8
Sys Admin Port Admin
Intf Priority Key Priority State
------ -------- ----- -------- -----------
0/8 1 55 128 ACT|AGG|LTO
(GSM7248V2) #show lacp partner 0/7
Sys System Admin Prt Prt Admin
Intf Pri ID Key Pri Id State
------ --- ----------------- ----- --- ----- -----------
0/7 0 00:00:00:00:00:00 0 0 0 ACT|AGG|LTO
(GSM7248V2) #show lacp partner 0/8
Sys System Admin Prt Prt Admin
Intf Pri ID Key Pri Id State
------ --- ----------------- ----- --- ----- -----------
0/8 0 00:00:00:00:00:00 0 0 0 ACT|AGG|LTO
Acredito que xmit "layer3+4" seja mais compatível com o Load Balance Type 6 do switch. A primeira coisa surpreendente é que o switch não vê o endereço MAC do parceiro LACP.
No lado do servidor, este é o conteúdo de /proc/net/bonding/bond0:
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)
Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer3+4 (1)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0
802.3ad info
LACP rate: fast
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: ac:1f:6b:dc:2e:88
Active Aggregator Info:
Aggregator ID: 15
Number of ports: 2
Actor Key: 9
Partner Key: 55
Partner Mac Address: a0:21:b7:9d:83:6a
Slave Interface: eno1
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: ac:1f:6b:dc:2e:88
Slave queue ID: 0
Aggregator ID: 15
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
system priority: 65535
system mac address: ac:1f:6b:dc:2e:88
port key: 9
port priority: 255
port number: 1
port state: 63
details partner lacp pdu:
system priority: 1
system mac address: a0:21:b7:9d:83:6a
oper key: 55
port priority: 128
port number: 8
port state: 61
Slave Interface: eno2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: ac:1f:6b:dc:2e:89
Slave queue ID: 0
Aggregator ID: 15
Actor Churn State: none
Partner Churn State: none
Actor Churned Count: 0
Partner Churned Count: 0
details actor lacp pdu:
system priority: 65535
system mac address: ac:1f:6b:dc:2e:88
port key: 9
port priority: 255
port number: 2
port state: 63
details partner lacp pdu:
system priority: 1
system mac address: a0:21:b7:9d:83:6a
oper key: 55
port priority: 128
port number: 7
port state: 61
Se bem entendi, significa que o driver de ligação do Linux determinou corretamente todos os detalhes do agregador (chave, números de porta, prioridade do sistema, prioridade da porta, etc.). Apesar disso, recebo isso no dmesg após reiniciar o serviço de rede:
[Dec14 20:40] bond0: Releasing backup interface eno1
[ +0.000004] bond0: first active interface up!
[ +0.090621] bond0: Removing an active aggregator
[ +0.000004] bond0: Releasing backup interface eno2
[ +0.118446] bond0: Enslaving eno1 as a backup interface with a down link
[ +0.027888] bond0: Enslaving eno2 as a backup interface with a down link
[ +0.008805] IPv6: ADDRCONF(NETDEV_UP): bond0: link is not ready
[ +3.546823] igb 0000:04:00.0 eno1: igb: eno1 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[ +0.160003] igb 0000:05:00.0 eno2: igb: eno2 NIC Link is Up 1000 Mbps Full Duplex, Flow Control: RX
[ +0.035608] bond0: link status definitely up for interface eno1, 1000 Mbps full duplex
[ +0.000004] bond0: Warning: No 802.3ad response from the link partner for any adapters in the bond
[ +0.000008] bond0: first active interface up!
[ +0.000166] IPv6: ADDRCONF(NETDEV_CHANGE): bond0: link becomes ready
[ +0.103821] bond0: link status definitely up for interface eno2, 1000 Mbps full duplex
Ambas as interfaces estão ativas, a conexão de rede parece normal, acabei de receber aquele estranho aviso de que não há parceiro compatível com 802.3ad.
Além disso, quando tento copiar simultaneamente dois arquivos binários grandes (10 GB cada) de duas máquinas diferentes conectadas ao mesmo switch, cada uma conectada a 1 Gbps, a taxa de transferência geral da interface bond0 no servidor fica bem abaixo de 1 Gbps, embora eu esperaria algo mais próximo de 2 Gbps (a velocidade de leitura, etc. não é um fator limitante aqui, todos os SSDs, bem armazenados em cache, etc.). Quando copio os mesmos arquivos sequencialmente, um após o outro, das mesmas máquinas, alcanço facilmente taxas de transferência próximas de 1 Gbps.
Você, por favor, tem alguma ideia do que pode estar errado aqui? Em relação ao diagnóstico, o aviso confuso aparece no dmesg (nenhum parceiro compatível com 802.3ad) e na saída sh lacp do switch (sem MAC do parceiro, embora o registro regular da porta mostre o endereço MAC correto da NIC conectada). Em relação ao desempenho da rede, não consigo ver nenhuma agregação usando duas conexões diferentes. Eu ficaria muito grato por qualquer dica.
Responder1
O switch está configurado para long
o tempo limite do LACP - um LACPDU a cada 30 segundos.
O sistema Linux está configurado para bond-lacp-rate 1
.
Não consigo encontrar o que isso realmente faz no Debian, mas se passar a lacp_rate=1
opção do módulo para bonding (referência), então esse é o tempo limite rápido - um LACPDU a cada 1 segundo.
Essa incompatibilidade entre a taxa LACP lenta/rápida é uma configuração incorreta.
Toda a documentação de exemplo que posso encontrar diz que o Debian aceita, bond-lacp-rate slow
o que esperamos corrigir para você.
Você provavelmente também poderia remover a bond-lacp-rate
linha do seu arquivo de configuração, já que o padrão é taxa lenta, e então descarregar o módulo de ligação ou reinicializar para aplicar.
Não teste o rendimento com apenas dois fluxos. A layer3+4
política não garante que dois fluxos tenham uma NIC separada, apenas que, com fluxos suficientes, o tráfego deverá ser equilibrado de maneira um tanto uniforme.
Teste com, digamos, 16 ou 32 fluxos TCP iperf3 simultâneos. A taxa de transferência total de todos os fluxos deve estar próxima de 2 Gbps.