Настройка LACP и VLAN во FreeBSD 7.0

Автор: s@sh@.

Как всегда, в жизни людям чего-то не хватает.В основном это денег и счастья, и я этому не исключение :). Но иногда приходят моменты, когда еще не хватает хорошего настроения от качественно, или хотя бы красиво проделанной работы. Возникла на днях задачка - организовать файл-сервер для бекапов на фряхе, да еще и прикрутить к нему сторедж на 10 терабайт.Все, как бы, не совсем страшно, если бы не одно но... Сторедж при правильной настройке может давать до 200 Мбайтс на чтение или запись(Fiber Channel это хорошо). Так или иначе нужно эту возможность использовать по максимуму. Но даже при гигабитном соединении такой нагрузки не получишь. Зато по двум гигабитным карточкам можно такое устроить. Почему нужна такая нагрузка? По тому что бекапы будут литься отовсюду в сети приблизительно в один момент времени, а это, мягко говоря, много! Какое можно найти решение? Когда-то помню приходилось строить link aggregation на двух HP свичах, там протоколов было много для этих целей, но мне почему-то понравился такой себе LACP (Link aggregation control protocol). Ну на теперешней работе таких свичиков больше нету(или вообще нету), зато есть другие - cisco catalyst 6509. Попарсив google на тему присутствия организации такой штуки на FreeBSD и Сisco, напоролся на статейку HandBook/NetworkAggregation. Если вкратце, в статье описывается процес добавления пары-тройки команд на циске и во фряхе, в результате чего сервер с двумя интерфейсами балансирует нагрузку одновременно по обеим интерфейсам и на прием, и на передачу трафика, да еще и обеспечивает Fault tolerance. Ну с циской как-бы все понятно, а вот с фряхой понятно быть перестало сразу. Ввод

команды

netflow1# ifconfig lagg0 create

позитивного результата не дал, как и

netflow1# man lagg

No manual entry for lagg

Недолго покопавшись в инете, выяснилось, что данная функция будет поддерживаться в 7-й версии FreeBSD. Дело было вечером, делать было нечего... Функцию опробовать надо, заодно и на CURRENT версию посмотреть можно. Обновляем сорцы до CURRENT-а, компилим и ставим мир и ядро. Выполнение этой процедуры очень хорошо описано в http://www.lissyara.su/?id=1072, http://www.lissyara.su/?id=1161,

http://www.lissyara.su/?id=1270.

От себя добавлю некоторую инфу:

# это файлик /usr/local/etc/supfile

*default host=cvsup3.ua.FreeBSD.org #мне от сюда легче тянуть исходники

*default base=/var/db

*default prefix=/usr

*default release=cvs

#*default tag=. # а это чтоб CURRENT стянуть ()

#по прозьбе трудящих закоментил предыдущую строку

#т.к. сейчас такой тег более актуален.

*default tag=RELENG_7

*default delete use-rel-suffix

*default compress

## Main Source Tree.

src-all # тянем только исходники

Далее просто:

netflow1# cvsup -g -L 2 /usr/local/etc/supfile

После недолгих бульканий cvsup'а были скачаны исходники. По статейке билдим мир и ядришко. Здесь у меня возникли проблемы. Я со старта покаментил все ненужные мне опции в конфигфайле ядра, и оно компилиться не захотело, хотя мир скомпилился с первого раза. Проблемка была в коментированнии неких неприветных строчек

cpu I486_CPU

cpu I586_CPU

options INET6 # IPv6 communications protocols

Хотя способ решения был другим, я сначала скомпилил и проставил мир и ядро GENERIC, а опосля уже на новой Фряхе забубенил свое ядро /usr/src/sys/i386/conf/MK .

cpu I486_CPU

cpu I586_CPU

cpu I686_CPU

ident MK

makeoptions DEBUG=-g # Build kernel with gdb(1) debug symbols

options SCHED_4BSD # 4BSD scheduler

options PREEMPTION # Enable kernel thread preemption

options INET # InterNETworking

options INET6 # IPv6 communications protocols

options SCTP # Stream Control Transmission Protocol

options FFS # Berkeley Fast Filesystem

options SOFTUPDATES # Enable FFS soft updates support

options UFS_ACL # Support for access control lists

