Есть 3 офиса. В каждом стоит по FreeBSD c squid'ами к которым подключены каналы к разным провайдерам пропускной способностью от 128 до 2048 килобит.
К каждой фре подключены 2048 каналы друг с другом ганяется корпоративный трафик.
Как настроить squid'ы так, чтобы при приходе обращения к одному из сквидов, он сначала спрашивал у двух других своих соседей по корпоративному каналу а потом лез к провайдеру?
Так наверное не получится. У сквидов по моему должна быть жесткая иерархия, т.е. назначается parent сквид, к которому лепятся child сквиды. Вот тогда child сквид будет сначала лезть в parrent, а только потом в инет, если не получит ответа.
>Так наверное не получится. У сквидов
>по моему должна быть жесткая
>иерархия, т.е. назначается parent сквид,
>к которому лепятся child сквиды.
>Вот тогда child сквид будет
>сначала лезть в parrent, а
>только потом в инет, если
>не получит ответа.А по моему получится, надо в squid.conf указать несколько парент сквидов, но с разными весами, так что бы у прова был самый маленкий вес.
cache_peer server1 parent 3128 3130 weight=50 default no-digest
cache_peer server2 parent 3128 3130 weight=100 default no-digest
cache_peer server3 parent 3128 3130 weight=150 default no-digest
cache_peer server_provider parent 3128 3130 weight=20 default no-digestТогда сквид будет лезть на сервер у которого вес будет больше. Т.е. сквид берет время запроса и делит его на вес, где получается меньшее значение тот сервак он и выбирает.
Помоему так. По крайней мере в доках по сквиду так написано:
http://squid.visolve.com/squid24s1/glossary.htm#weight
Может я и не прав. ХЗ :))
>Так наверное не получится. У сквидов
>по моему должна быть жесткая
>иерархия, т.е. назначается parent сквид,
>к которому лепятся child сквиды.
>Вот тогда child сквид будет
>сначала лезть в parrent, а
>только потом в инет, если
>не получит ответа.немножко не так, у сквидов есть различные типы иерархий, можно сконфигурировать соседние прокси как парент или как сиблинг
parent - старший в иерархии (если запрос отсутствует в локальном кеше, то он направляется к parent, тот - при отсутствии в своем кеше - пересылает запрос дальше и возвращает готовый ответ подчиненному в иерархии; если squid получает от parent TCP_DENIED, то он лезет напрямую)
sibling - одного уровня (если запрос отсутствует в локальном кеше, то он направляется к sibling, тот - при отсутствии в своем кеше - сразу возвращает сообщение об этом, ничего не предпринимая)для того, чтобы определить соседей, надо прописать в конфиге сквида такие стороки:
cache_peer hostname type proxy-port icp-port options (каждый сосед описывается отдельной строкой)
например:
cache_peer proxy.provider.net sibling 8080 7 no-query no-digesthttp://www.bog.pp.ru/work/squid.html
здесь это достаточно хорошо описано