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

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

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

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

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

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

  • Я протестировал сетевые адаптеры, порты и кабели. Все работает, как ожидалось, когда интерфейсы не связаны.
  • Я перезагрузил и подтвердил, что модули загружаются правильно.
  • Я пробовал это с транкингом vlan и без него; это не имеет значения, так как агрегация каналов происходит ниже этой точки в стеке.
  • Коммутатор имеет рабочие транковые группы каналов, идущие к другим устройствам 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

The 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 полностью игнорирует пакеты. Моя следующая остановка - исходный код ядра и в худшем случае - кастомное ядро ​​для диагностики. С надеждой, кто-то имеет представление о драйвере связывания и о том, что заставляет его работать правильно.

7
задан 22 October 2016 в 16:09
2 ответа

Попробуйте установить следующие свойства 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 может.

4
ответ дан 2 December 2019 в 23:35

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

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

MII Status: down

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

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

.
4
ответ дан 2 December 2019 в 23:35

Теги

Похожие вопросы