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