Есть ли у связующего драйвера Linux базовый административный или диагностический интерфейс для определения того, что происходит внутри?
Я уже много лет использую агрегацию каналов между Linux-системами и коммутаторами Cisco. Периодически я захожу в тупик при установке новых ящиков, где сторона Linux просто не отвечает на пакеты Cisco LACP. Я тщательно следую строгому набору инструкций для каждого сервера, но результаты кажутся разными.
Независимо от того, содержит ли связь одно ведомое устройство или восемь, tcpdump показывает пакеты LACP, поступающие от коммутатора на всех связанных интерфейсах, и никакие пакеты никогда не передаются обратно. Фактически, пакеты не передаются за период. rx_packets
для интерфейса показывает значительный трафик, но tx_packets
равно нулю. В журналах нет ничего интересного относительно MII или бондинга. Даже ошибок нет.
В настоящее время я имею дело с коробкой, в которой всего две платы. На данный момент у меня в облигации только eth1. Очевидно, это вырожденная конфигурация. Ситуация не меняется ни с eth0, ни с eth1 в облигации; это просто усложняет работу с машиной, когда сетевой стек полностью отключен. Я могу перенастроить его для обоих сетевых адаптеров, если это необходимо, и пройти через административный интерфейс (DRAC), но я не могу копировать и вставлять из коробки таким образом.
Некоторые предварительные мероприятия:
Это 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 полностью игнорирует пакеты. Моя следующая остановка - исходный код ядра и в худшем случае - кастомное ядро для диагностики. Надеюсь, у кого-то есть представление о драйвере связывания и о том, что заставляет его работать правильно.
Драйвер связывания не предоставляет отладку конечного автомата LACP в пользовательском пространстве, вам необходимо знать код и использовать инструменты ядра, такие как SystemTap, или написать собственную отладку в свой собственный модуль связывания и скомпилировать его для своего ядра.
Однако проблема в том, что драйвер связывания считает, что ведомое устройство не работает:
MII Status: down
Вы говорите, что уверены, что у ведомого есть связь, поэтому мы проигнорируем физическую проблему.
Либо связь / подчиненное устройство не настроено должным образом и подчиненное устройство отключено административно, либо используемый драйвер не поддерживает netif_carrier()
определение ссылки стиля внутри ядра, и вам необходимо установить use_carrier=0
в опциях вашего склеивающего модуля.
Попробуйте установить следующие свойства 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 может.