options UFS_DIRHASH # Improve performance on big directories

options UFS_GJOURNAL # Enable gjournal-based UFS journaling

options MD_ROOT # MD is a potential root device

options NFSCLIENT # Network Filesystem Client

options NFSSERVER # Network Filesystem Server

options NFS_ROOT # NFS usable as /, requires NFSCLIENT

options MSDOSFS # MSDOS Filesystem

options CD9660 # ISO 9660 Filesystem

options PROCFS # Process filesystem (requires PSEUDOFS)

options PSEUDOFS # Pseudo-filesystem framework

options GEOM_PART_GPT # GUID Partition Tables.

options GEOM_LABEL # Provides labelization

options COMPAT_43TTY # BSD 4.3 TTY compat [KEEP THIS!]

options COMPAT_FREEBSD4 # Compatible with FreeBSD4

options COMPAT_FREEBSD5 # Compatible with FreeBSD5

options COMPAT_FREEBSD6 # Compatible with FreeBSD6

options SCSI_DELAY=5000 # Delay (in ms) before probing SCSI

options KTRACE # ktrace(1) support

options SYSVSHM # SYSV-style shared memory

options SYSVMSG # SYSV-style message queues

options SYSVSEM # SYSV-style semaphores

options _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time extensions

options KBD_INSTALL_CDEV # install a CDEV entry in /dev

options ADAPTIVE_GIANT # Giant mutex is adaptive.

options STOP_NMI # Stop CPUS using NMI instead of IPI

options AUDIT # Security event auditing

# To make an SMP kernel, the next two lines are needed

options SMP # Symmetric MultiProcessor Kernel -

# вот это уже

# по дефолту ставят в ядро

device apic # I/O APIC

device lagg #вот это та самая строка, с помощью

#которой и должен заработать LACP

# CPU frequency control

device cpufreq

# Bus support.

device pci

# Floppy drives

device fdc

# ATA and ATAPI devices

device ata

device atadisk # ATA disk drives

device ataraid # ATA RAID drives

device atapicd # ATAPI CDROM drives

device atapifd # ATAPI floppy drives

device atapist # ATAPI tape drives

options ATA_STATIC_ID # Static device numbering

# SCSI Controllers

device ahb # EISA AHA1742 family

device ahc # AHA2940 and onboard AIC7xxx devices

options AHC_REG_PRETTY_PRINT # Print register bitfields in debug

# output. Adds ~128k to driver.

device ahd # AHA39320/29320 and onboard AIC79xx devices

options AHD_REG_PRETTY_PRINT # Print register bitfields in debug

# output. Adds ~215k to driver.

device isp # Qlogic family - а по этим девайсом подключем массив

device ispfw # Firmware for QLogic HBAs- normally a module

device mpt # LSI-Logic MPT-Fusion

device aha # Adaptec 154x SCSI adapters

device aic # Adaptec 15[012]x SCSI adapters, AIC-6[23]60.

# SCSI peripherals

device scbus # SCSI bus (required for SCSI)

device ch # SCSI media changers

device da # Direct Access (disks)

device sa # Sequential Access (tape etc)

device cd # CD

device pass # Passthrough device (direct SCSI access)

device ses # SCSI Environmental Services (and SAF-TE)

device iir # Intel Integrated RAID

# RAID controllers

device aac # Adaptec FSA RAID

device mfi # LSI MegaRAID SAS

# atkbdc0 controls both the keyboard and the PS/2 mouse

device atkbdc # AT keyboard controller

device atkbd # AT keyboard

device psm # PS/2 mouse

device kbdmux # keyboard multiplexer

device vga # VGA video card driver

device splash # Splash screen and screen saver support

# syscons is the default console driver, resembling an SCO console

device sc

device agp # support several AGP chipsets

# Power management support (see NOTES for more options)

# Add suspend/resume support for the i8254.

device pmtimer

# Serial (COM) ports

device sio # 8250, 16[45]50 based serial ports

device uart # Generic UART driver

# Parallel port

device ppc

device ppbus # Parallel port bus (required)

device lpt # Printer

device plip # TCP/IP over parallel

device ppi # Parallel port interface device

# PCI Ethernet NICs.

device em # Intel PRO/1000 adapter Gigabit Ethernet Card

