Агрегация каналов (Link aggregation, trunking) во FreeBSD

Posted Чт, 10/15/2009 - 12:40 by Raven2000

В процессе своей работы я заменил 2 сервера на один. В итоге у меня в наличие оказалось 2 кабель канала, две сетевые карты 3com по 100мб каждая, один сервер и свитч D-Link DES-3028. И я задумал увеличить пропускную способность сервера путем создания агрегации каналов.

Содержание:

Введение

Типы агригации

Настройка

Стартап

Свитч

Заключение

Ссылки

Введение

Агрегация каналов (англ. Link aggregation, trunking) или IEEE 802.3ad — технология объединения нескольких физических каналов в один логический. Это способствует не только значительному увеличению пропускной способности магистральных каналов коммутатор—коммутатор или коммутатор—сервер, но и повышению их надежности. Хотя уже существует стандарт IEEE 802.3ad, многие компании еще используют для своих продуктов патентованные или закрытые технологии.

Главное преимущество агрегации каналов в том, что радикально повышается скорость — суммируется скорость всех используемых адаптеров. В случае отказа адаптера трафик посылается следующему работающему адаптеру, без прерывания сервиса. Если же адаптер вновь начинает работать, то через него опять посылают данные.

Использование в параллель несколько Ethernet-адаптеров выглядит так. Допустим есть два адаптера Ethernet: eth0 и eth1. Их можно объединить в псевдо-Ethernet-адаптер eth3. Система распознает эти агрегированные адаптеры как один. Все агрегированные адаптеры настраиваются на один MAC-адрес, поэтому удалённые серверы обращаются с ними как с одним адаптером. eth3 можно настроить на один IP адрес, как любой Ethernet адаптер. Из-за этого программы обращаются к нему как к самому обычному адаптеру, скорость которого в два раза выше.

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

Интерфейс lagg может быть создан с помощью команды ifconfig laggN create. Вы можете использовать различные типы агрегирования протоколов, указанной с помощью параметра proto laggproto. Дочерние интерфейсы могут быть добавлены с помощью laggport child-iface option и удалены с помощью параметра -laggport child-iface option.

Типы агригации

В настоящее время драйвер поддерживает агрегирования протоколов

failover (по умолчанию)

fec

lacp

loadbalance

roundrobin

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

Режимы работы:

Failover [failover] - Это режим по умолчанию. В этом режиме один из портов является мастер портом и все данные, получаются через этот порт. В случае отказа мастер порта будет использован следующий активный порт.

Cisco® Fast EtherChannel® - Cisco FAST EtherChannel [fec] - это статическая настройка и не согласовывает агрегацию или обмена кадрами и не следить за линком. Если коммутатор поддерживает LACP, то следует использовать LACP вместо FEC.

FEC балансировка исходящий трафик через активных портов, на основе информации, заголовка хешированного протокола и принимает входящий трафик через любой активный порт. Хеш-значение включает Ethernet адреса источника и назначения и если таковые имеются то и VLAN тег, IPv4/IPv6 адреса источника и назначения.

LACP [lacp]- IEEE® 802.3ad Link Aggregation Control Protocol (LACP) и протокол маркера. LACP проведет согласования и набор агрегатных линков в одну или несколько Link Aggregated Groups (LAG). Каждый LAG состоит из портов с одинаковой скоростью и установленной full-duplex операцией. Трафик будет сбалансированным через порты в LAG с наибольшим общей скоростью, в большинстве случаев будет существовать только один LAG, который будет содержать все порты. В случае возникновения изменений в физического подключения каналов связи LACP будет быстро изменять работу к новой конфигурации.

LACP балансировка исходящего трафика через активные порты, на основе информации, заголовка по хешированному протоколу и принимает входящий трафик с любого активного порта. Хеш-значение включает Ethernet адреса источника и назначения и, если таковые имеются, VLAN тег и IPv4/IPv6 адреса источника и назначения.

Loadbalance [loadbalance] - Является псевдонимом FEC режим.

Round-robin [roundrobin] - Распространяет исходящий трафик, с помощью планировщика циклически через все активные порты и принимает входящий трафик из любого активного порта. Этот режим является нарушением кадра Ethernet и следует использовать с особой осторожностью.

None [none] - Этот протокол предназначен чтобы ничего не делать: он отключает любой трафик без отключения lagg интерфейса.

Настройка

Для начало необходимо подключить модуль есть два варианта.

1. в loader.conf добавить строчку if_lagg_load="YES" и перезагрузится.

