- Squid delay pools не работает
- Блог о системном администрировании. Статьи о Linux, Windows, СХД NetApp и виртуализации.
- Как работает ограничение скорости (delay pools) в squid
- Настройка delay pools
- Параметры конфигурационного файла для настройки delay pools
- Классы delay pools
- Задание параметров (delay_parameters) для разных классов пулов (delay_class)
- Примеры delay pools
- Ограничения delay pools и нюансы работы
Squid delay pools не работает
Драсьте!
Возникла необходимость ограничить скорость пользователям, для этого решил воспользоваться delay_pools. Вроде делаю всё правильно, но отчего-то не работает, вот выдержка из конфига (конфиг эксперементальный):
.
acl it src 10.0.0.2/255.255.255.255 10.0.0.13/255.255.255.255 10.0.0.23/255.255.255.255
acl lan src 10.0.0.0/24
acl all src 0.0.0.0/0.0.0.0
# ещё определение разных подразделений по ip, портов и методов соединения
.
delay_pools 2
delay_class 1 1
delay_class 2 1
delay_access 1 allow it
delay_access 1 deny all
delay_access 2 allow lan
delay_access 2 deny all
delay_parameters 1 5000/5000
delay_parameters 2 -1/-1
Для проверки качаю фильм с апача, который стоит на том же сервере, что и сквид. Мой ip — 10.0.0.2, т.е. я отношусь к acl — it.
Фильм качается со скоростью около 10 мбайт/сек — т.е. ограничение скорости не работает.
Версии:
Linux gtw 2.6.21.3 #6 SMP Fri Dec 7 13:39:42 EST 2007 x86_64 (изначально Мандрива 2007.0, ядро пересобрано)
Squid Cache: Version 2.6.STABLE1
configure options: . ‘—enable-delay-pools’.
| Оглавление |
|
| Сообщения по теме | [Сортировка по времени | RSS] |
| 1 . «delay_pools — не работает» | + / – | |
| Сообщение от Andrey Mitrofanov on 11-Авг-11, 13:05 | ||
| Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору | ||
| 2 . «delay_pools — не работает» | + / – | |
| Сообщение от stakado | ||
Уже почитавши форум стал делать restart, до этого делал reload. Что же я делаю не так? | ||
| Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору | ||
| 3 . «delay_pools — не работает» | + / – | |
| Сообщение от sherlock | ||
У Вас пересекающие группы, группа IT еще и попадает в LAN delay_access 2 allow lan !it я конечно не уверен в механизме, но не исключено, что механизм работы такой: | ||
| Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору | ||
| 4 . «delay_pools — не работает» | + / – | |
| Сообщение от stakado | ||
Сделал так — ничего не изменилось. Возможно я где-то в другом месте накосячил — привожу свой конфиг полностью: # // My changes url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf # ACL: общие # ACL: подразделения # ACL: время acl all_traffic url_regex .* # Онлайн видео # ACL: Списки # ACL: порты и методы установки соединений acl SSL_ports port 443 563 acl Safe_ports port 80 # http delay_pools 2 # Only allow cachemgr access from localhost # Общие правила доступа # Запрет на просмотр видео # Правила доступа по подразделениям # Заблокировать счетчик на mail.ru Дену — иначе не печатаются письма # Открыть доступ сети и фай-фаю # Закрыть доступ всем остальным # Default settings | ||
| Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору | ||
| 5 . «delay_pools — не работает» | + / – | |
| Сообщение от sherlock | ||
Источник Блог о системном администрировании. Статьи о Linux, Windows, СХД NetApp и виртуализации.Как работает ограничение скорости (delay pools) в squidДословно, delay pools переводится как пул задержки. Почему он так переводится, потому что так и есть Когда клиент делает запрос на получение какого-либо объекта — прокси-серверу (будь то картинка, html страница или любой другой объект), squid сначала помещает/заливает данный объект в ведро (. очень спорное утверждение). Если объект больше объема ведра, то в ведро помещается его часть, только после наполнения ведра, объект отдается клиенту. (с какой скоростью происходит первичное наполнение?) По мере опустошения ведра клиентом, остаток объекта дозаливается. При этом, squid «ставит в очередь» поступающие данные и не посылает новые новые запросы удаленному серверу запрашиваемому сайту. Т.о. объем ведра определяет количество байтов, которые доступны клиенту на максимальной скорости, пока ведро не опустошится. После чего клиент получает данные, согласно диаметра шланга squid После некоторого недопонимания работы squid, долгого чтения мануалов и практических опытов, показавших реальную схему работы, предыдущий абзац перефразирован в следующий вид: Когда клиент делает запрос на получение какого-либо объекта — прокси-серверу (будь то картинка, html страница или любой другой объект), squid:
Ну и естественно, объект со статусом *_MISS помещается в кэш (если это не запрещено правилами конфигурации), и следующий запрос к этому объекту будет как к кэшированному. Если клиент захлебывается и не успевает опустошить ведро, пока squid в него заливает, то squid ставит в очередь поступающие данные и не отправляет новые запросы удаленному серверу запрашиваемому сайту. По мере опустошения ведра клиентом, остаток объекта дозаливается. Т.о. объем ведра определяет сколько данных клиент может получить на максимальной скорости при условии, что эти данные кэшированы. При этом, данные вЁдер можно «каскадировать». Количество уровней каскадирования определяет класс пула. ИМХО Видимо разработчик delay pools имел очень быстрый интернет и очень медленную локальную сеть. )) Настройка delay poolsПараметры конфигурационного файла для настройки delay poolsДля реализации ограничения скорости в squid используются следующие параметры конфигурационного файла: acl, http_access, delay_pools, delay_access, delay_parameters, delay_class. C acl и http_access мы разобрались в предыдущих статьях о squid. В данном случае — они просто определяют кому (acl) в целом разрешен доступ (http_access) к прокси-серверу. А вот другие 4 параметра необходимо рассмотреть более подробно. Кроме того, данный функционал будет работать только если squid скомпилирован с ключом —enable-delay-pools. Давайте разберем указанные параметры: delay_pools количество Параметр задает количество delay pools (количество ведер). Значение может быть от 0 (по-умолчанию) до бесконечности. Каждому ведру можно присоединить любое количество acl. delay_class номер_пула класс_пула Параметр определяет класс для каждого delay_pools ведра. В соответствии с заданным классом будут применяться некие параметры и «уровень каскадирования ведер» (сколько уровней ведер будет друг под другом). Существует несколько классов, которые я опишу ниже. У каждого класса существуют соответствующие ему настройки. Для каждого delay_pools задается единственный класс. delay_access номер_пула allow|deny имя_acl Параметр задает попадание (allow) или не попадание (deny) пользователей в заданный пул (номер_пула). Точнее сказать, задаются не пользователи, а те сущности, что заданы в acl. То есть можно ограничить скорость не только для пользователя, но и, например, к некоторому сайту, указав его как acl name dstdomain site. При этом, проверка принадлежности к данному классу происходит до первого совпадения. Если пользователь по какому-либо параметру совпадает с acl, и для него указано правило allow, то для него применяются параметры текущего пула, если задано правило deny, то на пользователя правило пула не применяются. Если запрос не попал ни в один delay pools то информация отправляется напрямую клиенту без задержек. Синтаксис использования данного параметра аналогичен http_access. delay_parameters номер_пула параметры_пула Устанавливает некоторые параметры (параметры_пула) для указанного пула (номер_пула). При этом, в зависимости от класса заданного номера_пула, параметры_пула — различаются. О параметрах я расскажу ниже, когда буду говорить о классах. Для одного delay pools может использоваться только один delay_parameters. Классы delay poolsПрежде чем говорить о классах delay pools, давайте вспомним о структуре IP адресов. Для этого необходимо почитать статью Основы локальных сетей. И вспомнить, что маска подсети основывается на двоичных битах: Собственно, для чего это вспоминать? для того, что squid управляя скоростью оперирует разграничениями на основе длинны битовой маски. То есть squid рассматривает хосты из 4 октета Ipv4-адреса (то есть с маской 255.255.255.0), а подсети squid рассматривает на основе маски 255.255.0.0. Так же, важно понимать, что при формировании delay_parameters скорость указывается в байтах, а не в бит ах (как измеряют скорость провайдеры). Мы ведь знаем, что 1 байт = 8 бит? ) Итак, классы пулов. delay_class позволяет задавать индивидуальные параметры скорости для сети/подсети/хоста/пользователя и кое-чего еще в зависимости от класса. Во второй версии squid существовало 3 класса, в третьей версии добавлено еще 2. Итого существуют следующие классы delay pools:
ПРИМЕЧАНИЕ: Если IP адрес представить как a.b.c.d, то: -> биты с 25 по 32 это класс «d» ПРИМЕЧАНИЕ 2: Из-за использования битовых масок IPv4 в классах 2,3,4, данные классы не применимы к Ipv6 трафику. классы 1 и 5 могут использоваться для IPv6. Задание параметров (delay_parameters) для разных классов пулов (delay_class)Как я уже говорил, для каждого класса могут быть заданы определенные наборы параметров, которые в целом похожи друг на друга. Параметры для классов 1,2,3,4 можно задать вот такой схемой: delay_parameters pool total_rest/total_max net_rest/net_max ind_rest/ind_max usr_rest/usr_max
Соответственно, первый класс будет содержать только delay_parameters pool total_rest/total_max, второй — delay_parameters pool total_rest/total_max ind_rest/ind_max, третий — delay_parameters pool total_rest/total_max net_rest/net_max ind_rest/ind_max, четвертый — все указанные параметры. Примеры delay poolsРабота по настройке delay pools заключается в следовании по следующим шагам:
Давайте начнем с простого примера. Предположим, у нас есть некоторое соединение с интернет в 1 Мбит/с, при этом, нам нужно выделить на squid только 512 Кбит/с, чтобы остальная часть канала была отдана под другие сервисы. Для данной задачи нам подойдет пул класса 1: У данной схемы есть следующий недостаток: некоторые пользователи могут получить гораздо больше скорости, чем остальные. Чтобы избавиться от данной проблемы, можно использовать пул 2 класса. При этом, если у вас сеть больше размера /24, то есть в вашей сети более 255 хостов, то можно использовать пул 3 класса вместо 2 класса. Класс 3 позволяет ограничить скорость для 65536 хостов (255 подсетей * 255 хостов в этих подсетях). Давайте к прошлому примеру ограничим хосты скоростью в 64Кбит/с. При этом, избранных пользователей направим на пул с более высокой скоростью в 256 Кбит/с: Хочу обратить внимание на слово «традиционно». Я так написал, потому что синтаксис delay_access аналогичен http_access и по умолчанию используется правило, противоположное последнему. Поэтому традиционно доступ к пулам, к которым применяются «избранные» пользователи завершают запрещающим правилом для всех — delay_access deny all. Так же, хочу отметить, что в настоящее время смысл устанавливать объем ведра максимальный размер пула, то есть значения total_max, net_ma, ind_max, usr_max, имеет очень спорны характер. Т.к. современные сайты содержат в большинстве своем некэшируемый контент (js, php и др.), поэтому запрашивается напрямую с удаленного сервера. Соответственно, локальному клиенту он отдается со скоростью, заданной в delay_parameters. Хотя в сети много почти все мануалы уверенно утверждают, что если мы зададим объем ведра, то данный объем клиент получит на максимальной скорости интернета. Это, имхо, неверно! Ограничения delay pools и нюансы работыУ технологии delay pools есть некоторые ограничения в работе, которые нужно учитывать при конфигурировании. Предположим, у нас есть вот такой конфиг: Данные правила задают скорость 15000 байт/с круглосуточно и 12000 байт/с с 10 до 13 часов. При данном конфиге, если пользователь в 09.59 начал закачку какого-то большого объекта, то он его докачает со скоростью 15000 байт/с и в 10.00 скорость закачки не понизится. То есть если соединение уже было создано, то delay pool его не закрывает и не режет. delay pools отрабатывает при создании сессии. Многие в сети называют технологию delay pools, как честный дележ канала, но на самом деле честностью тут и не пахнет и понятие честности тут весьма условно. Это выражается в том, например, что если у нас есть некий пул первого класса, в котором работают большое количество клиентов, то некоторому жадному клиенту ничто не мешает занять весь канал, не давая работать другим. Аналогично это правило и для всех остальных классов. Эту особенность в большей степени важно учитывать при задании диаметров «шлангов» для общих ограничений, например, всей сети (где уровень честности понижается), и в меньшей степени для индивидуальных пулов (где управлять «честностью» можно более гибко). Когда запрос проходит через каскад пулов, то конечная скорость рассчитывается с учетом ограничений всех пулов. Например, рассмотрим пул 3 класса в котором заданы ограничения для всех, для подсетей и для отдельных хостов. Даже если ограничения хоста 20 Кбайт/с, а у подсети 30 Кбайт/с и при этом, у пуля для всех установлен лимит шланга в 2 Кбайта/с, то конечный клиент получит именно 2 Кбайта/с. Даже с учетом, что у некоторых пулов есть довольно большой ресурс трафика, клиент будет ограничен самым маленьким лимитом. Так же, стоит учитывать, что устанавливаемые ограничения скорости действуют только на фактически переданные клиенту и не включают технические данные (например TCP, ICP, DNS и др.) Резюме Итого, в статье я рассмотрел возможности squid ограничивать скорость с помощью т.н. технологии delay_pools. Это мое понимание данного вопроса и я был бы рад, если кто-то из читателей сделал дельное дополнение в комментариях. В статье я не рассмотрел параметр delay_initial_bucket_level, смысл которого мне до сих пор не понятен. А так же не рассмотрел пул 5 класса, т.к. данный класс использует external_acl’s tag= в котором я тоже не смог разобраться Источник | ||