Вопрос: Как диагностировать проблемы LACP Linux на уровне ядра?


Существует ли базовый административный или диагностический интерфейс для драйвера привязки Linux для определения того, что происходит внутри страны?

Я уже много лет использовал агрегирование ссылок между Linux-пакетами и коммутаторами Cisco. Периодически я сталкиваюсь с тупиком при создании новых ящиков, где сторона Linux просто не отвечает на пакеты Cisco LACP. Я тщательно соблюдаю строгий набор инструкций для каждого сервера, но результаты кажутся разными.

Независимо от того, содержит ли связь один ведомый или восемь, tcpdump показывает пакеты LACP, поступающие от коммутатора на всех связанных интерфейсах, и никакие пакеты никогда не передаются обратно. Фактически, никакие пакеты не передают период. rx_packets для интерфейса отображается значительный трафик, но tx_packets равна нулю. В журналах, касающихся MII или склеивания, нет ничего интересного. Ошибок нет.

В настоящее время я имею дело с коробкой, в которой есть только два члена. На данный момент у меня есть только eth1 в облигации. Очевидно, что это вырожденная конфигурация. Ситуация не меняется как с eth0, так и с eth1 в облигации; это просто усложняет работу с машиной, когда сетевой стек полностью отключен. Я могу переконфигурировать его для обоих nics, если это необходимо, и пройти через административный интерфейс (DRAC), но я не могу скопировать-вставить из окна таким образом.

Некоторые предварительные условия:

  • Я тестировал ники, порты и кабели. Все работает так, как ожидалось, когда интерфейсы не связаны.
  • Я перезагрузился и подтвердил, что модули загружаются должным образом.
  • Я пробовал это с помощью транса и без него; это не имеет значения, поскольку агрегирование ссылок происходит ниже этой точки в стеке.
  • Коммутатор работает, транкинговые группы каналов идут в другие ящики Linux. Конфигурации более или менее идентичны, даже если дистрибутивы, ядра и аппаратные средства ящиков Linux не являются.

Это debian 8.6, загруженный сегодня.

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

Сокращенная конфигурация:

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

Некоторое состояние:

# 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

Входящая запись tcpdump на eth1 из коммутатора:

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

Сторона 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

В конце концов, коммутатор выходит, и интерфейс переходит в «автономный» режим. Если в группе каналов есть два интерфейса, они и то и другое перейти в автономный режим.

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

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

Я весь день ломал голову. Я несколько раз вырвал и перестроил конфигурацию Cisco. Если бы не tcpdump, показывающий пакеты LACPv1, прибывающие на интерфейс Linux, я бы посмотрел на сторону Cisco. Увы, ядро ​​Linux, похоже, полностью игнорирует пакеты. Моя следующая остановка - исходный код ядра и наихудший случай, настраиваемое ядро ​​для диагностики. Надеюсь, у кого-то есть некоторое представление о драйвере скрепления и о том, что заставляет его работать правильно.


5
2017-10-22 13:09


Источник


Я нашел ответ на этот вопрос, который неочевиден. Раздел конфигурации сети показывает «руководство» для связи. Это потому, что я обычно размещаю мост поверх него для виртуальных гостей для доступа к сети. Однако есть проблема. Стойка ДОЛЖНА иметь IP-адрес, иначе он не будет работать, поэтому настройка должна быть установлена ​​как «статическая», а не «ручная». - jjoganic


Ответы:


Попробуйте установить следующие свойства LACP на стороне Linux:

bond_downdelay 0
bond_updelay 0
bond_xmit_hash_policy layer3+4
bond_lacp_rate fast

На стороне Cisco воссоздайте порт-канал и включите быстрый темп LACP:

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

Если коммутатор Cisco не может установить lacp rate fast, то вам нужно обновить его IOS.

Cisco работает с LACP хуже, чем Linux. Задавать port-channel load-balance src-dst-port если ваш коммутатор Cisco может.


3
2017-10-22 18:14



Спасибо за ответ; мои технические парни обновили прошивку до последней версии 15.x. В этой версии опция быстрой скорости лака недоступна. Они обновят его до 16.x сегодня. - jjoganic
Начиная с 15.2 (4) E, Cisco 3750-X поддерживает скорость лака быстро. Попробуйте использовать последнюю версию. - Mikhail Khirgiy


Драйвер скрепления не обнаруживает отладки конечного автомата LACP в пользовательском пространстве, вам нужно знать код и использовать инструменты ядра, такие как SystemTap, или написать собственную отладку в свой собственный модуль склеивания и скомпилировать его для вашего ядра.

Однако проблема заключается в том, что драйвер привязки считает, что подчиненный не работает:

MII Status: down

Вы говорите, что уверены, что у раба есть ссылка, поэтому мы проигнорируем физическую проблему.

Либо связь / ведомый не настроена должным образом, а подчиненный административно вниз, или используемый драйвер не поддерживает netif_carrier() в ядре, и вам нужно установить use_carrier=1 в вариантах вашего соединительного модуля.


2
2018-01-03 11:47