LACP: NX-OS, IOS, Solaris, FreeBSD

Задача статьи: описать читателю возможности протокола и произвести настройку агрегации каналов передачи данных между устройствами на базе операционных систем Cisco NX-OS, Cisco IOS, Oracle Solaris и FreeBSD.

1. Введение в технологию
Link_aggregation
Зачем всё это надо?
Представьте два любых сетевых устройства и две ситуации происходящие между ними:

  • устройства подключены между собой одной физической линией передачи данных, в результате чего отказ этой линии приводит к невозможности дальнейшей передачи данных;
  • устройства подключены между собой несколькими физическими линиями передачи данных, тогда в случае L2-портов один из них будет заблокирован протоколом STP, а в случае L3-портов необходимо использовать разные подсети на линиях и одним из десятков способов настроить multipathing;

Всё это довольно накладно, требует дополнительной настройки и усложняет логику сети.

К счастью, существует способ объединить ряд физических каналов передачи данных в один логический и это весьма просто как на L2, так и на L3 портах.

Возможность сгруппировать физические каналы влияет на такие важные параметры как:

  • отказоустойчивость (fault tolerance) – при отказе одного физического канала в  составе логического, передача данных продолжится по оставшимся активным каналам;
  • пропускная способность (bandwidth) – пропускная способность логического канала есть сумма пропускной способности всех физических каналов в его составе;
  • масштабирование (scalability) и возврат инвестиций (return of investment):  использование дублирующих каналов передачи данных в коммутируемых сетях без их блокирования протоколом STP, а так же возможность добавления новых каналов передачи, без прерывания работы и изменения логики;

В терминах Cisco агрегации каналов/портов называется Etherchannel и представлена тремя вариантами исполнения: статическая агрегация, PAgP (Port Aggregation Protocol) и LACP (Link Aggregation Control Protocol).

2. LACP
Несмотря на то что статическая агрегация наиболее простой и быстрый способ, ошибки в его настройке могут привести к образованию петель. А в сравнении с PAgP у LACP есть один большой плюс – он не является Cisco proprietary, т.е. стандартизирован (802.3ad) и готов к использованию на оборудовании всех производителей. Не удивительно, что основная часть сетевых администраторов предпочитают именно LACP.

2.1. Описание
Протокол позволяет организовать несколько физических портов передачи данных в один логический канал передачи, при это обе стороны должны быть настроены для согласования условий, используя специальные LACP-пакеты.
Возможность подобного логического объединения обеспечивается отправкой специальных кадров (LACPDU) через всё каналы передачи данных, на которых был настроено использование протокола. Если на другом конце канал передачи обнаружен включеный LACP, то он так же начнёт использоваться для отправки кадров устройству на том конце. В системе группа таких портов будет представлена в виде логического интерфейса, в случае Cisco IOS они именуются port-channel.

2.2. Режим работы
Как это принято со многими другими протоколами, LACP может быть настроен в двух режимах: активный(active) и пассивный(passive). В активном режиме сразу после настройки протокола по настроенным портам начинают передаваться кадры LACP в поисках LACP-соседа на другой стороне. Тогда как в пассивном режиме, сразу после настройки никаких кадров согласования не посылает и настроеное устройство терпеливо ждёт когда active-сосед с другой стороны его найдёт. До тех самых пор каналы будут жить как отдельные и важно, так как если мы настраиваем агрегацию на эксплуатируемых узлах, после установки passive-режима не произойдёт разрыва, как было бы в случае установки режима active и безуспешного поиска LACP-соседа. Именно по этой причине в данной статье, настройка одной, первой стороны будет в режиме passive, а второй в режиме active.

2.3. Policy
После группировки портов мы можем настроить такую вещь как Policy – политика, определяющая как устройство имеющее настроеный логический канал будет выполнять балансировку нагрузки путём распределения исходящего трафика по физическим каналам. Выбрать можно из следующего списка:

  • L2 – использовать балансировку согласно MAC-адресам источника (SRC MAC) и назначения (DST MAC) пакета;
  • L3 – использовать балансировку согласно IP-адресам  источника (SRC IP) и назначения (DST IP) пакета;
  • L4 – использовать балансировку согласно информации более высокого уровня имеющейся в пакете. Для TCP и UDP это порты источника (SRC PORT) и назначения (DST PORT).

Каждый из них позволяет выполнять балансировку наиболее эффективно в каждом из конкретных случаев. Принято считать, что чем высокоуровней политика применяется тем накладнее это для устройства, но на практике проблем с производительностью не отмечено.
Допускается использовать как один типа политику, так и комбинированные варианты, например L2+L3 одновременно.

