Режим связывания 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, и у него оба порта включены и работают:
[
Эта же машина имеет другой интерфейс связи (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 существующая конфигурация магистрали больше не работает. Есть критические изменения, называемые ошибками:
- https://www.debian.org/releases/bullseye/amd64/release-notes/ch-information.html
- https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=990428
- https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=968368
А раньше на 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 .