Агрегирование каналов (link aggregation) – объединение нескольких физических каналов передачи данных в сетях Ethernet в один логический, позволяющий увеличить пропускную способность и повысить надёжность. У разных производителей эта технология называется по-разному: Eth-Trunk, Port Channel, Bonding. Реализацию агрегированной группы отражает термин LAG – Link Aggregation Group (группа агрегированных каналов). То есть LAG – это частный случай агрегации каналов, реализованный по стандарту. Агрегация каналов – более общий термин, описывающий сам процесс объединения линков. Поэтому, далее для упрощения и сокращения в представленной ниже схеме и описании применяется термин LAG.
Это описание базируется на других инструкциях, которые можно посмотреть по ссылкам ниже.
Роутер GW1 настроен по этой инструкции.
Коммутаторы CSW1-2 объединены в стек по этой инструкции.
VLAN между коммутаторами CSW и ASW настроен по этой инструкции.
Дополнительные настройки CSW и ASW тут и тут.
GW1.
Mikrotik CCR2004-16G-2S+ с RouterOS 7.17 является главным роутером в сети. Он создает сегментацию, IP-адресацию, VLAN и много чего еще. В данном случае необходимо настроить подключение нижестоящего коммутатора через агрегированный интерфейс для повышения надежности. В подключении участвуют два порта ether15 и ether16. Порты настроены в роли транков. Настройки выполняются через WinBox.
Создаем bonding-интерфейс.
На вкладке General указываем любое понятное имя. Переходим на вкладку Bonding.
Добавляем запланированные к объединению интерфейсы. Эти интерфейсы не должны быть объединены в мост (Bridge). Если они там, то их нужно удалить оттуда.
Slaves: ether15 и ether16 – два интерфейса которые будут объединены в один логический.
Mode: 802.3ad – это режим предполагающий использование протокола LACP (Link Aggregation Control Protocol) – протокол управления агрегацией каналов. Он предназначен для динамического объединения нескольких физических линков в один логический.
Transmit Hash Policy: политика балансировки трафика через выбранные интерфейсы.
layer-2-and-3 – это наиболее универсальный и сбалансированный режим, который учитывает и MAC-адреса, и IP-адреса, что позволяет более равномерно распределять трафик по соединениям.
Сохраняем настройку на кнопку ОК.
Через CLI:
1 2 |
/interface bonding add mode=802.3ad name=bonding1 slaves=ether15,ether16 transmit-hash-policy=layer-2-and-3 |
Другие настройки, которые по-умолчанию подходят и не изменялись.
Link Monitoring:
mii – Media Independent Interface – это аппаратный механизм, с помощью которого сетевые устройства могут проверять состояние линка на физическом уровне. MikroTik проверяет состояние каждого физического интерфейса, входящего в bonding-группу, с помощью регулярных MII-запросов. Это делается для того, чтобы быстро обнаружить обрыв линка или другие аппаратные проблемы. Этот режим не требует настройки IP-адресов или маршрутов, выполняет проверку реального физического состояния порта. Поэтому он в данном случае предпочтителен.
arp мониторинг (Address Resolution Protocol – протокол разрешения адресов) – это альтернатива предыдущего режима. Он проверяет доступность IP-адреса на другом конце линка. Более полезен в случаях, когда линк остается физически активным, но не работает корректно.
Down Delay – задержка (в мс) перед исключением порта из bonding после его отключения.
Up Delay – задержка (в мс) перед включением порта обратно в bonding после восстановления.
LACP Rate – частота отправки LACP пакетов: 30 сек (аналог slow у других производителей) или 1сек (аналог fast). Чем меньше lacp-rate, тем быстрее выявляются проблемы, но возрастает нагрузка на CPU при большом количестве интерфейсов.
LACP User Key – идентификатор группы; порты с разными ключами не объединяются в один LAG даже если всё остальное совпадает (включая MAC, peer, параметры и т.д.). Это используется когда нужно настроить несколько отдельных LAG-групп к одному и тому же коммутатору.
MII Interval – интервал (в мс) проверки линка на физическом уровне в режиме link-monitoring=mii.
IEEE 802.3ad – это стандарт. Он описывает методику агрегации линков и включает в себя:
-логическую группировку линков;
-принципы балансировки нагрузки;
-и, самое главное – протокол LACP.
LACP (Link Aggregation Control Protocol) – это протокол, который входит в стандарт IEEE 802.3ad. Именно он занимается:
-автоматическим определением, какие порты можно объединить;
-обменом LACP-пакетами между устройствами;
-контролем состояния линков в агрегированной группе.
mode=802.3ad – это режим настройки в MikroTik, который включает использование протокола LACP, как это описано в стандарте IEEE 802.3ad.
То есть, когда мы в MikroTik выбираем mode=802.3ad, мы предполагаем создание агрегированного интерфейса по стандарту IEEE 802.3ad, а значит – с использованием LACP.
Существует несколько режимов: LACP Active (802.3ad), LACP Passive и Static.
Active – Инициирует установку LACP. Это динамическая агрегация, используется, когда вторая сторона тоже работает по LACP.
Passive – Ожидает и отвечает на запросы LACP. Устройство с режимом passive – не инициирует соединение, но может ответить на предложение агрегации.
Static – Статическая агрегация. Прямое объединение портов в агрегированную группу, без участия протокола LACP.
В MikroTik выборы этих режимов сделаны не явно. Роутер автоматически работает в режиме LACP Active (инициатор) в 802.3ad. То есть mode=802.3ad – это означает режим active.
Режима Passive в RouterOS вобще не наблюдается. Практика показывает что MikroTik всегда инициирует LACP-сессию. Это значит, что он всегда работает как active (когда выбран mode=802.3ad). В документации не указывается возможность выбора passive/active и параметр типо lacp-mode просто отсутствует.
Добавляем созданный интерфейс в мост.
1 2 |
/interface bridge port add bridge=Bridge-MAIN interface=bonding1 |
Если на указанные интерфейсы ранее были назначены VLAN ID, то эти интерфейсы нужно удалить из таблицы VLAN и добавить вместо них bonding1. Сделать это для каждого ID.
1 2 |
/interface bridge vlan add bridge=Bridge-MAIN tagged=Bridge-MAIN,sfp-sfpplus1,sfp-sfpplus2,bonding1 untagged=ether2 vlan-ids=10 |
bonding1 добавлен во всех ID как тегированный интерфейс потому что он подключается к CSW1-2 в роли транк-порта.
CSW1-2.
Huawei S6730 2 шт. Software:V200R022C00SPC500B352. Используются для расширения оптических портов. Коммутаторы объединены в стек, поэтому управляются из единой консоли или общего web-интерфейса. Подключаемся.
Переходим в настройку интерфейсов.
Выбираем нужные порты. В данном случае выбраны порты №1 в обоих слотах (коммутаторах). Активируем агрегацию соединений и другие настройки.
Load balancing mode: src-dst-ip – Балансировка по IP-адресам источника и получателя. Подходит для работы с Микротик transmit-hash-policy=layer-2-and-3. Можно поэкспериментировать и с другими вариантами. Если нет сегментации сети и множественных делений по IP-адресам, можно попробовать балансировку по MAC-адресам src-dst-mac.
Eth-Trunk: 1 – идентификатор логического интерфейса агрегации (LAG ID). Используется в командах и для назначения физических портов. Доступны значения от 0 до 127.
Eth—Trunk Mode: Static LACP – агрегация с использованием протокола LACP. Подходит для работы с Микротик mode=802.3ad.
manual load-balance – это для статической агрегации без LACP (подходит для других балансеров, например balance-xor, но не для 802.3ad).
VLAN конфигурацию нужно повторить т.к. при выборе двух портов она стирается.
После применения настроек на портах появятся фиолетовые кружки с указанием номера логического интерфейса.
Через CLI.
Переходим в режим конфигурации устройства (system view mode)
1 |
system-view |
Применить настройку на порт, в котором уже есть какие-то настройки не получится, система не пропустит. Нужно установить default-конфигурацию порта.
Просмотр конфигурации (можно ее сохранить на всякий случай).
1 |
display current-configuration interface XGigabitEthernet0/0/1 |
Очистка текущей конфигурации.
1 2 |
clear configuration interface XGigabitEthernet0/0/1 clear configuration interface XGigabitEthernet1/0/1 |
Создаем Eth-Trunk1 с LACP и всеми необходимыми VLAN ID.
1 2 3 4 5 6 |
interface Eth-Trunk1 mode lacp load-balance src-dst-ip port link-type trunk port trunk allow-pass vlan 10 20 30 40 50 60 100 1000 quit |
Добавляем физические порты в Eth-Trunk1
1 2 3 4 |
interface XGigabitEthernet0/0/1 eth-trunk 1 undo shutdown quit |
1 2 3 4 |
interface XGigabitEthernet1/0/1 eth-trunk 1 undo shutdown quit |
Проверяем какая получилась конфигурация.
1 |
display current-configuration interface Eth-Trunk1 |
Проверяем статус.
1 |
display eth-trunk 1 |
В выводе есть интересный параметр: System Priority: 32768.
System Priority – это числовое значение (от 1 до 65535), которое участвует в выборе ведущего (активного) устройства в LACP-соединении.
Когда в LACP между двумя устройствами (например, MikroTik и Huawei) создаётся LAG, они обмениваются LACPDU и «договариваются» кто будет главным (системой-инициатором) в агрегации, какие порты использовать, как управлять состоянием агрегированных линков. Приоритет в этом решении определяется на основе: System Priority и System ID (MAC-адрес устройства). Устройство с меньшим System Priority выигрывает. Если приоритет одинаков, побеждает то, у кого меньший MAC-адрес между двумя устройствами
Чтоб узнать кто главный в этой системе, нужно проверить System Priority у Микротик.
1 |
/interface bonding monitor [find] |
Вывод команды.
1 |
lacp-system-priority: 65535 |
Это значение вобщемто отображается в выводе команду у Huawei в разделе Partner. Вывод показывает, что у роутера максимальное значение, т.е. худшее в данной ситуации. Главным является коммутатор Huawei. На текущий момент (в RouterOS 7.17) изменить lacp-system-priority вручную нельзя.
Аналогичными действиями добавляются агрегированные порты для нижестоящих коммутаторов доступа ASW.
ASW.
Переходим к коммутаторам доступа BDCOM S2900 (прошивка 2.2.0F Build 128575). Использование LAG в этой части проекта четко не регламентировано и в качестве альтернативы можно использовать и использовался протокол RSTP. Однако, в процессе эксплуатации, замечена нестабильность в работе этого протокола на коммутаторах BDCOM. Это же подтвердила тех поддержка и предложила перейти на LAG (или более детально настроить RSTP). Настроим агрегацию каналов. RSTP рассмотрен тут.
Переходим в настройку агрегации каналов. У данного производителя она выполняется в меню Port Channel.
Выбираем группу, режим и нужные порты. Подтверждаем на кнопку Apply.
При подключении в интерфейс через выбранные порты произойдет дисконнект, поэтому настраивать нужно через какие-то другие порты.
В меню есть три режима работы формирования канала: lacp active, lacp passive и static. Разберемся с ними.
static – это прямое объединение портов в агрегированную группу, без протокола LACP. Никакой проверки доступности или согласования с другой стороной не происходит. Если одна сторона в static, а вторая в LACP – агрегация не заработает. Этот режим в данном случае не подходит.
active – активно инициирует LACP.
passive – ждёт инициативы от другой стороны.
Если обе стороны passive – агрегация не состоится. Поэтому для надежности выбираем режим lacp active.
Переходим на соседнюю вкладку. Тут настраивается режим балансировки трафика между портами. Это глобальная настройка для данного коммутатора.
Балансировку рекомендуется настраивать одинаково на двух сторона для предсказуемости и симметрии. Иначе может возникнуть неравномерная загрузка каналов. Хотя работает оно и при разных настройках, потому что каждая сторона принимает независимо от настроек другой стороны. Отправитель трафика решает, по какому физическому линку отправлять кадр. Это решение основывается на хеш-функции: IP, MAC, портов и т.д. Принимающая сторона просто принимает кадр – она не должна знать, как его распределяли.
Выбирать тип нужно в зависимости от преобладающего трафика. Если неизвестно какого трафика больше, то наиболее универсальные варианты BOTH MAC и BOTH IP. Это режимы аналогичные более привычным названиям src-dst-mac и src-dst-ip. Т.е. балансировка по сочетанию MAC-адреса источника и назначения или IP-адреса источника и назначения.
Переводим созданную группу в режим транка. Переходим в настройку VLAN.
Редактируем группу P1.
На порты tg0/1 tg0/2 таким же способом назначаем транк.
Настройка через CLI.
Создаем агрегированный интерфейс (группу) с номером 1 (в GUI это называется P1) и переводим его в режим транка.
1 2 3 4 5 |
ena conf interface port-aggregator 1 switchport mode trunk exit |
Выбираем режим балансировки по MAC-адресу.
1 |
aggregator-group load-balance both-ip |
Добавляем в созданный интерфейс два порта. Можно сразу одной командой или по очереди.
1 2 3 4 |
interface range tg0/1-2 switchport mode trunk aggregator-group 1 mode lacp exit |
Отключаем STP на созданном интерфейсе P1.
Нужно оставить что-то одно: STP или LAG. Вместе они могут мешать друг другу.
Через CLI.
1 2 3 |
interface port-aggregator 1 no spanning-tree exit |
Сохраняем.
1 2 |
exit write all |
Просмотр состояния агрегированного интерфейса.
1 |
show interface port-aggregator 1 |
Или состояние всей группы.
1 |
show aggregator-group brief |
Вывод команды выглядит так.
В результате проделанной работы все коммутаторы соединились друг с другом через агрегированные интерфейсы. Повысилась надежность системы. В процессе настроек некоторые трудности возникали с оборудованием BDCOM. Информация будет дополнена после нескольких месяцев эксплуатации.
Дополнение.
Схема применима в разных ситуациях, например, если в одном РШ расположены два коммутатора. Любой проектировщик ЛВС подумает, что при таком соединении можно сэкономить на двух дополнительных волокнах оптики и двух SFP-модулях. Мысли правильные, но только не для моделей BDCOM S2900. Рассмотрим, почему такую схему не желательно использовать.
LAG – это логический интерфейс, который объединяет физические порты в одну связку, ожидает, что каждый порт в группе ведёт к одному и тому же логическому соседу. Huawei «думает», что у него два линка ведут к одному коммутатору. А на самом деле – это два разных коммутатора BDCOM, которые соединены между собой обычным способом. Это допустимая схема, называется «multi-chassis LAG» (M-LAG), но поддерживается она только на оборудовании, где коммутаторы управляются как единое логическое устройство. Т.е. коммутаторы BDCOM должны соединятся друг с другом в стек или в M-LAG по определенной технологии. К сожалению никаких подобных технологий в модели S2900 не предусмотрено.
Что же будет если два BDCOM соединить между собой обычным транком?
Схема заработает. Трафик будет ходит следующим образом. Huawei отправляет кадр в Eth-Trunk, выбирается, например, порт xg0/0/16 (по хэш политике), далее кадр попадает на ASW1 (BDCOM1) . Если нужный MAC/VLAN находится на ASW2 (BDCOM2), а не на BDCOM1, трафик пойдёт через tg0/1 на BDCOM2. И наоборот. То есть BDCOM1 и BDCOM2 совместно «эмулируют» единый логический коммутатор за счёт связки портов tg0/1. Huawei ничего не подозревает. Он видит два порта в Eth-Trunk и получает LACP-ответы от разных MAC-адресов. Он думает, что ему отвечает одно устройство (соединенное в стек).
Теперь допустим что произошла аварийная ситуация – обрыв tg0/1. Huawei продолжает считать, что всё в порядке, потому что для него Eth-Trunk со статусом UP. Он может отправить кадр в сторону BDCOM1, а MAC-адрес назначения (например, какой-нибудь ПК пользователя) уже находится на BDCOM2. BDCOM1 не сможет доставить этот кадр в BDCOM2, потому что линк между ними в обрыве. Кадр теряется. Как результат необъяснимые лаги и обрывы связи между пользователями сети. Очень сложно диагностируемая проблема, т.к. вроде бы всё работает, но не у всех.
Можно придумать какие-нибудь механизмы мониторинга обрыва, скрипты, или добавить STP, чтоб он отключал один порт из группы LAG. Короче это уже получается нагромождение настроек и лучше этим не заниматься. В данной компоновке использование LAG не желательно. Вместо этого нужно использовать STP.