LACP - обьединение сетевых интерфейсов с использованием Link Aggregation Control Protocol

Версия для печатиОтправить другуPDF version

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

Примечание. Когда-то в построенном статическом ether-channel вышел из строя один из линков. Все было очень банально - вышел из строя один из медиаконвертеров. Ну и по закону упавшего бутерброда - на выходных, причем на стороне транспортного провайдера. Появились следующие баги - часть ресурсов не отвечает. Отловил только одну закономерность - пинговались только IP-адреса, в которых 4 байт был непарным. Долго думал, как это возможно. Но диагностировать проблему было очень трудно... Отловил ее только вызвонив админа транспортного провайдера, который и обнаружил, что с их стороны один из портов в статическом ether-channel "отвалился". Теперь стала понятной проблема с доступностью нечетных IP. Балансировка была настроена по алгоритму dst-ip, соответственно были недоступны хосты, доступ к которым шел через нерабочий канал. все решилось заменой вышедшего из строя медиаконвертера и поглощением пива вместе с админом транспортного провайдера. Вот такая вот байка. А соль ее в том, что лучше все таки строить динамические агрегированные каналы, а не статические...

Итак, примеры построение агрегированного канала на разном оборудовании.

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

FreeBSD

В FreeBSD агрегирование каналов возможно благодаря модулю ядра lagg. Он поддерживает несколько режимов агрегирования:

  • Failolver - работает один канал, если он упал, тогда второй
  • Cisco FastEtherchannel
  • LACP
  • Round Robin

Как уже оговаривалось выше, будем использовать LACP.

Для поддержки lagg необходимо пересобрать ядро с такой строкой

device lagg

 либо же добавить загрузку модуля в /boot/loader.conf:

if_lagg_load="YES"

Загрузить модуль не перезагружая сервер можно следующей командой:

# kldload /boot/kernel/if_lagg.ko

Проверяем, подгрузился ли модуль:

# kldstat

Id Refs Address            Size     Name
 1    2 0xffffffff80100000 5713f8   kernel
 2    1 0xffffffffb0717000 4916     if_lagg.ko

Модуль подгрузился. Теперь создадим агрегированный интерфейс из двух интерфейсов em0 и em1:

# ifconfig em0 up
# ifconfig em1 up
# ifconfig lagg0 create laggproto lacp laggport em0 laggport em1 192.168.159.250 netmask 255.255.255.0

Для создания интерфейса во время загрузки ОС, добавим такие строки в rc.conf:

cloned_interfaces="lagg0"
ifconfig_em0="up"
ifconfig_em1="up"
ifconfig_lagg0="laggproto lacp laggport em0 laggport em1 192.168.159.250 netmask 255.255.255.0"

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

# ifconfig lagg0

lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
        ether 00:15:17:5e:31:5c
        inet 192.168.159.250 netmask 0xffffff00 broadcast 192.168.192.255
        media: Ethernet autoselect
        status: active
        laggproto lacp
        laggport: em1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
        laggport: em0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
 

На этом настройку на стороне сервера можно считать оконченой.


Приведу еще пример построения lagg-интерфейса и использования vlan-ов (802.1Q). Для начала необходимо создать агрегированый интерфейс:

# ifconfig em0 up
# ifconfig em1 up
# ifconfig lagg0 create laggproto lacp laggport em0 laggport em1

Потом создаем виртуальные интерфейсы VLAN поверх агрегированого интерфейса с метками тегов 10 и 15:

# ifconfig vlan10 create vlan 10 vlandev lagg0 192.168.10.1 netmask 255.255.255.0
# ifconfig vlan15 create vlan 15 vlandev lagg0 192.168.15.1 netmask 255.255.255.0

В результате имеем такие интерфейсы:

# ifconfig vlan10
vlan10: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=3<RXCSUM,TXCSUM>
        ether 00:15:17:5e:31:5c
        inet 192.168.10.1 netmask 0xffffff00 broadcast 192.168.10.255
        media: Ethernet autoselect
        status: active
        vlan: 10 parent interface: lagg0

# ifconfig vlan15
vlan10: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=3<RXCSUM,TXCSUM>
        ether 00:15:17:5e:31:5c
        inet 192.168.15.1 netmask 0xffffff00 broadcast 192.168.15.255
        media: Ethernet autoselect
        status: active
        vlan: 15 parent interface: lagg0

Для того, чтобы все это "завелось" после перезагрузки сервера, в rc.conf необходимо добавить такие строки:

cloned_interfaces="lagg0 vlan10 vlan15"
ifconfig_em0="up"
ifconfig_em1="up"
ifconfig_lagg0="laggproto lacp laggport em0 laggport em1"
ifconfig_vlan10="vlan 10 vlandev lagg0 192.168.10.1 netmask 255.255.255.0"
ifconfig_vlan15="vlan 15 vlandev lagg0 192.168.15.1 netmask 255.255.255.0"