device ixgb # Intel PRO/10GbE Ethernet Card

# Pseudo devices.

device loop # Network loopback

device random # Entropy device

device ether # Ethernet support

device sl # Kernel SLIP

device ppp # Kernel PPP

device tun # Packet tunnel.

device pty # Pseudo-ttys (telnet etc)

device md # Memory "disks"

device gif # IPv6 and IPv4 tunneling

device faith # IPv6-to-IPv4 relaying (translation)

device firmware # firmware assist module

# The `bpf' device enables the Berkeley Packet Filter.

# Be aware of the administrative consequences of enabling this!

# Note that 'bpf' is required for DHCP.

device bpf # Berkeley packet filter

# USB support

device uhci # UHCI PCI->USB interface

device ohci # OHCI PCI->USB interface

device ehci # EHCI PCI->USB interface (USB 2.0)

device usb # USB Bus (required)

device ugen # Generic

device uhid # "Human Interface Devices"

device ukbd # Keyboard

device ulpt # Printer

device umass # Disks/Mass storage - Requires scbus and da

device ums # Mouse

Сильно не бейте за весь файлик конфигурации ядра, этот файлик у меня точно скомпилился под CURRENT-ом, вот я его и решил выложить для примера.

Из него повыбрасывал всякие дебаги, так как оно мне ничего не раскажет интересного, но на продуктивность системы может нехило повлиять.Ну и повыбрасывал поддержку девайсов, которы у меня нет и быть не может(сервак то блейдовый). Ну и типа для компиля заюзал опцию -j8.

netflow1# make -j8 buildworld && make -j8 buildkernel KERNCONF=MK

На двух ксеонах все скомпилилось достаточно быстро. При инсталляции мира и ядра особых проблем не возникло, так как система, которую апдейтил, была почти без софта. Поэтому анализ вывода mergemaster особо не проводился и на все вопросы автоматом жал "i".

По завершению сего процесса получаем

netflow1# uname -v

FreeBSD 7.0-CURRENT #8: Mon Oct 1 11:43:02 EEST 2007

root@netflow1.intellecom.ua:/usr/obj/usr/src/sys/MK

netflow1#

Ну а теперь поработаем клавиатурой

netflow1# ifconfig em0 up

netflow1# ifconfig em1 up

netflow1# ifconfig lagg0 create

netflow1# ifconfig lagg0 up laggproto lacp laggport em0 laggport em1

netflow1# ifconfig lagg0 10.10.10.18 netmask 255.255.255.0

netflow1# route add -net 0.0.0.0 10.10.10.1 0.0.0.0

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

Идем на циску и к каждому нужному интерфейсу прописываем:

urk-5(config)#interface GigabitEthernet2/2

urk-5(config-if)#description krv/dev-3

urk-5(config-if)#switchport

urk-5(config-if)#switchport access vlan 10

urk-5(config-if)#channel-protocol lacp

urk-5(config-if)#channel-group 23 mode active

urk-5(config-if)#interface GigabitEthernet2/16

urk-5(config-if)#description krv:/dev-3

urk-5(config-if)#switchpot

urk-5(config-if)#switchport access vlan 10

urk-5(config-if)#channel-protocol lacp

urk-5(config-if)#channel-group 23 mode active

ukr-5(config-if)#int po23

ukr-5(config-if)#no shutdown

ukr-5(config-if)#end

Значит пояснения: Наш сервак включен в свич двумя сетевыми карточками, одна в порт GigabiEthernet2/2, другая в GigabiEthernet2/16. Соответственно на циске их и конфигурим. switchport access vlan 10 "добавляет" порт в 10 влан в access режиме. Далее добавляем оба порта в channel-group 23, устанавливаем активный режим и протокол агрегации портов. При этих дествиях создается интерфейс с полныйм названием Port-channel 23.Все параметры, которые будут изменены относительно него автоматически применяются ко всем портам из группы. По умолчанию, при создании, данный интерфес пребывает в состоянии shutdown, т.е. отключен,поэтому и нужна предпоследняя команда.Далее ждём пару мин и посмотри че получилось

ukr-5#sh int po23

Port-channel23 is up, line protocol is up (connected)

Hardware is EtherChannel, address is 000d.ed4e.6fbb (bia 000d.ed4e.6fbb)

