Назад | Перейти на главную страницу

Связанные подчиненные интерфейсы не получают одинаковый идентификатор агрегатора на LACP

У меня есть ошибка на некоторых серверах, где LACP (802.3ad) не работает. У меня на всех серверах есть связующее устройство bond0 с двумя eth ведомые устройства и каждый интерфейс подключены к другому коммутатору, и оба коммутатора настроены с LACP.

Кажется, все в порядке, но сетевой инженер обнаружил, что какой-то MLAG (реализация Arista LACP) не работал, пока были включены физические устройства.

Когда я посмотрел на /proc/net/bonding/bond0 затронутых серверов, я обнаружил, что каждый интерфейс имеет разные Aggregator ID. На номинальных серверах Aggregator ID та же.

Проблема может быть воспроизведена путем выключения и включения порта на коммутаторе, после чего мы можем наблюдать, что, несмотря на то, что физическое соединение установлено, MLAG не работает. Ошибка присутствует в RHEL 6 и 7 (но не на всех серверах).

Конфигурация

#/etc/sysconfig/network-scripts/ifcfg-bond0
DEVICE=bond0
MACADDR=14:02:ec:44:e9:80
IPADDR=xxx.xxx.xxx.xxx
NETMASK=xxx.xxx.xxx.xxx
BONDING_OPTS="mode=802.3ad lacp_rate=slow xmit_hash_policy=layer3+4"
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no
PEERDNS=no

# /etc/sysconfig/network-scripts/ifcfg-eno49 (same for other interface)
HWADDR=14:02:ec:44:e9:80
MASTER=bond0
SLAVE=yes
BOOTPROTO=none
ONBOOT=yes
USERCTL=no
NM_CONTROLLED=no
PEERDNS=no

У нас есть обходной путь - установить и установить eth интерфейс на сервере - но это не идеально.

Чтобы проверить протокол LACP, я сделал

tcpdump -i eno49 -tt -vv -nnn ether host 01:80:c2:00:00:02

Я могу видеть пакет каждые 30 секунд на одном интерфейсе, но на другом я вижу пакет каждые 1 секунду, поскольку он пытался установить сеанс LACP.

Есть ли у вас способ найти и исправить это?

(извините, если я не использовал правильный термин для сети, я не очень разбираюсь в LACP)

Спасибо

Изучив документацию и проведя несколько тестов, я обнаружил, что когда сервер использует связывание, вам нужно принудительно отслеживать сетевые ссылки с помощью miimon параметр из bonding модуль.

Глядя на /proc/net/bonding/bond0 Я должен был увидеть одно из устройств со статусом MII down где на самом деле это было на уровне ссылок.

https://access.redhat.com/articles/172483#Link_Monitoring_Modes утверждает, что:

Очень важно, чтобы режим мониторинга канала, либо miimon или arp_interval и arp_ip_target параметры должны быть указаны. Настройка связи без режима мониторинга связи не является допустимым использованием драйвера связывания.

Итак, чтобы сообщить об этом в ifcfg-bond0 файл, который вы передаете в BONDING_OPTS параметры

#/etc/sysconfig/network-scripts/ifcfg-bond0
...
BONDING_OPTS="mode=802.3ad lacp_rate=slow xmit_hash_policy=layer3+4 miimon=100"
...

поэтому он заставляет опрашивать ссылки каждые 100 мс.

Перезапустите сетевую службу, чтобы изменения вступили в силу.

Я думаю, вам следует настроить канал виртуального порта на своих коммутаторах