Режим связывания Linux 802.3ad не активирован

На сервере под управлением Debian Stretch я настроил bond0 с режимом 802.3ad следующим образом:

auto bond0
iface bond0 inet manual
        slaves eth0 eth2
        bond_miimon 100
        bond_mode 802.3ad

Интерфейс bond0 работает и работает, но работает в режиме балансировки нагрузки (циклический перебор):

root@servir01:~# cat /proc/net/bonding/bond0
Ethernet Channel Bonding Driver: v3.7.1 (April 27, 2011)

Bonding Mode: load balancing (round-robin)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

Slave Interface: eth0
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 2
Permanent HW addr: e4:1f:13:65:f0:c4
Slave queue ID: 0

Slave Interface: eth2
MII Status: up
Speed: 1000 Mbps
Duplex: full
Link Failure Count: 2
Permanent HW addr: e4:1f:13:36:a3:ac
Slave queue ID: 0

На коммутаторе LAG правильно создан с включенным LACP, и у него оба порта включены и работают:

[ Статус LAG [1

Эта же машина имеет другой интерфейс связи (bond1 на интерфейсах eth1 и eth3), настроенный таким же образом, подключенный к тем же коммутаторам, и LACP работает хорошо:

Bonding Mode: IEEE 802.3ad Dynamic link aggregation
Transmit Hash Policy: layer2 (0)
MII Status: up
MII Polling Interval (ms): 100
Up Delay (ms): 0
Down Delay (ms): 0

802.3ad info
LACP rate: slow
Min links: 0
Aggregator selection policy (ad_select): stable
System priority: 65535
System MAC address: e4:1f:13:65:f0:c6
Active Aggregator Info:
    Aggregator ID: 1
    Number of ports: 2
    Actor Key: 9
    Partner Key: 1010

Почему интерфейс bond0 не хочет включать LACP? Где я не прав?

4 ответа

Решение

Я решил эту проблему, добавив следующее в конфигурацию связи в /etc/network/interfaces:

bond_xmit_hash_policy layer2+3

После добавления этой конфигурации и перезапуска сети все работает хорошо.

Старый вопрос, но так как он возникает довольно рано в поисках, и у меня была похожая настройка, с той же проблемой. Вот как я это сделал (используя ifenslave на Debian Stretch)...

/ И т.д. / сеть / интерфейсы...

    # The loopback network interface
    auto lo
    iface lo inet loopback

    # bond0 is the bonded NIC and can be used like any other normal NIC.
    # bond0 is configured using static addressing.
    auto bond0
    iface bond0 inet static
    address <your static address>
    gateway <your gateway>
    # bond0 uses standard IEEE 802.3ad LACP bonding protocol
    bond-mode 4
    bond-miimon 100
    bond-lacp-rate 0 (This is on a small NAS, so no rush)
    bond-slaves none

    # eth0 is manually configured, and enslaved to the "bond0" pseudo NIC
    allow_hotplug eth0
    auto eth0
    iface eth0 inet manual
    bond-master bond0

    # eth1 ditto, thus creating a 2-link bond.
    allow_hotplug eth1
    auto eth1
    iface eth1 inet manual
    bond-master bond0

В чем причина?

Ну, сетевые карты подойдут, водитель связи их схватит, затем сетевые карты понизятся, чтобы переконфигурировать, чтобы быть рабами, а водитель связи запаникует, потому что у него не было рабов, и побежал, как курица без головы (круговой робин)).

Теперь драйвер связи приходит, видит, что у него нет рабов, поэтому он сидит и ждет... Сетевые карты видят, что у них есть мастер, поэтому они идут и сообщают, получают свои адреса из bond0 и уходят на работу они все уходят.

Протестировано на debian 10 (после прочтения этой ветки и документации по связыванию debian)

config ниже (никакие другие файлы не редактируются - модули или что-то в этом роде)

auto enp4s0f2
allow-hotplug enp4s0f2
iface enp4s0f2 inet manual
        bond-master bond1
        bond-mode 4

auto enp4s0f3
allow-hotplug enp4s0f3
iface enp4s0f3 inet manual
        bond-master bond1
        bond-mode 4

auto bond1
iface bond1 inet static
        address 1.2.3.4
        netmask 255.255.255.0
        bond-mode 4
        bond-slaves none
        bond-miimon 100
        bond-lacp-rate 1
        bond-updelay 800
        bond-downdelay 400
        bond_xmit_hash_policy layer2+3    # optional, sets the bonding algorithm

какие новости:

  • интерфейсы подняты ДО соединения
  • режим связи указывается также на уровне интерфейса
  • У облигации нет рабов

Провели несколько дней после обновления Debian 10 buster (полного обновления) до Debian 11 Bullseye, поэтому хочу поделиться решением проблемы с привязкой.

После обновления Debian Linux существующая конфигурация магистрали больше не работает. Есть критические изменения, называемые ошибками:

А раньше на Debian 10 рабочая конфигурация Bond0 была такой:

      cat /etc/network/interfaces.d/bond0

auto enp9s0f0
iface enp9s0f0 inet manual
        bond-master bond0
        bond-mode 4

auto enp9s0f1
iface enp9s0f1 inet manual
        bond-master bond0
        bond-mode 4

auto bond0
iface bond0 inet static
        address 192.168.23.1
        network 192.168.23.0
        netmask 255.255.255.128

        bond-slaves none
        bond-miimon 100
        bond-lacp-rate 1         # 'fast' detection, every 1s, instead of 'slow', every 30s
#        bond-updelay 100        # optional, mostly for debugging
#        bond-downdelay 100      # optional, mostly for debugging
        bond-xmit-hash-policy layer2+3    # optional, sets the bonding algorithm

что привело к отсутствию настройки Bond0 или даже к таким ошибкам:

      RTNETLINK answers: Cannot assign requested address
run-parts: /etc/network/if-pre-up.d/ifenslave exited with return code 1
networking.service: Main process exited, code=exited, status=1/FAILURE

или

      journalctl -n -u networking

показываю строку ошибки

      No iface stanza found for master

где «строфа» — это так называемая конфигурация модуля, термин, используемый разработчиками.

Основная причина этого в том, что пакет подвергался большому рефакторингу, основная идея заключалась в том, чтобы удалить «строфу» из дочерних элементов, которые являются физическими интерфейсами (nic), и сохранить все это в одном месте, например, сам интерфейс связи .

Также даже вifenslaveв версии 1.22 осталась ошибка, ссылающаяся на несуществующую командуifstateв Debian 11. Простое и быстрое решение:

      sed -i 's/ifstate -l/ip link show dev/g' /etc/network/if-pre-up.d/ifenslave

Даже после исправления этого связывание не работает, это означает, что есть ошибки, из-за которых связывание не работает на Bullseye.

Просматривая код, я обнаружил, что изменение ключа заключалось не только в удаленииbond-modeиз дочернего элемента и вернуть его в конфигурацию интерфейса связи, как это было в ранние дни пакета, но также вернуться к раннему форматуbond-slaves.

Таким образом, рабочий файл конфигурации связывания Debian 11 Bullseye выглядит следующим образом:

      cat /etc/network/interfaces.d/bond0

auto enp9s0f0
iface enp9s0f0 inet manual
        bond-master bond0

auto enp9s0f1
iface enp9s0f1 inet manual
        bond-master bond0

auto bond0
iface bond0 inet static
        address 192.168.23.1
        network 192.168.23.0
        netmask 255.255.255.128

        bond-mode 4
        bond-slaves enp9s0f0 enp9s0f1
        bond-miimon 100
        bond-lacp-rate 1         # 'fast' detection, every 1s, instead of 'slow', every 30s
#        bond-updelay 100        # optional, mostly for debugging
#        bond-downdelay 100      # optional, mostly for debugging
        bond-xmit-hash-policy layer2+3    # optional, sets the bonding algorithm

Обновление 2022:

Недавно на одном из металлических серверов у меня возникла проблема: после обновления ядра и удаления старого ядра система перестает работать в сети. Короче говоря, может случиться так, что модуль связующего ядра не загружен, отсутствует или произошел сбой загрузки из-за перепутанной версии или ошибки initrd. Проверьте это с помощью:

      lsmod | grep bond
bonding               167936  0

Если его нет, то это и есть виновник проблемы. Попробуйте загрузить модуль вручнуюmodprobe bondingи проверьте, загружается ли он. Выясните, соответствует ли загруженная версия ядра тому, что должно быть.uname -rи проверьте, присутствует ли каталог модулей для этой версии.

Ссылка: https://www.kernel.org/doc/Documentation/networking/bonding.txt .

Другие вопросы по тегам