Yellow Leaf

Yellow Leaf


Поиск по сайту


Вход
Правила портала
Регистрация
Забыли пароль?
О команде проекта
Справка по оформлению постов


Последние комментарии к новостям и статьям
Re: С днём системного администратора!
Re: Вышел новый номер v10.07(2) компьютерного журнала UserAndLINUX.
Re: Отчет о первом "Runtu InstallFest" в Екатеринбурге
Re: OpenVPN сервер для офисного шлюза на FreeBSD
Re: Релиз Runtu LXDE 10.04!
Ещё комментарии >>>


Новые файлы
Debian: cue2tracks_0.2.11_all (Дополнение для CUE 2 Tracks v0.2.11)
Gentoo: cue2tracks-0.2.11 (Дополнение для CUE 2 Tracks v0.2.11)
CUE 2 Tracks v0.2.11
Jabber-Shell 20090303
EasySoft AutoRun 0.4.1


Новое на форуме
Движок сайта. версия 2.0
Нужен логопед, срочно
Словить процесс
проблемы с разделом жесткого диска
планировщик, веб интерфейс


Проекты
Jabber-Shell
Qmmp
QStarDict
PHPSAAdmin


 
   


Друзья сайта
 Open Kazan - Казанское сообщество пользователей OpenSource 


Посетителей с 08.09.2006

4671601


Внешний вид портала


RSS-Ленты
Новости
Файлы


 

   
  Яндекс цитирования  

«Жёлтый Лист» - cайт о мире юникс
Новости Форум Статьи Файлы Пользователи
   

Объединение кэшей нескольких прокси-серверов в один

MooSE 2009-10-23 01:21:25

Иногда возникает необходимость «подружить» несколько кэширующих прокси-серверов таким образом, чтобы изменить стандартную последовательность обработки запросов с «локальный кэш, интернет» на «локальный кэш, кэш соседнего прокси-сервера, интернет».

Это может быть полезно, если каждый отдел организации имеет свой отдельный прокси-сервер, однако «наружу» все отделы выходят через один общий канал, в этом случае такое объединение кэшей соседних прокси-серверов позволит ускорить загрузку страниц и приведёт к дополнительнй экономии трафика. Также возможна ситуация, когда несколько офисов одной организации подключены к одному провайдеру, и используемый тариф предусматривает более низкую стоимость и/или более высокую скорость внутрисетевого трафика по отношению к внешнему.

Далее будет показано, как можно организовать взаимодействие двух прокси-серверов для взаимного обмена данными из их кэшей.

Начальные условия:

  • Два офиса, соединённые с помощью OpenVPN;
  • Прокси-сервера обоих офисов работают под управлением Ubuntu Jaunty;
  • На обоих прокси-серверах установлен пакет squid (или squid3), который слушает на порту 3128.

Задача:

Настроить оба кэширующих прокси-сервера таким образом, чтобы поиск объекта производился сначала в локальном кэше, потом в кэше соседнего прокси-сервера, и только потом (если раньше объект не был найден) происходил запрос объекта из интернета.

Решение:

Будем считать, что прокси-сервера уже настроены и связаны с помощью OpenVPN, прокси-сервер A имеет адрес 192.168.10.1, а прокси-сервер B - 192.168.10.107. На обоих адресах разрешён весь трафик с «соседнего» адреса. На прокси-сервере A установлен пакет squid3, а на прокси-сервере B - squid.

Сначала рассмотрим, как же именно будут взаимодействовать прокси-сервера. Допустим, что прокси-сервер A получил запрос от клиента, первым делом он будет искать ответ на запрос у себя в кэше. Если ответ найден в кэше - он будет передан клиенту, если же нет - прокси-сервер шлёт ICP (Internet Cache Protocol)-запрос прокси-серверу B. Если ответ есть в кэше прокси-сервера B, то оригинальный HTTP-запрос пересылается на сервер B, там из кэша «достаётся» ответ, возвращается серверу A и оттуда клиенту. Если же кэш прокси-сервера B также не содержит ответа - прокси-сервер A делает запрос в интернет и возвращает клиенту отклик уже оттуда.