# echo 'if_lagg_load="YES"' >> /boot/loader.conf

# reboot

2. или включить поддержку lagg в ядро и пересобрать его с последующей перезагрузкой

device lagg

Пример LACP

Создадим 802.3ad линк агрегирования с помощью LACP с двумя em интерфейсами:

# ifconfig lagg0 create

# ifconfig em0 up

# ifconfig em1 up

# ifconfig lagg0 laggproto lacp laggport em0 laggport em1

192.168.1.1 netmask 255.255.255.0

Пример Failover

Создадим отказоустойчивый режим который можно использовать для перехода на вторичный интерфейс при потери связи на основном интерфейсе. Создадим и настроим интерфейс lagg0, с em0 как основной интерфейс и em1 как дополнительный интерфейс:

# ifconfig lagg0 create

# ifconfig lagg0 up laggproto failover laggport em0 laggport em1

Интерфейс будет выглядеть следующим образом, и основные различия будут в MAC-адресе и имени устройства:

# ifconfig lagg0

lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500

options=8<VLAN_MTU>

ether 00:05:5d:71:8d:b8

media: Ethernet autoselect

status: active

laggproto failover

laggport: em1 flags=0<>

laggport: em0 flags=5<MASTER,ACTIVE>

Трафик будет передано и полученных по em0. Если связь теряется на em0 то em1 становится активным линком. Если связь восстанавливается на интерфейсе мастера то снова em0 станет активным линком.

Пример Failover роуминга

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

# ifconfig em0 up

# ifconfig ath0 nwid my_net up

# ifconfig lagg0 laggproto failover laggport em0 laggport ath0

192.168.1.1 netmask 255.255.255.0

Стартап

Настроим запуск агрегации LACP при перегрузки системы:

# echo 'ifconfig_xl0="up"' >> /etc/rc.conf

# echo 'ifconfig_xl1="up"' >> /etc/rc.conf

# echo 'cloned_interfaces="lagg0"' >> /etc/rc.conf

# echo 'ifconfig_lagg0="laggproto lacp laggport xl0 laggport xl1 192.168.0.1 netmask 255.255.255.0"' >> /etc/rc.conf

# reboot

Проверим

# ifconfig

xl0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500

options=9<RXCSUM,VLAN_MTU>

ether 00:04:79:66:4b:ae

media: Ethernet autoselect (100baseTX <full-duplex>)

status: active

lagg: laggdev lagg0

xl1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500

options=8<VLAN_MTU>

ether 00:04:79:66:4b:ae

media: Ethernet autoselect (100baseTX <full-duplex>)

status: active

lagg: laggdev lagg0

lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384

inet6 fe80::1 prefixlen 64 scopeid 0x3

inet6 ::1 prefixlen 128

inet 127.0.0.1 netmask 0xff000000

lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500

options=8<VLAN_MTU>

ether 00:04:79:66:4b:ae

inet 192.168.0.1 netmask 0xffffff00 broadcast 192.168.0.255

media: Ethernet autoselect

status: active

laggproto lacp

laggport: xl1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>

laggport: xl0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>

Свитч

Настроим работу коммутатор 2го уровня D-Link DES-3028.

DES-3028:4#config lacp_port 1-2 mode active

DES-3028:4#create link_aggregation group_id 1 type lacp

DES-3028:4#config link_aggregation group_id 1 master_port 1 ports 1-2 state enable

Заключение

Смотрим systat и скорость копирования.

/0 /1 /2 /3 /4 /5 /6 /7 /8 /9 /10

Load Average |

/0% /10 /20 /30 /40 /50 /60 /70 /80 /90 /100

root idle: cpu0 XXXXXXXXXXXXXXXXX

root irq19: xl1 XXXXXXXXXXXXX

ftp proftpd XX

root irq18: xl0 XXXX

В итоге обе сетевые карты работают, скорость определенно возрастает с нашим настроением =).

Есть ограничения в работе агрегации см. ITworld.com - Link Aggregation with 802.3ad.

Все порты при агрегации должны быть одного типа (CAT-5E/6, SM или MM и тп).

Порты должны действовать на одной скорости.

Агрегировать канал можно до скорости 8-гигабит/сек.

Свитч может поддерживать 802.3ad. (но можно и без этого если сетевые карты такой режим поддерживают)

http://www.ignix.ru/public/agregatsiya-kanalov-link-aggregation-trunking

Обновлено: 12.03.2015