gall 6 Posted 2008-09-20 20:11:34 Share Posted 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 Помогите решить задачу. Link to post Share on other sites
rsst 406 Posted 2008-09-20 20:26:24 Share Posted 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 входящий канал? или это только скорость интерфейса? Link to post Share on other sites
gall 6 Posted 2008-09-20 20:36:01 Author Share Posted 2008-09-20 20:36:01 у вас 100Mbit входящий канал? или это только скорость интерфейса? это скорость интерфейса. Link to post Share on other sites
rsst 406 Posted 2008-09-20 20:42:08 Share Posted 2008-09-20 20:42:08 это скорость интерфейса. а, как я понимаю, должна быть скорость входящего канала... при этом суммарная скорость в подклассах не должна превышать скорости корневого класса. или совсем убирайте корневой класс, или что-то думайте еще Link to post Share on other sites
gall 6 Posted 2008-09-20 20:45:05 Author Share Posted 2008-09-20 20:45:05 а, как я понимаю, должна быть скорость входящего канала... при этом суммарная скорость в подклассах не должна превышать скорости корневого класса. или совсем убирайте корневой класс, или что-то думайте еще Скорости канала хватает.... 10Мбит При таком количестве онлайнеров и таких скоростях, думаю должно хватать... Link to post Share on other sites
rsst 406 Posted 2008-09-21 07:26:13 Share Posted 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 это вы получается всем ограничиваете исходящую полосу, а не одному юзеру? Link to post Share on other sites
gall 6 Posted 2008-09-21 10:06:24 Author Share Posted 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, вроде еще никто не жаловался. Если есть спецы по данному вопросу, помогите пожалуйста разрулить тему шейпа. У меня крышу сносит, когда пытаюсь раздуплить его. Link to post Share on other sites
rsst 406 Posted 2008-09-21 10:47:30 Share Posted 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 вам в руки. Link to post Share on other sites
gall 6 Posted 2008-09-21 11:25:36 Author Share Posted 2008-09-21 11:25:36 а я более чем уверен, потому как сам наступал на такие грабли.Рекомендую совсем убрать корневой класс. Тут подумаю насчет корневого класса. последняя строка не обязательна. на тему шейпа исходящего трафа (да и вообще, для удобства) рекомендую рыть в сторону IMQ или IFB. Изначально во время тестов все шейпалось отлично (онлайнеров на тесте было 3-5 всего), и внутрь и наружу. Проблема именно появилась при большом онлайне. Буду думать. Тут ничего сложного нет. Инфа в инете есть - opennet.ru вам в руки. За пендаль на опеннет спасибо конечно, но все, что я делал, вычитывал и оттуда тоже. Адрес этот знаю хорошо. Но сюда я написал пытаясь найти помощь, а не редирект на опеннет. Link to post Share on other sites
rsst 406 Posted 2008-09-21 13:52:45 Share Posted 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 - коэффициент прибылности тарифа Link to post Share on other sites
VIPrules 0 Posted 2008-10-06 05:47:43 Share Posted 2008-10-06 05:47:43 2gall А использовать HTB принципиально? Просто я в нем не шарю, но есть рабочий вариант на CBQ. Если интересно, могу скинуть скрипты. В моей сети порядка 800 юзеров, из них примерно треть анлимщики. Внешняя полоса 7 Мбит/с. Режется 60% на 40% в пользу анлимщиков, причем, в случае простоя полосы лимитчиков, анлимщики могут налезать на их полосу (если надо), а наоборот - нет. Максимальная скорость анлима - 256 Кбит/с. Максимальная скорость лимита - 512 Кбит/с. Для офиса выделено 2 Мбит/с. Эта схема работает уже более полугода. Нареканий нет. Потери в скорости могут быть только по трем причинам: 1. Суммарно не хватает общей полосы, чтобы всем дать оплаченную скорость. Последнее уже не критично, поскольку текущей полосы хватает (когда меньше была, тогда это было актуально, особенно по вечерам и выходным). 2. Бока у прова. 3. Тормозит ресурс-источник. Link to post Share on other sites
tramX 12 Posted 2008-10-06 06:39:49 Share Posted 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: В файлах можно использовать комментарии, начинающиеся с #. Link to post Share on other sites
gall 6 Posted 2008-10-06 07:26:38 Author Share Posted 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. Но все таки хотелось бы решить задачу с использованием полосы по максимуму. Link to post Share on other sites
tramX 12 Posted 2008-10-06 07:52:25 Share Posted 2008-10-06 07:52:25 Поэтому использую динамические правила, которые создаются при коннекте юзера и удалябтся при дисконнекте. Для VPN или PPPoE соединений? Поделитесь опытом Link to post Share on other sites
Ziki 11 Posted 2008-10-17 22:42:52 Share Posted 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 Подскажите пожалуйса в чем может быть проблема Link to post Share on other sites
Bungee 0 Posted 2008-10-18 15:37:38 Share Posted 2008-10-18 15:37:38 удалено Link to post Share on other sites
Ziki 11 Posted 2008-10-20 20:43:56 Share Posted 2008-10-20 20:43:56 Подскажите как решить мою проблему, в какую сторону копать? Link to post Share on other sites
gall 6 Posted 2008-10-20 21:04:24 Author Share Posted 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 или канал бери больше или скорость юзерам ставь меньше Link to post Share on other sites
Ziki 11 Posted 2008-10-21 08:55:33 Share Posted 2008-10-21 08:55:33 256*30 уже больше 7или канал бери больше или скорость юзерам ставь меньше такая скорость не у всех, в основном стоит До.... на 30 человек канала должно хватать ( в общем на канал я не грешу), в чом еще может быть причина такого глюка? Link to post Share on other sites
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now