Заметки практикующего сисадмина

Дядя Саша Кузьмич пишет о работе

Месяц: Август 2006

  • Описание настройки Squid delay pools

    В лучшем proxy-сервере Squid (также работающем под Windows) есть хороший механизм ограничения скорости загрузки. Единственная беда — про написано много, но по-английски, а об устройстве — вообще только 2 сообщения от разработчиков в списке рассылки. Поэтому постараюсь рассказать про него, что понял сам.

    Итак, основные моменты. Каждый пул определяется двумя параметрами: размером буфера и скоростью его заполнения. Всего существует 3 класса пулов:

    1. Ограничена общая скорость загрузки.
    2. Ограничена общая скорость загрузки и скорость загрузки индивидуального хоста (биты 25 -32 IP-адреса).
    3. Ограничена общая скорость загрузки, скорость загузки подсети (биты 17-24 IP-адреса) и скорость загрузки индивидуального хоста (биты 25 -32 IP-адреса).

    Важно пояснить, что для пулов второго и третьего класса каждое соединение проходит через все ограничения: общее -> подсеть (только для третьего класса) -> хост. Для более наглядного представления IP-адресов в двоичной форме скачайте себе LanCalculator.

    Немного об устройстве. Каждый объект (страница, картинка, скрипт, таблица стилей и т.п.) имеет свой размер. Когда клиент запрашивает данные, они сначала попадают в буфер и только потом передаются ему.

    • Если объем запрашиваемых данных меньше или равен размеру буфера, то клиент получает их с максимальной скоростью (максимальная скорость равна размеру буфера).
    • Если объем запрашиваемых данных больше размера буфера, то первую часть (размер буфера) клиент получит с максимальной скоростью, а остаток — с минимальной (скоростью заполнения буфера).

    Что мы имеем в результате.

    • Если размер буфера и его скорость заполнения равны, то клиент всегда качает с максимальной скоростью.
    • Если размер буфера больше скорости заполнения, то файлы объемом меньше размера буфера клиент получает на максимальной скорости, а больше — на минимальной.
    • Если скорость заполнения буфера больше размера буфера, то клиент всегда получает данные на максимальной скорости (объем буфера), но Squid не подкачивает данные, пока клиент полностью не опустошит буфер.

    Перейдем к конфигурированию. Поиск необходимого пула будет происходить только до первого совпадения, поэтому при объявлении пулов необходимо соблюдать нужный порядок.

    Сначала объявляем ACL (списки доступа), по которым мы будем определять принадлежность клиентов к определенному пулу.

    acl vasya src 192.168.1.10/32
    acl kolya src 192.168.1.11/32
    acl petya src 192.168.1.12/32
    acl masha src 192.168.1.13/32
    acl director src 192.168.1.14/32
    acl office1 src 192.168.2.0/24
    acl office2 src 192.168.3.0/24
    acl office3 src 192.168.4.0/24

    Объявляем сами пулы.

    delay_pools 3 # Всего будет 3 пула
    delay_class 1 1 # 1й пул первого класса
    delay_class 2 1 # 2й пул первого класса
    delay_class 3 3 # 3й пул третьего класса

    Определяем принадлежность юзеров к пулу. Принадлежность нужно определять по одному ACL на строку. Если написать в одну строку несколько ACL, то в пул попадет только первый, а остальные — нет. По крайней мере на Squid 2.5.STABLE10 работает именно так.

    delay_access 1 allow vasya
    delay_access 1 allow kolya
    delay_access 1 allow petya
    delay_access 1 allow masha
    delay_access 1 deny all
    delay_access 2 allow director
    delay_access 2 deny all
    delay_access 3 allow office1
    delay_access 3 allow office2
    delay_access 3 allow office3
    delay_access 3 deny all

    Задаем ограничения по скорости.

    delay_parameters 1 16000/16000 # 128K на всех
    delay_parameters 2 32000/32000 # 256K на всех
    delay_parameters 3 32000/32000 16000/16000 -1/-1 #256K на всех, каждой подсети 128K

    Вот вроде и все. Будут вопросы — задавайте.

  • И снова о документации

    Бывает, что маленькая сетка становится большой. Потом она подрастает еще и становится просто огромной. В результате, для того, чтобы сделать простейшее действие, приходится делать далеко не одно и непростейшее. И документацию приходится исправлять не раз и не два.

    Мрак и ужас? Ан нет! Если документация написана хорошо, то найти концы и связать воедино несколько, казалось бы, разрозненных вещей становится куда проще. Не ленитесь, пишите.

     
    «Записывайте на месте: заметка стоит воза воспоминаний

    Ральф Эмерсон
    »