Como alguém diagnostica os problemas do Linux LACP no nível do kernel?

6

Existe uma interface administrativa ou de diagnóstico subjacente ao driver de ligação do Linux para determinar o que está acontecendo internamente?

Eu usei agregação de links entre caixas Linux e switches Cisco por muitos anos. Periodicamente eu me deparo com um beco sem saída quando configuro novas caixas onde o lado do Linux simplesmente não responde aos pacotes Cisco LACP. Eu meticulosamente sigo um conjunto rigoroso de instruções para cada servidor, mas os resultados parecem variar.

Se a ligação contém um escravo ou oito, o tcpdump mostra pacotes LACP vindos do switch em todas as interfaces ligadas e nenhum pacote é transmitido de volta. De fato, nenhum pacote é transmitido no período. rx_packets para a interface mostra tráfego considerável, mas tx_packets é zero. Não há nada de interessante nos logs em relação a MII ou ligação. Não há erros.

Atualmente, estou lidando com uma caixa que tem apenas dois nics. Por enquanto, só tenho eth1 no vínculo. Obviamente, esta é uma configuração degenerada. A situação não muda com eth0 e eth1 no vínculo; Isso só torna mais difícil trabalhar com a máquina quando a pilha da rede está completamente inativa. Eu posso reconfigurá-lo para ambos os nics, se necessário, e passar por uma interface administrativa (DRAC), mas não consigo copiar e colar da caixa dessa maneira.

Algumas preliminares:

  • Eu testei os nics, portas e cabos. Tudo funciona como esperado quando as interfaces não estão ligadas.
  • Reiniciei e confirmei que os módulos estão sendo carregados corretamente.
  • Eu tentei isso com e sem o entroncamento vlan; não importa, pois a agregação de link ocorre abaixo desse ponto na pilha.
  • O switch tem grupos de canais troncalizados funcionando para outras caixas Linux. As configurações são mais ou menos idênticas, embora as distros, os núcleos e o hardware das caixas do Linux não sejam.

Este é debian 8.6 baixado hoje.

Linux box 3.16.0-4-amd64 #1 SMP Debian 3.16.36-1+deb8u2
    (2016-10-19) x86_64 GNU/Linux

Uma configuração abreviada:

iface eth1 inet manual

auto bond0
iface bond0 inet manual
        slaves eth1
        address 10.10.10.10
        netmask 255.255.255.0
        bond_mode 4
        bond_miimon 100
        bond_downdelay 200
        bond_updelay 200
        bond_xmit_hash_policy layer2+3
        bond_lacp_rate slow

Algum estado:

# cat /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: layer2+3 (2)
MII Status: down
MII Polling Interval (ms): 100
Up Delay (ms): 200
Down Delay (ms): 200

802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
bond bond0 has no active aggregator

Slave Interface: eth1
MII Status: down
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 0
Permanent HW addr: 78:2b:cb:5a:2b:3e
Aggregator ID: N/A
Slave queue ID: 0

Um registro tcpdump de entrada na eth1 do switch:

22:18:47.333928   M 44:ad:d9:6c:8d:8f ethertype Slow Protocols (0x8809),
          length 126: LACPv1, length 110
        Actor Information TLV (0x01), length 20
          System 44:ad:d9:6c:8d:80, System Priority 32768, Key 12,
          Port 272, Port Priority 32768
          State Flags [Activity, Aggregation, Synchronization,
            Collecting, Distributing, Default]
        Partner Information TLV (0x02), length 20
          System 00:00:00:00:00:00, System Priority 0, Key 0, Port 0,
            Port Priority 0
          State Flags [none]
        Collector Information TLV (0x03), length 16
          Max Delay 32768
        Terminator TLV (0x00), length 0

O lado cisco:

interface GigabitEthernet1/0/15
 switchport trunk allowed vlan 100,101,102
 switchport mode trunk
 channel-group 12 mode active
end
interface Port-channel12
 switchport trunk allowed vlan 100,101,102
 switchport mode trunk
end

Eventualmente, o switch desiste e a interface entra no modo "autônomo". Se houver duas interfaces no grupo de canais, elas ambas entrarão no modo independente.

#show etherchannel 12 sum
Flags:  I - stand-alone

Group  Port-channel  Protocol    Ports
------+-------------+-----------+-----------
12     Po12(SD)        LACP      Gi1/0/15(I)

Eu acumulei meu cérebro nisso o dia todo. Eu rasguei e reconstruí a configuração da Cisco várias vezes. Se não fosse pelo tcpdump mostrando os pacotes LACPv1 que chegam na interface do Linux, eu estaria olhando para o lado da Cisco. Infelizmente, o kernel do Linux parece estar ignorando completamente os pacotes. Minha próxima parada é o código-fonte do kernel e, no pior dos casos, o kernel personalizado para diagnósticos. Espero que alguém tenha alguma visão sobre o driver de ligação e o que o faz funcionar corretamente.

    
por jjoganic 22.10.2016 / 15:09

2 respostas

4

Tente definir as próximas propriedades do LACP no lado do Linux para:

bond_downdelay 0
bond_updelay 0
bond_xmit_hash_policy layer3+4
bond_lacp_rate fast

No lado da Cisco, recrie o canal de porta e ative a taxa rápida de LACP:

port-channel load-balance src-dst-ip
interface GigabitEthernet1/0/15
    lacp rate fast
exit

Se o switch da Cisco não puder definir lacp rate fast , será necessário atualizar seu IOS.

A Cisco trabalha com o LACP pior que o Linux. Defina port-channel load-balance src-dst-port se o seu switch Cisco puder.

    
por 22.10.2016 / 20:14
4

O driver de vinculação não expõe nenhuma depuração de máquina de estado do LACP ao userspace, você precisaria conhecer o código e usar instrumentação de kernel como o SystemTap, ou escrever sua própria depuração em seu próprio módulo de vinculação e compilá-lo para seu kernel.

No entanto, o problema é que o driver de ligação acha que o escravo está inativo:

MII Status: down

Você diz que está confiante de que o escravo tem um link, por isso vamos ignorar um problema físico.

O bond / slave não está configurado corretamente e o slave está administrativamente inativo, ou o driver em uso não suporta netif_carrier() style link detection dentro do kernel e você precisa definir use_carrier=0 nas opções de seu módulo de ligação.

    
por 03.01.2017 / 12:47