Принципиальной разницы между настройками squid3 и squid нет, фактически в пакете squid содержится версия squid 2.7, а в пакете squid3 - версия 3.0, являющаяся продолжением версии 2.7.

Приступаем к настройке. Для начала надо на обоих серверах разрешить ICP-запросы друг от друга. На сервере A для этого нужно в файле /etc/squid3/squid.conf найти строку:

icp_access deny all

и добавить перед ней следующие строки:

acl peer_allow src 192.168.10.107
icp_access allow peer_allow

Затем на сервере B в файле /etc/squid/squid,conf также нужно найти строку:

icp_access deny all

и добавить перед ней строки:

acl peer_allow src 192.168.10.1
icp_access allow peer_allow

Здесь в обоих случаях создаются списки доступа (ACL) с именем peer_allow, в которые входят адреса «соседних» прокси, и разрешается доступ с них на текущий сервер по ICP. По умолчанию для обработки ICP-запросов используется UDP-порт 3130, и мы не будем это менять.

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

Для этого первым делом разрешим использование прокси-серверов друг другому с помощью директивы http_access (например, добавив адреса соседних прокси в ACL localnet).

Затем используем директиву файла конфигурации cache_peer, с помощью которой настраивается взаимодействие с другими прокси-серверами.

На прокси-сервере B нужно добавить в конец файла /etc/squid/squid.conf строку:

cache_peer	192.168.10.1		sibling		3128	3130	no-digest

После чего применить новую конфигурацию squid командой:

squid -k reconfigure

На прокси-сервере A в файл /etc/squid3/squid.conf нужно добавить строку:

cache_peer	192.168.10.107		sibling		3128	3130	background-ping no-digest

и применить новую конфигурацию командой:

squid3 -k reconfigure

Отличие добавляемых строк заключено в опции background-ping, которая появилась в версии squid 3.0, и позволяет периодически в фоновом режиме проверять доступность соседнего прокси-сервера и в случае его недоступности — отключать поиск объектов в его кэше.

На этом в общем-то всё. Система уже работает, однако как быть, если один из прокси-серверов отправляет запросы не напрямую в интернет, а через «родительский» прокси-сервер? Понятно, что у нас будет две директивы cache_peer, однако как указать правильный порядок их перебора? Тут на помощь приходит опция weight директивы cache_peer, с помощью которой задаются приоритеты соседних кэшей (чем больше значение weight, тем приоритетнее кэш).

Допустим, что squid на сервере A пересылает запросы на HAVP, раотающий на localhost:8080, тогда конфигурация этого сервера примет вид:

cache_peer	192.168.10.107		sibling		3128	3130	background-ping no-digest weight=2
cache_peer	127.0.0.1		parent		8080	0	no-query no-digest weight=1

В этом случае при отсутствии файла в локальном кэше, поиск будет произведён в соседнем, и в случае отсутствия файла там - запрос будет переслан на «родительский» прокси.

На этом всё. Приятной работы!

Корректор: Регина Васильева (reggi86@mail.ru)

Ключевые слова: squid squid3 cache_peer sibling

Версия для печати

Возможно вас заинтересуют следующие товары:


Комментарии:

morbo 2009-10-23 08:01:38 (*)

Спасибо, познавательно.

[Ответить]


MooSE 2009-10-24 02:56:56 (*)

На самом деле так можно объединить сколько угодно кэшей, и что самое главное - оно ещё умеет мультикастом опрашивать соседние кэши. Это вообще тема если их много, хотя я пока не могу представить зачем это может понадобиться...

[Ответить]


Содержание*:
=

При копировании материалов с этого сайта ссылка на источник обязательна! Уважайте труд авторов!


Если материалы с этого сайта оказались вам полезны - Вы можете поддержать этот проект переведя на его счёт любую сумму, какую сочтёте нужным.

рублей


Обратная связь


© 2006-2010 Вадим Калинников aka MooSE


охрана периметра коттеджа . Вип такси Москва, московская городская служба. Вип такси Москва, аренда трансфер такси. . Тсс стабилизатор сетевого напряжения. Стабилизаторы напряжения дополнительной. . сайт про лабораторные весы