вторник, 9 октября 2012 г.

Агрегация каналов FreeBSD. Lacp interface for FreeBSD

Когда не хватает ширины канала, но нет желания покупать 10гб карточки, ибо большие расходы в виде модулей для коммутаторов, самих карточек и модулей для них, есть выход: Агрегирование каналов. В этой статье мы научимся конфигурировать lagg интерфейсы во FreeBSD. Приступим.

Для начала определимся, у нас есть вышестоящий коммутатор -> шлюз с FreeBSD -> нижестоящий коммутатор. Все коммутаторы Dlink серии DGS-3600. Есть две сетевые карты Intel Pro1000 DualPort. Есть три влана, которые необходимо пробросить. 
Сначала необходимо пересобрать ядро, добавив в него необходимые опции:

###Lagg(Link Aggregation)###
device          lagg
Собираем ядро 
cd /usr/src
make -j16 -s buildkernel KERNCONF=ваше_ядро
make installkernel KERNCONF=ваше_ядро


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

ee /etc/rc.conf
cloned_interfaces="lagg0 lagg1 vlan11 vlan22 vlan33" 
ifconfig_lagg0="laggproto lacp laggport em0 laggport em1" 
ifconfig_lagg1="laggproto lacp laggport em2 laggport em3" 
ifconfig_vlan11="inet 1.1.1.1 netmask 255.255.255.0 vlan 11 vlandev lagg1" 
ifconfig_vlan22="inet 2.2.2.2 netmask 255.255.255.0 vlan 22 vlandev lagg1" 
ifconfig_vlan33="inet 3.3.3.3 netmask 255.255.255.0 vlan 33 vlandev lagg0"
Этими строчками мы добавили 5 интерфейсов, два агрегированных, и три виртуальных. lagg0 у нас смотрит вверх, lagg1 вниз.

Делаем ребут еще раз, заодно проверим как работает автозапуск, проверяем:

ifconfig
lagg0: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
        ether 66:55:44:33:22:11
        media: Ethernet autoselect
        status: active
        laggproto lacp
        laggport: em1 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
        laggport: em0 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
lagg1: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=19b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWTAGGING,VLAN_HWCSUM,TSO4>
        ether 11:22:33:44:55:66
        media: Ethernet autoselect
        status: active
        laggproto lacp
        laggport: em3 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
        laggport: em2 flags=1c<ACTIVE,COLLECTING,DISTRIBUTING>
vlan11: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=3<RXCSUM,TXCSUM>
        ether 11:22:33:44:55:66
        inet 1.1.1.1 netmask 0xffffff00 broadcast 1.1.1.255
        media: Ethernet autoselect
        status: active
        vlan: 11 parent interface: lagg1
vlan22: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=3<RXCSUM,TXCSUM>
        ether 11:22:33:44:55:66
        inet 2.2.2.2 netmask 0xffffff00 broadcast 2.2.2.255
        media: Ethernet autoselect
        status: active
        vlan: 22 parent interface: lagg1
vlan33: flags=8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=3<RXCSUM,TXCSUM>
        ether 66:55:44:33:22:11
        inet 3.3.3.3 netmask 0xffffff00 broadcast 3.3.3.255
        media: Ethernet autoselect
        status: active
        vlan: 33 parent interface: lagg0
Все в порядке, все поднялось.
Теперь настроим коммутаторы заходим на вышестоящий и выполняем следующие команды:

config lacp_port 1-2 mode active
config link_aggregation group_id 1 master_port 1 ports 1-2 state enable
config link_aggregation algorithm ip_destination
save

Заходим на нижестоящий DGS
config lacp_port 10-11 mode active
config link_aggregation group_id 1 master_port 10 ports 10-11 state enable
config link_aggregation algorithm ip_destination
save

Проверяем:

ifstat -b -i lagg0 -i lagg1
      lagg0               lagg1
 Kbps in  Kbps out   Kbps in  Kbps out
540777.8  258820.6  258903.7  540650.1
574679.3  256099.0  256135.1  574561.7
580871.5  279482.7  279496.4  580819.7
613765.8  278292.0  278012.6  613662.3
631667.1  244884.0  244778.1  631770.4

Все работает, трафик ходит по обоим каналам.  


3 комментария:

Dmitriy комментирует...

Какая версия FreeBSD ?
Пробовали ли на родном ядре загружая lagg модулем?
Какой тюниг /boot/loader.conf и /etc/sysctl.conf ?

bac комментирует...

freebsd 9.0 Ядро естественно пересобрано, loader.conf net.inet.tcp.syncache.hashsize=1024
net.inet.tcp.syncache.bucketlimit=100
net.inet.tcp.tcbhashsize=8142
sysctl.conf много чего, но если сетевух много и pps за 400K то очень помогает следующее:
dev.em.0.rx_int_delay=200
dev.em.0.tx_int_delay=200
dev.em.1.rx_int_delay=200
dev.em.1.tx_int_delay=200
dev.em.2.rx_int_delay=200
dev.em.2.tx_int_delay=200
dev.em.3.rx_int_delay=200
dev.em.3.tx_int_delay=200
dev.em.4.rx_int_delay=200
dev.em.4.tx_int_delay=200
dev.em.5.rx_int_delay=200
dev.em.5.tx_int_delay=200
dev.em.6.rx_int_delay=200
dev.em.6.tx_int_delay=200
dev.em.7.rx_int_delay=200
dev.em.7.tx_int_delay=200
dev.em.0.rx_abs_int_delay=4000
dev.em.0.tx_abs_int_delay=4000
dev.em.1.rx_abs_int_delay=4000
dev.em.1.tx_abs_int_delay=4000
dev.em.2.rx_abs_int_delay=4000
dev.em.2.tx_abs_int_delay=4000
dev.em.3.rx_abs_int_delay=4000
dev.em.3.tx_abs_int_delay=4000
dev.em.4.rx_abs_int_delay=4000
dev.em.4.tx_abs_int_delay=4000
dev.em.5.rx_abs_int_delay=4000
dev.em.5.tx_abs_int_delay=4000
dev.em.6.rx_abs_int_delay=4000
dev.em.6.tx_abs_int_delay=4000
dev.em.7.rx_abs_int_delay=4000
dev.em.7.tx_abs_int_delay=4000
так хоть нагрузка на проц существенно снижается с 50% до приемлемых 6%.

Анонимный комментирует...

sands casino | SEGA - Starlight City Resort
Welcome to 샌즈카지노 the largest gaming kadangpintar library in the United States! SEGA's collection of Mega Drive & Genesis classics comes to the new generation, now งานออนไลน์ updated with even more