Вот задался вопросом балансировки. Ткните меня носом в каком направлении копать.
Что имеем.Каналы:
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. Буду рад любым предложениям и мнениям.
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/ifconfigSLEEP=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
А как дальше трафик гонять по нужным таблицам?
Думал метить нужный трафик, а потом просто сами таблицы маршрутизации менять, но как тогда быть с уже поднятыми соединениями? Ума не прилажу.....Выручайте чайника!!!!