Примечание. В некоторых случаях при использовании 802.1Q агрегированный интерфейс не работал. "Лечится" это отключением опции vlanhwtag на сетевых интерфейсах. Тоесть, в таком случае команды "поднятия" интерфейсов em0 и em1 будут следующие:

# ifconfig em0 -vlanhwtag up
# ifconfig em1 -vlanhwtag up

И не забываем изменения внести в rc.conf:

ifconfig_em0="-vlanhwtag up"
ifconfig_em1="-vlanhwtag up"

Cisco Catalyst

Агрегирование портов будем выполнять на коммутаторе Cisco Catalyst WS-C2960G-24TC-L. Агрегировать будем порты Gi0/1 и Gi0/2. Общие команды конфигурации наводить не буду. Наведу только команды, которые необходимо выполнить для агрегирования:

c2960(config)#port-channel load-balance dst-ip
c2960(config)#interface range GigabitEthernet 0/1-2
c2960(config-if-range)#channel-group 1 mode active
Creating a port-channel interface Port-channel 1
c2960(config-if-range)#channel-protocol lacp

В результате этих команд мы установили режим балансировки, исходя из IP-адреса получателя (балансировка исходящего трафика в таком случае будет более равномерна) и создали интерфейс Port-channel1. Теперь все команды по конфигурированию необходимо применять к интерфейсу Port-channel 1. Эти изменения будут присвоены интерфейсам, которые входят в channel-group 1 (в нашем частном случае, это GigabitEthernet 0/1 и GigabitEthernet 0/2).

Для примера, переведем интерфейсы в режим транка и укажем, какие VLAN пропускать через этот транк:

c2960(config)#interface Port-channel 1
c2960(config-if)#switchport mode trunk
c2960(config-if)#switchport trunk allowed vlan 10,15

Примечание. Для того, чтобы поместить два интерфейсы в один и тот же  channel-group, необходимо чтобы настройки конфигурации этих интерфейсов были идентичны. Например, если порт GigabitEthernet 0/1 будет в режиме access, а GigabitEthernet 0/2 в режиме trunk, то попытка агрегировать эти интерфейсы закончится неудачей.

Alcatel Lucent

OS6850-24X

Агрегирование портов будем выполнять на коммутаторе Alcatel Lucent OS6850-24X. Агрегировать будем порты Gi1/1 и Gi1/2. Команды для создания агрегированого канала следующие:

-> lacp linkagg 1 size 2 admin state enable
-> lacp linkagg 1 name "LACP 1"
-> lacp linkagg 1 actor admin key 1
-> lacp agg 1/1 actor admin key 1
-> lacp agg 1/2 actor admin key 1

В результате имеем интерфейс linkagg 1.

OmniStack LS 6224

Агрегирование портов будем выполнять на коммутаторе Alcatel OmniStack LS 6224. Агрегировать будем порты g1 и g2. Команды для создания агрегированого канала следующие:

alc6224(config)# interface range ethernet g1-2
alc6224(config-if)# channel-group 1 mode auto

Foxgate

Агрегирование портов будем выполнять на коммутаторе Foxgate S9816-GS8-X2. Агрегировать будем порты Eth1/1 и Eth1/2. Команды для создания агрегированого канала следующие:

9816-sw(config)#port-group 1
9816-sw(config)#interface ethernet 1/1-2
9816-sw(config-if-port-range)#port-group 1 mode active
9816-sw(config-if-port-range)#interface port-channel 1
9816-sw(config-if-port-channel1)#name LACP1
9816-sw(config-if-port-channel1)#load-balance dst-ip

В результате имеем в своем распоряжении интерфейс Port-Channel1.

D-Link

Агрегирование портов будем выполнять на коммутаторе D-Link DES-3828. Агрегировать будем порты 1 и 2. Команды для создания агрегированого канала следующие:

DES-3800:admin#config link_aggregation algorithm ip_destination
DES-3800:admin#create link_aggregation group_id 1 type lacp
DES-3800:admin#config link_aggregation group_id 1 master_port 1 ports 1-2 state enable
DES-3800:admin#config lacp_port 1-2 mode active

Juniper

Агрегирование портов будем выполнять на маршрутизаторе Juniper MX80 под управлением ОС Junos. Агрегировать будем порты ge-1/0/1 и ge-1/0/2.

root@core# set chassis aggregated-devices ethernet device-count 1
 
[edit]
 
root@core# set interfaces ge-1/0/1 gigether-options 802.3ad ae0
 
[edit]
 
root@core# set interfaces ge-1/0/2 gigether-options 802.3ad ae0
 
[edit]
 
