Динамическое разделение скорости передачи данных

Обсуждение ПО и его настройки
Ответить
Schatten
Сообщения: 4
Зарегистрирован: 15 дек 2012, 23:35

Здравствуйте!
Пусть имеются 3 пользователя: user1, user2 и user3. Пользователи user1 и user2 имеют по одному компу, т. е. за ними закреплено по одному IP-адресу, а пользователь user3 имеет 2 компа, т. е. за ним закреплено 2 IP-адреса.
Нужно динамически разделять скорость передачи данных в зависимости от количества пользователей, пользующихся доступом в интернет. Т. е. для данного случая скорость сначала нужно разделить на 3 равные части, поскольку 3 пользователя пользуются доступом в интернет, затем для пользователя user3 нужно ещё раз разделить скорость пополам, поскольку за ним закреплено 2 IP-адреса.
Сейчас происходит динамическое распределение скорости передачи данных поровну между пользователями, пользующимися доступом в интернет, с помощью simple queues и типа очереди pcq. Скорость загрузки информации тарифного плана меняется в зависимости от времени: 4 Мб/с с 10:00 до 19:00 и 6 Мб/с в остальное время. Исходя из этого, было создано 3 простых очереди: queue1 с временем действия 00:00:00-09:59:59, queue2 — 10:00:00-18:59:59 и queue3 — 19:00:00-23:59:59.
Решение задачи я вижу в создании подочередей. Исходя из старшинства, получится такая структура:
queue1
- user1
- user2
- user3
- - user3_1
- - user3_2
queue2
- user1
- user2
- user3
- - user3_1
- - user3_2
queue3
- user1
- user2
- user3
- - user3_1
- - user3_2
Видно, что присутствуют 3 одинаковых фрагмента в родительских очередях. Т. о., например, при изменении количества пользователей мне придётся внести одинаковые изменения в эти фрагменты.
Можно ли решить эту задачу как-нибудь рациональнее или лаконичнее что ли?
И ещё вопрос: можно ли в качестве времени действия указать промежуток, начинающийся в текущем дне и заканчивающийся в следующем? Это мне нужно для объединения очередей queue1 и queue3. RouterOS позволяет указать 19:00:00-09:59:59, но очередь не работает.
Заранее спасибо.


iSupport
Сообщения: 2359
Зарегистрирован: 06 фев 2011, 20:44

начну с конца если надо с 21 до 09 то делается 2 правила

с 21 до 23-59 и с 0-00 до 9-00

А с очередями как то у вас сложно все.

я бы предложил жестко порезать скорость каждому на одном уровне, и сделать Берст тайм в пределах 30 секунд - это позволит грузить странницы с увеличенной скоростью. А если человек начинает качать - скорость через 30 сек возвращается к тарифной-базовой

Тому у кого 2 айпи адреса - порезать тариф пополам, ибо если не хочет роутер - пусть делит скорость


когда дойдете до 10 человек и 3х тарифов - спрашивайте, расскажу как тарифы на основе ip-adress-list делать


Граждане, сколько раз просил =) чем понятнее и точнее сформулирован вопрос - тем понятнее и точнее будет на него ответ.
Я просматриваю ВСЕ темы форума и стараюсь помочь в каждой из них
Поэтому, НА ЛС отвечаю в последнюю очередь
Schatten
Сообщения: 4
Зарегистрирован: 15 дек 2012, 23:35

iSupport писал(а):начну с конца если надо с 21 до 09 то делается 2 правила

с 21 до 23-59 и с 0-00 до 9-00

А с очередями как то у вас сложно все.

я бы предложил жестко порезать скорость каждому на одном уровне, и сделать Берст тайм в пределах 30 секунд - это позволит грузить странницы с увеличенной скоростью. А если человек начинает качать - скорость через 30 сек возвращается к тарифной-базовой

Тому у кого 2 айпи адреса - порезать тариф пополам, ибо если не хочет роутер - пусть делит скорость


когда дойдете до 10 человек и 3х тарифов - спрашивайте, расскажу как тарифы на основе ip-adress-list делать

Вы предлагаете то же что и я:
Schatten писал(а):создано 3 простых очереди: queue1 с временем действия 00:00:00-09:59:59, queue2 — 10:00:00-18:59:59 и queue3 — 19:00:00-23:59:59.

Это simple queues с типом pcq.
Затем создаются подочереди таким образом:
Schatten писал(а):queue1
- user1
- user2
- user3
- - user3_1
- - user3_2
queue2
- user1
- user2
- user3
- - user3_1
- - user3_2
queue3
- user1
- user2
- user3
- - user3_1
- - user3_2

Кроме этого, вы предлагаете "жестко порезать скорость каждому на одном уровне", т. е., как я понимаю, задать максимальные скорости для каждого пользователя: user1, user2 и user3. User3 со своими двумя IP-адресами будет сам выкручиваться.
В этом случае есть фрагмент, который присутствует в трёх родительских очередях:
- user1
- user2
- user3
- - user3_1
- - user3_2.
Т. о., указав для каждого максимальные скорости, при добавлении новых пользователей мне придётся их вручную пересчитывать и вбивать для каждого пользователя, да ещё в трёх родительских очередях. Мне же нужно, чтобы была всего одна структура пользователей.