2.4. Ограничения
В реализации протокола существует несколько требований и ограничений по использованию, которые нельзя не брать в расчёт:

  • общее количество физических каналов в логической группе не может быть больше 16, при это не более 8 их них могут находится в активном состоянии, в то время как остальные будут находиться в режиме standby, т.е. автоматически заменять собой любой из отказавших каналов передачи данных;
  • пропускная способность (тип интерфейса) всех портов передачи данных должна быть идентичной, т.е. нельзя сгруппировать 4 100Mbit и 4 1Gbit каналов передачи данных, но можно сгруппировать 6 1Gbit портов;
  • все физические порты логического канала должны принадлежать одному логическому устройству. Именно логическому, а не физическому, потому что существует ряд технологий позволяющих разделить один логический канал на более чем два устройства (из самых свежих – LAG, vPC).
  • все порты должны иметь идентичный режим дуплекса(duplex mode), Native VLAN, диапозон разрешённых VLAN (switchport access vlan).

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

2.5. Реализация в операционной системе FreeBSD
В операционной системе FreeBSD агрегация выполняется с помощью создания специального интерфейса lagg через  ifconfig.

2.6. Реализация в операционной системе Solaris
В операционной системе Solaris агрегация выполняется с помощью утилиты dladm.

3. Оформление задачи

3.1. Схема сети

 

Коммутатор дата-центра:

  • модель устройства:  Cisco Nexus 5548P
  • имя устройства: dcsw0-n5k
  • операционная система: Cisco NX-OS 5.0(3)N1(1c)
  • модуль расширения: Cisco Nexus 2224TP
  • имя модуля на схеме: n2k
  • идентификатор модуля в системе: FEX100
  • политика балансировки: L4
  • режим работы LACP: passive

Коммутатор распределения дата-центра:

  • модель устройства: Cisco 3750X-24T-S
  • имя устройства: dsw0-3750
  • операционная система: Cisco IOS Universal IP Services 15.0(1)SE
  • политика балансировки: L2
  • режим работы LACP: passive

Сервер #1:

  • имя устройства: srv-fb0
  • операционная система: FreeBSD 8.2-RELEASE
  • режим работы LACP: active

Сервер #2:

  • имя устройства: srv-sl0
  • операционная система:  Solaris 10 update 8/11
  • политика балансировки: L2+L3
  • режим работы LACP: active

3.2. Определение последовательности исполнения
Согласно схеме сети и нумерации на ней, агрегацию будет выполняться в следующей последовательности:

4. Конфигурация
Подключение fabric extender описано ранее и согласно информации выше порты нашего dcsw0-n5k к которому через FEX подключаются все прочие, будут начинаться с Ethernet 100.
4.1. dcsw0-n5k <-> srv-fb0

Физическая схема подключения


4.1.1 dcsw0-n5k

Перед настройкой LACP следует активировать поддержку протокола:

Первым делом установим режим балансировки, который по умолчанию L2 (source-dest-mac).
Доступны следующие:

но мы уже решили выше, что будем использовать L4:
Проверим изменения:
Переместимся в группу портов и активируем группу:

Нас оповещает о том что логический интерфейс port-channel 1 был успешно создан и теперь, если необходимо изменить настройки на любом из исходных физических портов следует использовать логический интерфейс.
Однако, спустя несколько секунд появляются следующие сообщения:

Воспользуемся суммарной информацией о имеющихся агрегациях, чтобы понять что произошло

port-channel находится в состоянии SU – switched down
в логической группе задействованы два порта и они находятся в состоянии I – individual, т.е. работают независимо друг от друга. Это объясняется тем, что на другом конце не обнаружено устройство с настроеным LACP и потому согласование не может быть успешным, но благодаря использованию режима passive связность узлов не будет нарушена.

Назначим логическому Port-channel интерфейсу IP-адрес, для дальнейшей проверки L3-связности устройств.

На этом устройстве пока всё.

4.1.2 srv-fb0

Перед началом настройки следует настроить автоматическую загрузку драйвера агрегации

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

Подгрузим модуль вручную

Убедимся, что оба физических порта находятся в активном состоянии

Создадим логический интерфейс

и укажем его свойства: протокол агрегации LACP, агрегируемые порты em0 и em1, IP-адрес 1.1.1.2/30

К сожалению, реализацию LACP в FreeBSD нельзя назвать эталонной и в доказательство этого блок BUGS из man lagg

BUGS
     There is no way to configure LACP administrative variables, including
     system and port priorities.  The current implementation always performs
     active-mode LACP and uses 0x8000 as system and port priorities.

Т.е. мы не можем выбирать режим работы LACP и так же не имеем возможности указать LACP policy.

Проверим корректность настройки

Интерфейс поднят, ему назначен IP-адрес, инициализирован протокол агрегации LACP, в рамках которого задействовано две сетевых карты.

Обеспечим сохранность конфигурации после перезагрузки, поместив следующий блок в /etc/rc.conf

4.1.3 Проверим L2-связность

Port-channel 1 в состоянии SU – switched up, а каждый из портов в состоянии P – Up in port-channel (members). Значит LACP-согласование состоялось и функционирует правильно.

4.1.4 L3-cвязность

Похоже работает как и ожидалось.

4.2. dsw0-3750 <-> srv-sl0

