LACP - объединение сетевых интерфейсов с использованием Link Aggregation Control Protocol
В связи с постоянным увеличением загруженности каналов, возникла необходимость в агрегировании портов между коммутирующим (ну и маршрутизирующим в том числе) оборудованием. Агрегирование каналов будем выполнять с поддержкой протокола 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
Только полноправные пользователи могут оставлять комментарии. Аутентифицируйтесь пожалуйста, используя сервисы.