LACP entre Netgear ProSafe GSM7248V2 e servidor Linux

LACP entre Netgear ProSafe GSM7248V2 e servidor Linux

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 longo 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=1opçã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 slowo que esperamos corrigir para você.

Você provavelmente também poderia remover a bond-lacp-ratelinha 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+4polí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.

informação relacionada