Физическая схема подключения

4.2.1 dsw0-3750

Сразу приступим к настройке

выберем группу интерфейсов согласно схеме

протоколом агрегации выбираем LACP

порядковый номер группы установим в 1, режим работы – пассивный

dsw0-3750(config-if-range)# channel-group 1 mode passive

Проверим настройку

Назначим Port-channel интерфейсу IP-адрес для будущей проверки L3-связности устройств

4.2.2 srv-sl0
По сравнению с FreeBSD реализацию LACP, да и вообще технологии агрегации в Solaris выполнена на гораздо более высоком уровнеможно выбрать как режим работы, так и политику, при этом последнюю можно группировать. По умолчанию используется политика L4, но в man dladm написано следующее:

Note that, as the default, specification of L4 is superfluous.

Т.е. L4 суперизбыточно, что для современного оборудования конечно же не является правой, но мы, как и договорились выше, будем использовать L2+L3 c режимом active.

В отличие от FreeBSD интерфейсы обязательно должны быть отключены во время настройки иначе получим ошибку

dladm: create operation failed: Device busy (invalid interface name)

Имена интерфейсов можно узнать через тот же dladm:

отключим их:

Создадим логический порт агрегации с номером 1, из интерфейсов igb0 и igb1, используя протокол LACP в режиме active, политикой балансировки L3:

Скорее всего, вы получите следующее сообщение

Это связано с тем что интерфейсы, сразу после инициализации заняты демоном DHCP, который вы не отключили в процессе конфигурации системы. Сделаем это сейчас.

либо, если вы всё-таки его используете, достаточно убить его на время настройки

Теперь повторим команду агрегации и проверим корректность настройки

Интерфейс агрегации создан, но он не инициализирован.
Инициализируем, поднимем и назначим IP-адрес

Проверим агрегацию

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

Интерфейс есть, находится в состоянии UP, IP-адрес и маска присвоены, MAC-адрес принадлежит igb0.

Убедится, что балансировка данных выполняется и насколько успешно можно используя следующую команду

Настроим сохранение конфигурации после перезагрузки.
Параметры агрегации автоматически сохранились в файле /etc/aggregation.conf

Необходимо лишь сохранить настройку установленого IP-адреса

4.2.3 Проверим L2-связность устройств

Port-channel 1 в состоянии SU – switched up, а каждый из портов в состоянии P – bundled in port-channel. Значит LACP-согласование состоялось и функционирует правильно.

4.2.4. Проверим L3-связность устройств

Работает.

4.3. dcsw0-n5k <-> dsw0-3750

Последний блок, который благодаря уже приобретённым навыкам настройки LACP пройдёт гораздо быстрее.

Физическая схема подключения

4.3.1. dcsw0-n5k

4.3.2. dsw0-3750

4.3.3 Проверка L2-связности

5. Priority
Помимо функционала описаного в данной статье, в особо сложных конфигурация может понадобиться дополнительная настройка LACP, используя системный приоритет и приоритет порта.

Системный приоритет позволяет указать кто из LACP-соседей принимает решение, о переводе standby-портов в состояние active, когда появляется вакантное место в активной восьмёрке. Мнение стороны с меньшим приоритетом игнорируется. Значение системного приоритета выставляется глобально, для всего устройства. Для Cisco-устройств приоритет может быть числом от 1 до 65535. Значение по умолчанию 32768. Чем меньше числовое значение, тем больше шансов, что именно это устройство будет принимать решения.
Итоговое значение называется LACP system ID и складывается из системного приоритета и MAC-адреса устройства.
Настройка выполняется следующей последовательностью команд

Приоритет порта позволяет определить устройству с наибольшим системный приоритетом какие конкретно standby-порты сделать активным. Приоритет порта выставляется отдельно для каждого из портов в связке. Для Cisco-устройств приоритет может быть числом от 1 до 65535. Значение по умолчанию 32768. Чем меньше числовое значение, тем больше шансов, что именно этот порт заменит отказавший active.
Настройка выполняется следующей последовательностью команд

6. Debug

Команды которые могут быть использованы для проверки корректного функционирования и поиска неисправностей

Cisco IOS

  • show etherchannel detail
  • show etherchannel protocol
  • show etherchannel port-channel №
  • show etherchannel summary
  • show interface port-channel
  • show lacp neighbor
  • show lacp sys-id

Cisco NX-OS

  • show port-channel database
  • show port-channel internal info interface port-channel №
  • show port-channel traffic
  • show port-channel summary
  • show lacp neighbor
  • show lacp system-identifier

Solaris

  • ifconfig aggr№
  • dladm show-link
  • dladm show-aggr
  • dladm show-aggr -s

FreeBSD

  • ifconfig lagg№

 

SHARE: Tweet about this on TwitterShare on FacebookShare on VKShare on LinkedInShare on Google+Email this to someone
  • какнада. чотко.

  • ChillyWilly

    чотко.умеете.могёте.