MTU 1500 bytes, BW 1000000 Kbit, DLY 10 usec,

reliability 255/255, txload 1/255, rxload 1/255

Encapsulation ARPA, loopback not set

Keepalive set (10 sec)

Full-duplex, 1000Mb/s

input flow-control is off, output flow-control is on

Members in this channel: Gi2/2

ARP type: ARPA, ARP Timeout 04:00:00

Last input never, output never, output hang never

Last clearing of "show interface" counters never

Input queue: 0/2000/0/0 (size/max/drops/flushes); Total output drops: 0

Queueing strategy: fifo

Output queue: 0/40 (size/max)

5 minute input rate 0 bits/sec, 0 packets/sec

5 minute output rate 0 bits/sec, 0 packets/sec

7158113 packets input, 6796184799 bytes, 0 no buffer

Received 2003 broadcasts (1430 multicasts)

0 runts, 0 giants, 0 throttles

0 input errors, 0 CRC, 0 frame, 0 overrun, 0 ignored

0 watchdog, 0 multicast, 0 pause input

0 input packets with dribble condition detected

16746229 packets output, 22947297446 bytes, 0 underruns

0 output errors, 0 collisions, 9 interface resets

0 babbles, 0 late collision, 0 deferred

0 lost carrier, 0 no carrier, 0 PAUSE output

0 output buffer failures, 0 output buffers swapped out

Ну а во FreeBSD получаем что-то такое:

netflow1# ifconfig -a

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

options=8b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWCSUM>

ether 00:14:22:b1:e3:06

media: Ethernet autoselect (1000baseSX <full-duplex>)

status: active

lagg: laggdev lagg0

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

options=8b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWCSUM>

ether 00:14:22:b1:e3:06

media: Ethernet autoselect (1000baseSX <full-duplex>)

status: active

lagg: laggdev lagg0

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

inet6 fe80::1%lo0 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=8b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWCSUM>

ether 00:14:22:b1:e3:06

inet 10.10.10.18 netmask 0xffffff00 broadcast 10.10.10.255

media: Ethernet autoselect

status: active

laggproto lacp

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

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

netflow1#

Проведем некоторое тестирование. Я на двух консолях выполнил такой себе пинг:

netflow1# ping -i 0.2 -s 10000 10.10.10.1

А что из этого получилось смотрел systat'ом

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

Load Average

Interface Traffic Peak Total

lagg0 in 150.083 KB/s 225.318 KB/s 30.898 MB

out 150.146 KB/s 225.372 KB/s 34.340 MB

lo0 in 0.000 KB/s 0.000 KB/s 4.604 KB

out 0.000 KB/s 0.000 KB/s 4.604 KB

em1 in 150.083 KB/s 225.343 KB/s 30.908 MB

out 0.000 KB/s 0.023 KB/s 15.137 KB

em0 in 0.000 KB/s 0.066 KB/s 22.844 KB

out 150.171 KB/s 225.396 KB/s 34.355 MB

Как видим, пинг отсылается по одному физическому интерфейсу, а reply приходит на другой.

Но задача в практической постановке не совсем полная. Реально вся сетка разграничена кучей VLAN'ов и в каждом из них есть сервера и важные хосты, которые нужно бекапить. Так сложилось в жизни, что свитчинг работает быстрее роутинга, особенно если маршруты к соседнему порту в другом VLAN'е лежат через десяток маршрутизаторов в пяти офисах :)). Как одно из решений, нужные интерфейсы на свиче можно перевести в транковый режим и "прокинуть" туда все необходимые VLAN'ы. Как тогда быть с системой под FreeBSD, ведь ей нужно видеть все виланы? Решение простое, нужно создать виртуальные интерфейсы для каждого VLAN'а, и назначить каждому из них адрес и маршрут из соотведствующей подсети. Для примера, нам нужно из системы видеть 10 и 17 VLAN'ы. Соответственно конфигурим свитч:

urk-5(config)#int po23

urk-5(config-if)# no switchport access vlan 10

urk-5(config-if)# switchport mode trunk

urk-5(config-if)# switchport trunk encapsulation dot1q

urk-5(config-if)# switchport trunk allowed vlan 10,17

urk-5(config-if)#end