Почитав форумы, у меня появилась идея. Можно попробовать выполнить следующие команды:

Код: Выделить всё

/queue simple add target-addresses=192.168.0.0/24 name=queue1 queue=pcq_upload/pcq_download

/queue simple add target-addresses=192.168.0.93 name=user1 parent=queue1
/queue simple add target-addresses=192.168.0.108 name=user2 parent=queue1

/queue simple add target-addresses=192.168.0.0/24 name=user3 parent=queue1 queue=pcq_upload/pcq_download

/queue simple add target-addresses=192.168.0.1 name=user3_1 parent=user3
/queue simple add target-addresses=192.168.0.64 name=user3_2 parent=user3

В результате их выполнения будет создана такая структура:
queue1
- user1
- user2
- user3
- - user3_1
- - user3_2
Затем пишется сценарий для изменения скорости в очереди queue1 и настраивается scheduler для его запуска в моменты, когда меняется скорость тарифного плана.
Это всего лишь мои мысли. Можно ли так сделать?


iSupport
Сообщения: 2359
Зарегистрирован: 06 фев 2011, 20:44

можно сделать адресс листы

например tarif_1
192.168.0.108
192.168.0.21
192.168.0.100

Затем в ip firewall mangle делаем
mark packet src adress list - tarif_1 packet_mark=tarif_1_out
mark packet dst adress list - tarif_1 packet_mark=tarif_1_in

и в queue будет одна група правил для данного тарифа

сколько бы человек там не было


Граждане, сколько раз просил =) чем понятнее и точнее сформулирован вопрос - тем понятнее и точнее будет на него ответ.
Я просматриваю ВСЕ темы форума и стараюсь помочь в каждой из них
Поэтому, НА ЛС отвечаю в последнюю очередь
Schatten
Сообщения: 4
Зарегистрирован: 15 дек 2012, 23:35

iSupport писал(а):можно сделать адресс листы

например tarif_1
192.168.0.108
192.168.0.21
192.168.0.100

Затем в ip firewall mangle делаем
mark packet src adress list - tarif_1 packet_mark=tarif_1_out
mark packet dst adress list - tarif_1 packet_mark=tarif_1_in

и в queue будет одна група правил для данного тарифа

сколько бы человек там не было

Так ведь в таком случае, вроде бы, скорость разделится поровну между IP-адресами из этих списков.

Похоже, решил задачу.
Сначала создал структуру
queue1
- user1
- user2
- user3
такими командами:

Код: Выделить всё

/queue simple add max-limit=512k/4M name=queue1 queue=pcq_upload/pcq_download target-addresses=192.168.0.0/24

/queue simple add max-limit=512k/4M name=user1 parent=queue1 queue=pcq_upload/pcq_download target-addresses=192.168.0.93
/queue simple add max-limit=512k/4M name=user2 parent=queue1 queue=pcq_upload/pcq_download target-addresses=192.168.0.108
/queue simple add max-limit=512k/4M name=user3 parent=queue1 queue=pcq_upload/pcq_download target-addresses=192.168.0.1,192.168.0.64

Затем создал сценарий:

Код: Выделить всё

/system script add name=speed_change source="{\r\n:local Speed [/queue simple get queue1 max-limit];\r\n:if (\$Speed!='512k/4M') do={:set Speed '512k/4M'} else={:set Speed '512k/6M'}\r\n:foreach Queue in=[/queue simple find] do={/queue simple set \$Queue max-limit=\$Speed}\r\n}"

Наконец, создал в планировщике две задачи для запуска сценария утром и вечером:

Код: Выделить всё

/system scheduler add interval=24h name=speed_change1 on-event=speed_change start-time=10:00:00
/system scheduler add interval=24h name=speed_change2 on-event=speed_change start-time=19:00:00


Кто что скажет на счёт такого решения?

И ещё вопрос: стоит ли переходить в моём случае на очереди queue tree?


iSupport
Сообщения: 2359
Зарегистрирован: 06 фев 2011, 20:44

на мой вкус - сделать 2 скрипта

Speed_UP
Speed_Down

и в них обязательно отписывать в лог отчет о том что скрипт выполнен успешно


Граждане, сколько раз просил =) чем понятнее и точнее сформулирован вопрос - тем понятнее и точнее будет на него ответ.
Я просматриваю ВСЕ темы форума и стараюсь помочь в каждой из них
Поэтому, НА ЛС отвечаю в последнюю очередь
Schatten
Сообщения: 4
Зарегистрирован: 15 дек 2012, 23:35

iSupport писал(а):на мой вкус - сделать 2 скрипта

Speed_UP
Speed_Down

и в них обязательно отписывать в лог отчет о том что скрипт выполнен успешно

Спасибо за совет.


Ответить