URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID1
Нить номер: 85540
[ Назад ]

Исходное сообщение
"'Умная-приоритетная' балансировка n-каналов связи..."

Отправлено COPOKA , 06-Июн-09 01:09 
Вот задался вопросом балансировки.  Ткните меня носом в каком направлении копать.
Что имеем.

Каналы:
1-й  канал  (входящая 1 Мбит/с)   (исходящая 5 Мбит/с)  
2-й канал ( входящая 5 Мбит/с)   (исходящая  1 Мбит/с)  
3-й канал (входящая 10 Мбит/с )  (исходящая 10 Мбит/с)

Трафик:
1: Требующие приоритета по входящей скорости.
DC & TORRENTs, HTTP, игры и прочее
2: Требующие приоритета по исходящей скорости.
трафик с определённых хостов локальной сети, от куда идёт «заливка» контента в интернет.
3: Трафик «привязанный»  к определённым каналам.
Например VoIP на 3-ем канале у меня всегда получает свои 6 Мбит/с.

Задача:
При текущей загрузке канала №3  на 90% перекидывать новые соединения на другой канал.
DC & TORRENTs, игры и прочее перекидываются  на канал №2
Трафик с upload-ом в инет перекидывается на  канал №1
VoIP остаётся на канале №3.
При загрузке канала №2 на 90%
DC & TORRENTs, игры и прочее перекидываются  на канал №1 (там они имеют больший приоритет чем upload трафик с определённых хостов )
При снижении нагрузки на канал №2  до уровня 50% новые соединения поднимаются на канале №2.
При снижении нагрузки на канал №3  до уровня 50% новые соединения поднимаются на канале №3.


Вопрос №1:
Чем и как мерить загрузку  канала?  И какие интервалы для замера лучше брать?  Возможен замер средней нагрузки за определённый период(например 5 сек.)?

Вопрос №2:
Чем и как перекидывать новые соединения на другие каналы?

P.S. В голове пока крутится -  (предположительно использовать разные таблицы маршрутизации для новых соединений)  То есть ставить метки и по этим меткам рулить.  Но как эти метки выставить в зависимости от загрузки канала?  Если метить через iptables то при смене правил надо будет перезагружать таблицы. Что разорвёт уже существующие соединения, а это не допустимо.

P.S.S. Буду рад любым предложениям и мнениям.


Содержание

Сообщения в этом обсуждении
"'Умная-приоритетная' балансировка n-каналов связи..."
Отправлено COPOKA , 06-Июн-09 02:29 
P.S.S.S.

Как вариант для измерения загруженности интерфейса можно использовать небольшой скриптик.

#!/bin/sh

# first option may be an interface name
IF=$1

#eth0 is a default if interface not specified
IF=${IF:=eth0}

     AWK=/usr/bin/awk
IFCONFIG=/sbin/ifconfig

SLEEP=5

first=( `$IFCONFIG $IF | $AWK '/RX bytes/ { split($2,a,":"); \
                               split($6,b,":");              \
                               print a[2], b[2]}'` )

sleep $SLEEP

$IFCONFIG $IF | $AWK -v p=$SLEEP -v r=${first[0]} -v t=${first[1]} \
                 '/RX bytes/ { split($2,a,":"); split($6,b,":");   \
                  print "RX = "(a[2]-r)/p" B/s \t TX = "(b[2]-t)/p" B/s"}'


Взял его от сюда http://www.linux.org.ru/view-message.jsp?msgid=1677885#1678209


А как дальше трафик гонять по нужным таблицам?
Думал метить нужный трафик, а потом просто сами таблицы маршрутизации менять, но как тогда быть с уже поднятыми соединениями?  Ума не прилажу.....

Выручайте чайника!!!!