Здесь мы удалили Port-Channel23 из 10-го VLAN'а, и перевели его в транковый режим, позволив "пробрасывать" 10 и 17 виланы. Полная конфига на свиче выглядит так:

urk-5# sh run int po23

!

interface Port-channel23

switchport

switchport trunk encapsulation dot1q

switchport trunk allowed vlan 10,17

switchport mode trunk

no ip address

end

urk-5#sh run int g2/2

Building configuration...

Current configuration : 238 bytes

!

interface GigabitEthernet2/2

description krv:dev-3

switchport

switchport trunk allowed vlan 10,17

switchport mode trunk

no ip address

channel-protocol lacp

channel-group 23 mode active

end

urk-5#sh run int g2/16

Building configuration...

Current configuration : 239 bytes

!

interface GigabitEthernet2/16

description krv:dev-3

switchport

switchport trunk allowed vlan 10,17

switchport mode trunk

no ip address

channel-protocol lacp

channel-group 23 mode active

end

ukr-a05#

Ну а теперь возьмемся за нашу FreeBSD.

Чтоб не мучатся каждый раз с созданием lagg-интерфейса, причешем всю эту кашку в

/etc/rc.conf, но для этого нам еще нужны два скрипта: /etc/rc.d/mklagg:

#!/bin/sh

#

# PROVIDE: mkvlan

# BEFORE: netif

# KEYWORD: nojail

. /etc/rc.subr

. /etc/network.subr

name="mklagg"

rcvar=`set_rcvar`

start_cmd="mklagg_start"

stop_cmd="mklagg_stop"

mklagg_start()

{

ifconfig em0 up

ifconfig em1 up

echo -n "creating link aggregated interfaces... "

set | grep "ifconfig_lagg[0-9]*=" | while read ln ; do

ifn=`expr "${ln}" : "ifconfig_(lagg[0-9]*)=.*"`

echo -n "${ifn} "

ifconfig $ifn create

done

echo

}

mklagg_stop()

{

}

load_rc_config $name

run_rc_command "$1"

и /etc/rc.d/mkvlan:

#!/bin/sh

#

# PROVIDE: mkvlan

# BEFORE: netif

# KEYWORD: nojail

. /etc/rc.subr

. /etc/network.subr

name="mkvlan"

rcvar=`set_rcvar`

start_cmd="mkvlan_start"

stop_cmd="mkvlan_stop"

mkvlan_start()

{

echo -n "creating vlan interfaces... "

set | grep "ifconfig_vlan[0-9]*=" | while read ln ; do

ifn=`expr "${ln}" : "ifconfig_(vlan[0-9]*)=.*"`

echo -n "${ifn} "

ifconfig $ifn create

done

echo

}

mkvlan_stop()

{

}

load_rc_config $name

run_rc_command "$1"

Файлы практически идентичны, и можно было бы их обьединить, но лучше пусть живут отдельно.

Эти скрипты используются в /etc/rc.conf при старте системы для создания lagg- и vlan-интерфейсов. Далее все просто:

mklagg_enable="YES" #это наш скрипт для создания lagg-интерфейсов

mkvlan_enable="YES" #а это vlan

hostname="netflow1.intellecom.ua"

cloned_interface="lagg0" # создаем lagg0

ifconfig_lagg0="laggproto lacp laggport em0 laggport em1 " # и определяем для него

# физицеские интерфейсы em0 и em1

cloned_interface="vlan17" # создаем два vlan-интерфейса

cloned_interface="vlan10" # для 10 и 17

ifconfig_vlan10="inet 10.10.10.18 netmask 255.255.255.0 vlan 10 vlandev lagg0"

# назначаем адреса, маски VLAN'ы и интерфейс, через

# который будут работать вланы

ifconfig_vlan17="inet 10.10.17.18 netmask 255.255.255.0 vlan 17 vlandev lagg0"

# вместо lagg0 мог бы быть em0 или em1

static_routes="static1 static2"

route_static1="-net 10.10.17.0 -netmask 255.255.255.0 -gateway 10.10.17.1"

route_static2="-net 10.10.10.0 -netmask 255.255.255.0 -gateway 10.10.10.1"

# устанавливаем маршруты в каждую из подсетей