root@core# set interfaces ae0 aggregated-ether-options lacp active
 
[edit]
 
root@core# commit
commit complete
 

Edge-Core

Особенности настройки агрегации каналов в коммутаторах Edge-Core:

  • перед созданием физического подключения между портами двух коммутаторов необходимо завершить все необходимые настройки LACP для предотвращения образование петель;
  • на коммутаторах E3552M можно создать до 8 виртуальных транков, а каждый транк может включать в себя до 8 портов;
  • порты на двух концах виртуального канала должны быть настроены в режиме транк;
  • порты на двух концах транка должны быть сконфигурированы одинаково, включая режимы связи (например, скорость, дуплексный режим или flow control), VLAN и QoS;
  • каждый из гигабитных портов может быть включен в один виртуальный канал с другими гигабитными портами, не зависимо от того, какой из Combo-портов используется (SFP или медный);
  • STP, VLAN и настройки IGMP могут быть применены только ко всем портам в транке.

Агрегирование портов будем выполнять на коммутаторе Edge-Core ES3552M. Агрегировать будем порты ethernet 1/32 и ethernet 1/33.

Vty-0(config)#interface ethernet 1/32-33
Vty-0(config-if)#lacp

Механизм распределения сетевого трафика по виртуальным каналам транка: выбор, по какому физическому каналу в виртуальном транке будет передаваться сетевой трафик, осуществляется с помощью хеш-функции на базе следующих параметров: MAC адреса получателя (MACSA), MAC адреса отправителя (MACDA), VLAN, типа пакета Ethernet и IP адреса отправителя (IPSA). Механизм расчета основывается на формуле, которая возвращает 3-хбитный индекс, указывающий на физический канал, по которому будет передан пакет.

Ваша оценка: Нет Средняя: 5 (12 голосов)

Агрегация каналов для меня

Агрегация каналов для меня интересная тема, т.к. еще не делал, хочу попробовать.
Вопросов есть несколько:
У вас со стороны провайдера одинаковое оборудование? Где-то читал что должно быть одинаковое оборудование. А у меня получается от одного прова могу взять, там cisco 3500, а от второго через мой домашний dir-320. Будет ли работать?

Вообще то протоколы для того

Вообще то протоколы для того и существуют, чтобы не зависеть от производителя. Если пояснить "на пальцах", то имеем следующее... Допустим у Вас сетевая карта от D-Link. Благодаря тому, что есть протокол 802.3 Ethernet, Ваша сетевая карта будет работать с коммутаторами D-Link, Cisco, ZyXEL, 3COM, Alcatel, etc., а не только с коммутаторами D-Link.

Также, исходя из Вашего поста, могу видеть нестыковку... LACP - это протокол 2 уровня модели OSI. Тоесть, Вы могли бы от одного провайдера завести к себе 2 физических линка и агрегировать их в один логический линк. И IP-сеть уже бы работала поверх этого агрегированного канала.

А у Вас, как я понимаю, есть два канала в Интернет от разных провайдеров. В таком случае нужно использовать не агрегирование, а балансирование (либо резервирование). Тоесть уже распределять часть трафика в один канал, а часть - в другой. Объеденить эти два канала в один - не получится. Советую ознакомиться более подробно с моделью OSI. LACP - это 2 уровень. IP-трафик - это уже 3 уровень модели OSI. Соответственно обьеденить разные уровни  - ну никак не получится.

P.S. Кстати, агрегировать каналы можно только при условии, что два устройства соединяются между собой двумя (или больше) линками. Тоесть между этими устройствами и будет агрегированный канал.

Будут еще вопросы - задавайте их на форуме.

Спасибо за ответ. На счет

Спасибо за ответ.
На счет агрегации 2-х линков можно будет подумать, если не хватит скорости одного пакета от провайдера. А так, действительно правильнее использовать балансировку между каналами от разных провов.
 

Иногда возникают

Иногда возникают ситуации, когда перегружен линк внутри сети. Вот тогда и приходится агрегация каналов...

Re: LACP - обьединение сетевых интерфейсов с использованием ...

Привет. Делал по данной инструкции, имею d-link 3828.

Пытаюсь настроить lacp между 2-мя bsd машинами, через коммутатор.

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

Причем, доступ в сеть имеет только та машина, которая последней была подключена к свичу. (если изолированную машину переводключить к свичу, она станет активной, вторая "изолируется")

Не пойму никак в чем может быть дело.

Re: LACP - обьединение сетевых интерфейсов с использованием ...

Подымите тему на форуме...

Опишите схему сети, настройку интерфейсов и тд...

Re: LACP - обьединение сетевых интерфейсов с использованием ...

Спасибо

Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Сохранить установки".

Вставай, Україно!

Литература

Надпись на воротах: "ОСТОРОЖНО - ЗЛАЯ @".