gall 6 Опубликовано: 2008-09-20 20:11:34 Share Опубликовано: 2008-09-20 20:11:34 Вкратце суть проблемы. Есть сервер Debian на нем СТГ, есть куча юзеров с анлимами которым режу скорость с помощью HTB. В последнее время, когда онлайн переваливает за 40 юзеров, появляются проблемы со скоростью у некоторых. Вместо положенных 128-256кбит у юзеров 20-30кбит...или вообще ничего не открывается. Через некоторое время опять все стает в норму. Подскажите куда покопать. Вот все что касается шейпера Старт родительского класса tc qdisc add dev eth0 root handle 1: htb default 999 tc class add dev eth0 parent 1: classid 1:1 htb rate 100Mbit ceil 100Mbit burst 1024k Далее в скрипте OnConnect старгазера даю юзеру полосу, соответствующую его тарифу hex=$ID hexa=$ID let "hex += 800" let "hexa += 801" case $tariff in u_32) speedmin=32kbit;speedmax=128kbit;uploadmin=32kbit;uploadmax=64kbit;; u_64) speedmin=64kbit;speedmax=256kbit;uploadmin=32kbit;uploadmax=64kbit;; esac if [[ $tariff = u_32 || $tariff = u_64 ]] then #исходящий tc class add dev eth0 parent 1:1 classid 1:$hexa htb rate $uploadmin ceil $uploadmax burst 40k tc filter add dev eth0 protocol ip parent 1: handle $hexa prio 1 fw classid 1:$hexa #входящий tc class add dev eth0 parent 1:1 classid 1:$hex htb rate $speedmin ceil $speedmax burst 100k tc filter add dev eth0 protocol ip parent 1: handle 800::$hex prio 3 u32 match ip dst $IP flowid 1:$hex fi Помогите решить задачу. Ссылка на сообщение Поделиться на других сайтах
rsst 406 Опубліковано: 2008-09-20 20:26:24 Share Опубліковано: 2008-09-20 20:26:24 Вот все что касается шейпераСтарт родительского класса tc qdisc add dev eth0 root handle 1: htb default 999 tc class add dev eth0 parent 1: classid 1:1 htb rate 100Mbit ceil 100Mbit burst 1024k у вас 100Mbit входящий канал? или это только скорость интерфейса? Ссылка на сообщение Поделиться на других сайтах
gall 6 Опубліковано: 2008-09-20 20:36:01 Автор Share Опубліковано: 2008-09-20 20:36:01 у вас 100Mbit входящий канал? или это только скорость интерфейса? это скорость интерфейса. Ссылка на сообщение Поделиться на других сайтах
rsst 406 Опубліковано: 2008-09-20 20:42:08 Share Опубліковано: 2008-09-20 20:42:08 это скорость интерфейса. а, как я понимаю, должна быть скорость входящего канала... при этом суммарная скорость в подклассах не должна превышать скорости корневого класса. или совсем убирайте корневой класс, или что-то думайте еще Ссылка на сообщение Поделиться на других сайтах
gall 6 Опубліковано: 2008-09-20 20:45:05 Автор Share Опубліковано: 2008-09-20 20:45:05 а, как я понимаю, должна быть скорость входящего канала... при этом суммарная скорость в подклассах не должна превышать скорости корневого класса. или совсем убирайте корневой класс, или что-то думайте еще Скорости канала хватает.... 10Мбит При таком количестве онлайнеров и таких скоростях, думаю должно хватать... Ссылка на сообщение Поделиться на других сайтах
rsst 406 Опубліковано: 2008-09-21 07:26:13 Share Опубліковано: 2008-09-21 07:26:13 Скорости канала хватает.... 10МбитПри таком количестве онлайнеров и таких скоростях, думаю должно хватать... значит в корневом классе должно быть прописано 10Mbit Кстати, tc class add dev eth0 parent 1:1 classid 1:$hexa htb rate $uploadmin ceil $uploadmax burst 40k tc filter add dev eth0 protocol ip parent 1: handle $hexa prio 1 fw classid 1:$hexa это вы получается всем ограничиваете исходящую полосу, а не одному юзеру? Ссылка на сообщение Поделиться на других сайтах
gall 6 Опубліковано: 2008-09-21 10:06:24 Автор Share Опубліковано: 2008-09-21 10:06:24 значит в корневом классе должно быть прописано 10Mbit Кстати, tc class add dev eth0 parent 1:1 classid 1:$hexa htb rate $uploadmin ceil $uploadmax burst 40k tc filter add dev eth0 protocol ip parent 1: handle $hexa prio 1 fw classid 1:$hexa это вы получается всем ограничиваете исходящую полосу, а не одному юзеру? По поводу 10мбит на интерфейсе, не думаю что это критично. По исходящему, вполне может быть...Тут я не уверен ни в чем((( Сейчас сделал таким образом Старт: tc qdisc add dev eth0 root handle 1: htb default 999 tc class add dev eth0 parent 1: classid 1:1 htb rate 100Mbit ceil 100Mbit burst 10k И правила для каждого: tc class add dev eth0 parent 1:1 classid 1:$hex htb rate $speedmin ceil $speedmax burst 100k tc filter add dev eth0 protocol ip parent 1: handle 800::$hex prio 2 u32 match ip dst $IP flowid 1:$hex tc qdisc add dev eth0 parent 1:$hex handle $hex: sfq perturb 10 Исходящий пока отключил. Онлайн 35, вроде еще никто не жаловался. Если есть спецы по данному вопросу, помогите пожалуйста разрулить тему шейпа. У меня крышу сносит, когда пытаюсь раздуплить его. Ссылка на сообщение Поделиться на других сайтах
rsst 406 Опубліковано: 2008-09-21 10:47:30 Share Опубліковано: 2008-09-21 10:47:30 По поводу 10мбит на интерфейсе, не думаю что это критично.По исходящему, вполне может быть...Тут я не уверен ни в чем((( а я более чем уверен, потому как сам наступал на такие грабли. Рекомендую совсем убрать корневой класс. Сейчас сделал таким образом Старт: tc qdisc add dev eth0 root handle 1: htb default 999 tc class add dev eth0 parent 1: classid 1:1 htb rate 100Mbit ceil 100Mbit burst 10k И правила для каждого: tc class add dev eth0 parent 1:1 classid 1:$hex htb rate $speedmin ceil $speedmax burst 100k tc filter add dev eth0 protocol ip parent 1: handle 800::$hex prio 2 u32 match ip dst $IP flowid 1:$hex tc qdisc add dev eth0 parent 1:$hex handle $hex: sfq perturb 10 последняя строка не обязательна. на тему шейпа исходящего трафа (да и вообще, для удобства) рекомендую рыть в сторону IMQ или IFB. Исходящий пока отключил. Онлайн 35, вроде еще никто не жаловался.Если есть спецы по данному вопросу, помогите пожалуйста разрулить тему шейпа. У меня крышу сносит, когда пытаюсь раздуплить его. Тут ничего сложного нет. Инфа в инете есть - opennet.ru вам в руки. Ссылка на сообщение Поделиться на других сайтах
gall 6 Опубліковано: 2008-09-21 11:25:36 Автор Share Опубліковано: 2008-09-21 11:25:36 а я более чем уверен, потому как сам наступал на такие грабли.Рекомендую совсем убрать корневой класс. Тут подумаю насчет корневого класса. последняя строка не обязательна. на тему шейпа исходящего трафа (да и вообще, для удобства) рекомендую рыть в сторону IMQ или IFB. Изначально во время тестов все шейпалось отлично (онлайнеров на тесте было 3-5 всего), и внутрь и наружу. Проблема именно появилась при большом онлайне. Буду думать. Тут ничего сложного нет. Инфа в инете есть - opennet.ru вам в руки. За пендаль на опеннет спасибо конечно, но все, что я делал, вычитывал и оттуда тоже. Адрес этот знаю хорошо. Но сюда я написал пытаясь найти помощь, а не редирект на опеннет. Ссылка на сообщение Поделиться на других сайтах
rsst 406 Опубліковано: 2008-09-21 13:52:45 Share Опубліковано: 2008-09-21 13:52:45 Тут подумаю насчет корневого класса. Изначально во время тестов все шейпалось отлично (онлайнеров на тесте было 3-5 всего), и внутрь и наружу. Проблема именно появилась при большом онлайне. проблема не в большом онлайне. Тут подумаю насчет корневого класса.За пендаль на опеннет спасибо конечно, но все, что я делал, вычитывал и оттуда тоже. Адрес этот знаю хорошо. Но сюда я написал пытаясь найти помощь, а не редирект на опеннет. Я тоже искал помощь на форумах, а нашел на опеннете Реально наружу у вас в такой конфигурации все шейпится криво, точнее вообще ничего не шейпится, ибо шейпить надо на исходящем интерфейсе, а у вас eth0 входящий для трафика от юзеров. Также входящий трафик будет шейпится криво по причине прописанных 100Mbit в корневом классе. И таки ройте в сторону IMQ или IFB. вот мой шейпер (IFB): #!/bin/sh prefix="" psql=/usr/local/pgsql/bin/psql tc=`which tc` ifconfig=`which ifconfig` khix=/usr/local/ipcad/khix/res cl=2900 dis="htb" # СБРОС ПРАВИЛ ----------------------------- $prefix $tc qdisc del dev eth0 root $prefix $tc qdisc del dev eth0 ingress $prefix $tc qdisc del dev ifb0 root $prefix $tc qdisc del dev ifb0 ingress $prefix $tc qdisc add dev eth0 ingress $prefix $tc filter add dev eth0 parent ffff: protocol ip u32 match ip dst 172.22.0.0/24 flowid 2:1 action mirred egress redirect dev ifb0 echo -------------- $prefix $tc qdisc add dev eth0 root handle 2: prio $prefix $tc filter add dev eth0 parent 2: protocol ip u32 match ip src 172.22.0.0/24 flowid 2:2 action mirred egress redirect dev ifb0 $prefix $ifconfig ifb0 up echo ---------------- ###################################################### # ПРИМЕР ограничения входящего трафика # маркировка IPTABLES недоступна ###################################################### $prefix $tc qdisc add dev ifb0 root handle 1: htb #rate 2900kbit burst 256k $prefix $tc class add dev ifb0 parent 1: classid 1:3 htb rate 2950kbit burst 512kb n=5 m=5 k=5 x=0 n1=0 m1=0 n2=0 m2=0 ipaddr=`$psql -t -q -p 5444 -d flow -U postgres -c "select ip from stat where active=true order by ip"` for b in $ipaddr; do let "n=n+1" let "m=m+1" sp2=0 sp31=0 sdin2=0 sp4=0 #let "k=k+1" #id=`$psql -t -q -p 5444 -d flow -U postgres -c "select id from stat where ip='$b'"` pr=`$psql -t -q -p 5444 -d flow -U postgres -c "select priority from stat where ip='$b'"` sp=`$psql -t -q -p 5444 -d flow -U postgres -c "select trim(both ' ' from text(speed)) from stat where ip='$b'"` #sp2=`$psql -t -q -p 5444 -d flow -U postgres -c "select trim(both ' ' from text(speed/2)) from stat where ip='$b'"` devider=`$psql -t -q -p 5444 -d flow -U postgres -c "select trim(both ' ' from text(devider)) from tariff_definitions,stat where (stat.tariff_id=tariff_definitions.tariff_id) and (stat.ip='$b')"` sp3=`$psql -t -q -p 5444 -d flow -U postgres -c "select trim(both ' ' from text(speed)) from stat where ip='$b'"` khix_speed=`$psql -t -q -p 5444 -d flow -U postgres -c "select trim(both ' ' from text(khix_speed)) from stat where ip='$b'"` sdin=`$psql -t -q -p 5444 -d flow -U postgres -c "select trim(both ' ' from text(speedin)) from stat where ip='$b'"` #speedin2=`$psql -t -q -p 5444 -d flow -U postgres -c "select trim(both ' ' from text(speedin/2)) from stat where ip='$b'"` group=`$psql -t -q -p 5444 -d flow -U postgres -c "select trim(both ' ' from text(group_id)) from stat,users_groups where (ip='$b') and (stat.id=users_groups.user_id)"` let "pr=pr-1" let "sdin2=sdin" let "sp2=sp/devider" #let "sp3=sp3*khix_speed" #let "sp31=sp3*khix_speed" #акция - khix шара на месяц, до 17 сентября let "sp3=5000*khix_speed" #let "sp4=sp3/devider" #акция - khix шара на месяц, до 17 сентября #let "sp4=sp3/2" let "sp4=sp3" #echo $sp3 #let "sp3=sp" burst=32 echo "$sp" # входящий к юзеру echo $b $sp3\kbit let "n=n+1" let "m=m+1" $prefix $tc class add dev ifb0 parent 1: classid 1:$n htb rate $sp4\kbit ceil $sp3\kbit $prefix $tc qdisc add dev ifb0 parent 1:$n handle $m: sfq perturb 10 $prefix $tc filter add dev ifb0 parent 1: protocol ip prio 1 u32 match ip dst $b match ip tos 0x10 0xff flowid 1:$n let "n=n+1" let "m=m+1" $prefix $tc class add dev ifb0 parent 1:3 classid 1:$n htb rate $sp2\kbit burst $burst\kb ceil $sp\kbit $prefix $tc qdisc add dev ifb0 parent 1:$n handle $m: sfq perturb 10 $prefix $tc filter add dev ifb0 parent 1: protocol ip prio $pr u32 match ip dst $b match ip tos 0x08 0xff flowid 1:$n # исходящий от юзера let "n=n+1" let "m=m+1" $prefix $tc class add dev ifb0 parent 1: classid 1:$n htb rate $sdin2\kbit ceil $sdin2\kbit $prefix $tc qdisc add dev ifb0 parent 1:$n handle $m: sfq perturb 10 $prefix $tc filter add dev ifb0 parent 1: protocol ip prio $pr u32 match ip src $b flowid 1:$n done exit 0; инфа для шейпера берется из базы postgresql. Трафик из 2-х входящих дырок, делится по предваррительно проставленным на роутере tos. Соответственно из одной из дырок ограничен до 5Mbit (локальная точка обмена трафиком), из другой ограничения другие Скрипт запускается при старте системы и автоматом (другим скриптом) перезапускается при изменениях параметров юзеров или тарифных планов. devider - коэффициент прибылности тарифа Ссылка на сообщение Поделиться на других сайтах
VIPrules 0 Опубліковано: 2008-10-06 05:47:43 Share Опубліковано: 2008-10-06 05:47:43 2gall А использовать HTB принципиально? Просто я в нем не шарю, но есть рабочий вариант на CBQ. Если интересно, могу скинуть скрипты. В моей сети порядка 800 юзеров, из них примерно треть анлимщики. Внешняя полоса 7 Мбит/с. Режется 60% на 40% в пользу анлимщиков, причем, в случае простоя полосы лимитчиков, анлимщики могут налезать на их полосу (если надо), а наоборот - нет. Максимальная скорость анлима - 256 Кбит/с. Максимальная скорость лимита - 512 Кбит/с. Для офиса выделено 2 Мбит/с. Эта схема работает уже более полугода. Нареканий нет. Потери в скорости могут быть только по трем причинам: 1. Суммарно не хватает общей полосы, чтобы всем дать оплаченную скорость. Последнее уже не критично, поскольку текущей полосы хватает (когда меньше была, тогда это было актуально, особенно по вечерам и выходным). 2. Бока у прова. 3. Тормозит ресурс-источник. Ссылка на сообщение Поделиться на других сайтах
tramX 12 Опубліковано: 2008-10-06 06:39:49 Share Опубліковано: 2008-10-06 06:39:49 CBQ отличная вестч http://cybersity.homelinux.net/index.php?o...6&Itemid=45 Если работает NAT нужно маркировать пакеты Как правила в HTB добавляете? В папке, в которую указывает HTB_PATH, создаем следующие файлы: eth0: Код: R2Q=20 DEFAULT=0 R2Q - коэффициент, определяющий соотношение точности/скорости работы шейпера (см. Замечание 1). DEFAULT - идентификатор класса, в который попадают пакеты, если они не попадают под другие правила. Класс с идентификатором 0 существует всегда и пропускает пакеты без всякого шейпинга, то есть на полной скорости. Этим файлом мы инициализировали шейпер на интерфейсе eth0. eth0-2.root: Код: RATE=20Mbit Этим файлом мы создали корневой класс траффика на интерфейсе eth0 и ограничили максимальную скорость отдачи через этот класс 20-ю мегабитами. eth0-2:2001: Код: RATE=100Kbit CEIL=1Mbit LEAF=sfq RULE=192.168.0.1 Этим файлом мы создали класс для первого клиента. RATE - гарантируемая скорость для клиента. Поскольку в нашем случае не нужно гарантировать никакой скорости, но HTB этого требует, исходим из неравенства: 20000Кбит / 150 > RATE. CEIL - максимальная скорость для клиента при свободном канале. LEAF - указывает, что класс является одним из листов дерева, то есть в него попадает трафик, удовлетворяющий определенному правилу (RULE). Параметр sfq означает, что мы хотим, чтобы внутри этого класса скорость распределялась равномерно между сессиями. RULE - правило, задающее, какой трафик будет попадать в этот класс (см. Замечание 1). В данном случае в класс попадает весь трафик, имеющий IP назначения 192.168.0.1. eth0-2:2002: Код: RATE=100Kbit CEIL=1Mbit LEAF=sfq RULE=192.168.0.2 ......... eth0-2:2150: Код: RATE=100Kbit CEIL=1Mbit LEAF=sfq RULE=192.168.0.150 Замечание 1: О назначении и значениях параметров, которые указываются в файлах, и о именах файлов можно узнать из скрипта htb.init - там вверху есть неплохая справка. Замечание 2: В именах файлов всё, что идет после точки, является комментарием. Замечание 3: В файлах можно использовать комментарии, начинающиеся с #. Ссылка на сообщение Поделиться на других сайтах
gall 6 Опубліковано: 2008-10-06 07:26:38 Автор Share Опубліковано: 2008-10-06 07:26:38 CBQ отличная вестч http://cybersity.homelinux.net/index.php?o...6&Itemid=45Если работает NAT нужно маркировать пакеты Как правила в HTB добавляете? В папке, в которую указывает HTB_PATH, создаем следующие файлы: eth0: Код: R2Q=20 DEFAULT=0 R2Q - коэффициент, определяющий соотношение точности/скорости работы шейпера (см. Замечание 1). DEFAULT - идентификатор класса, в который попадают пакеты, если они не попадают под другие правила. Класс с идентификатором 0 существует всегда и пропускает пакеты без всякого шейпинга, то есть на полной скорости. Этим файлом мы инициализировали шейпер на интерфейсе eth0. eth0-2.root: Код: RATE=20Mbit Этим файлом мы создали корневой класс траффика на интерфейсе eth0 и ограничили максимальную скорость отдачи через этот класс 20-ю мегабитами. eth0-2:2001: Код: RATE=100Kbit CEIL=1Mbit LEAF=sfq RULE=192.168.0.1 Этим файлом мы создали класс для первого клиента. RATE - гарантируемая скорость для клиента. Поскольку в нашем случае не нужно гарантировать никакой скорости, но HTB этого требует, исходим из неравенства: 20000Кбит / 150 > RATE. CEIL - максимальная скорость для клиента при свободном канале. LEAF - указывает, что класс является одним из листов дерева, то есть в него попадает трафик, удовлетворяющий определенному правилу (RULE). Параметр sfq означает, что мы хотим, чтобы внутри этого класса скорость распределялась равномерно между сессиями. RULE - правило, задающее, какой трафик будет попадать в этот класс (см. Замечание 1). В данном случае в класс попадает весь трафик, имеющий IP назначения 192.168.0.1. eth0-2:2002: Код: RATE=100Kbit CEIL=1Mbit LEAF=sfq RULE=192.168.0.2 ......... eth0-2:2150: Код: RATE=100Kbit CEIL=1Mbit LEAF=sfq RULE=192.168.0.150 Замечание 1: О назначении и значениях параметров, которые указываются в файлах, и о именах файлов можно узнать из скрипта htb.init - там вверху есть неплохая справка. Замечание 2: В именах файлов всё, что идет после точки, является комментарием. Замечание 3: В файлах можно использовать комментарии, начинающиеся с #. Файловую систему правил я использовал пока юзеров было 20-30. При большом количестве народу даже минимальная смена любого из параметров повлечет неимоверный гемор с редактированием всех файлов. Поэтому использую динамические правила, которые создаются при коннекте юзера и удалябтся при дисконнекте. Использование HTB не принципиально, но он дает возможность использовать свободную полосу...В CBQ я такого параметра не вычитал. В данный момент все вроде нормально работает. Входящий траф режется жестко (пришлось отключить на время использование свободной полосы), исходящий тоже вроде без нареканий порезало через метки iptables. Но все таки хотелось бы решить задачу с использованием полосы по максимуму. Ссылка на сообщение Поделиться на других сайтах
tramX 12 Опубліковано: 2008-10-06 07:52:25 Share Опубліковано: 2008-10-06 07:52:25 Поэтому использую динамические правила, которые создаются при коннекте юзера и удалябтся при дисконнекте. Для VPN или PPPoE соединений? Поделитесь опытом Ссылка на сообщение Поделиться на других сайтах
Ziki 11 Опубліковано: 2008-10-17 22:42:52 Share Опубліковано: 2008-10-17 22:42:52 Недавно столкнулся с тойже проблемой, когда количество он-лайн юзеров привышает 30 шт, скорость сразу падает, при чем, чем ниже скорость дана юзеру, тем больше ощютима разница (тоесть если у юзера скорость 128, то она падает до 70-90, а если 64, то падает до 2-3кб/с), правила шейпера создаю по при помощи файловой системы, конфиг выглядит так: для рут конфиг такой eth1-2.root: RATE=7Mbit для пользователей такой eth1-2:038.25: RATE=256Kbit CEIL=256Кbit LEAF=sfq PRIO=1 RULE=192.168.1.25 Подскажите пожалуйса в чем может быть проблема Ссылка на сообщение Поделиться на других сайтах
Bungee 0 Опубліковано: 2008-10-18 15:37:38 Share Опубліковано: 2008-10-18 15:37:38 удалено Ссылка на сообщение Поделиться на других сайтах
Ziki 11 Опубліковано: 2008-10-20 20:43:56 Share Опубліковано: 2008-10-20 20:43:56 Подскажите как решить мою проблему, в какую сторону копать? Ссылка на сообщение Поделиться на других сайтах
gall 6 Опубліковано: 2008-10-20 21:04:24 Автор Share Опубліковано: 2008-10-20 21:04:24 Недавно столкнулся с тойже проблемой, когда количество он-лайн юзеров привышает 30 шт, скорость сразу падает, при чем, чем ниже скорость дана юзеру, тем больше ощютима разница (тоесть если у юзера скорость 128, то она падает до 70-90, а если 64, то падает до 2-3кб/с), правила шейпера создаю по при помощи файловой системы, конфиг выглядит так: для рут конфиг такой eth1-2.root: RATE=7Mbit для пользователей такой eth1-2:038.25: RATE=256Kbit CEIL=256Кbit LEAF=sfq PRIO=1 RULE=192.168.1.25 Подскажите пожалуйса в чем может быть проблема 256*30 уже больше 7 или канал бери больше или скорость юзерам ставь меньше Ссылка на сообщение Поделиться на других сайтах
Ziki 11 Опубліковано: 2008-10-21 08:55:33 Share Опубліковано: 2008-10-21 08:55:33 256*30 уже больше 7или канал бери больше или скорость юзерам ставь меньше такая скорость не у всех, в основном стоит До.... на 30 человек канала должно хватать ( в общем на канал я не грешу), в чом еще может быть причина такого глюка? Ссылка на сообщение Поделиться на других сайтах
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВхід
Уже зарегистрированы? Войдите здесь.
Войти сейчас