defaultrouter="10.10.10.1" # и по ходу шлюз по умолчанию

linux_enable="YES"

sshd_enable="YES"

После, для гарантии, перезагружаемся. Далее посмотрим, что у нас получилось.

Для наглядного тестированния, нужно нагрузить интерфесый из каждого VLAN'а. Я сделал следующим образом, установил nfs-сервер и подмонтировал по сети с устройств из соотведстующих VLAN'ов зашаренную папку. Потом просто копируя файлы, наблюдал systat'ом статитику на интерфейсах.

netflow1# ifconfig

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

options=8b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWCSUM>

ether 00:14:22:b1:e3:06

inet6 fe80::214:22ff:feb1:e306%em0 prefixlen 64 scopeid 0x1

media: Ethernet autoselect (1000baseSX <full-duplex>)

status: active

lagg: laggdev lagg0

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

options=8b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWCSUM>

ether 00:14:22:b1:e3:06

inet6 fe80::214:22ff:feb1:e307%em1 prefixlen 64 scopeid 0x2

media: Ethernet autoselect (1000baseSX <full-duplex>)

status: active

lagg: laggdev lagg0

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

inet6 fe80::1%lo0 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=8b<RXCSUM,TXCSUM,VLAN_MTU,VLAN_HWCSUM>

ether 00:14:22:b1:e3:06

media: Ethernet autoselect

status: active

laggproto lacp

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

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

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

ether 00:14:22:b1:e3:06

inet 10.10.10.18 netmask 0xffffff00 broadcast 10.10.10.255

media: Ethernet autoselect

status: active

vlan: 10 parent interface: lagg0

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

ether 00:14:22:b1:e3:06

inet 10.10.17.18 netmask 0xffffff00 broadcast 10.10.17.255

media: Ethernet autoselect

status: active

vlan: 17 parent interface: lagg0

netflow1#

У нас получилось два виртуальных интрефейса для VLAN'ов 10 і 17, и один виртуальный интерфейс, выполняющий агрегацию. Ниже приведена статистика нагрузки при одновременном копировании с двух хостов, примонтированных по nfs.

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

Load Average ||

Interface Traffic Peak Total

vlan17 in 16.040 MB/s 27.128 MB/s 3.475 GB

out 296.854 KB/s 503.104 KB/s 1.849 GB

vlan10 in 15.150 MB/s 17.765 MB/s 1.751 GB

out 280.022 KB/s 328.352 KB/s 2.191 GB

lagg0 in 31.279 MB/s 33.397 MB/s 1.280 GB

out 591.862 KB/s 631.911 KB/s 62.236 MB

lo0 in 0.000 KB/s 0.000 KB/s 103.969 KB

out 0.000 KB/s 0.000 KB/s 103.969 KB

em1 in 31.279 MB/s 33.397 MB/s 1.255 GB

out 295.836 KB/s 318.546 KB/s 2.035 GB

em0 in 0.023 KB/s 0.234 KB/s 35.756 MB

out 296.025 KB/s 315.969 KB/s 2.035 GB

Это производилось копирование с устройств на наш тестируемый хост. Как видим, ситуация не совсем понятная,

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

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

Load Average |

Interface Traffic Peak Total

vlan17 in 198.756 KB/s 27.128 MB/s 351.315 MB

out 8.186 MB/s 8.908 MB/s 2.366 GB

vlan10 in 147.494 KB/s 18.929 MB/s 806.246 MB

out 6.075 MB/s 10.464 MB/s 2.695 GB

lagg0 in 353.114 KB/s 36.143 MB/s 1.251 GB

out 14.301 MB/s 16.422 MB/s 1.095 GB

lo0 in 0.000 KB/s 0.000 KB/s 103.969 KB

out 0.000 KB/s 0.000 KB/s 103.969 KB

em1 in 353.154 KB/s 36.143 MB/s 1.226 GB

out 7.153 MB/s 8.211 MB/s 2.552 GB

em0 in 0.000 KB/s 0.982 KB/s 35.781 MB

out 7.147 MB/s 8.210 MB/s 2.552 GB

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

P.S. Остались нераскрытыми для меня два вопроса, первый - как такое сделать под 6.2; как заставить свич балансировать нагрузку на вход?

Обновлено: 12.03.2015