Я хочу настроить 2 сервера squid в качестве обратного прокси и кеша для веб-сервера в нашей интрасети. Балансировка нагрузки будет выполняться с использованием циклического перебора DNS или просто разных сопоставлений для разных клиентов.
Дело в том, что я хочу, чтобы оба сервера попытались связаться друг с другом, чтобы узнать, есть ли у них требуемый объект в кеше, прежде чем связываться с ним для веб-сервера (сеть, которая обслуживает веб-сервер, является узким местом, и я пытаюсь устранить его)
Оба кальмара настроены одинаково, вот соответствующие строки конфигурации:
acl dvr1_cache_it_best_tv_com dstdomain dvr1.cache.it.best-tv.com
acl squid1_it_best_tv_com dstdomain squid1.it.best-tv.com
acl squid2_it_best_tv_com dstdomain squid2.it.best-tv.com
http_access allow dvr1_cache_it_best_tv_com
http_access allow squid1_it_best_tv_com
http_access allow squid2_it_best_tv_com
http_access allow all
http_port 8081 accel defaultsite=dvr1.cache.it.best-tv.com
cache_peer dvr1.origin.it.best-tv.com parent 80 0 no-query originserver name=Proxy_dvr1_origin_it_best_tv_com
cache_peer squid1.it.best-tv.com sibling 8081 3130 weight=10 name=Proxy_Squid1_it_best_tv_com
cache_peer squid2.it.best-tv.com sibling 8081 3130 weight=10 name=Proxy_Squid2_it_best_tv_com
cache_peer_access Proxy_dvr1_origin_it_best_tv_com allow dvr1_cache_it_best_tv_com
cache_peer_access Proxy_squid1_it_best_tv_com allow squid1_it_best_tv_com
cache_peer_access Proxy_squid1_it_best_tv_com allow squid2_it_best_tv_com
cache_peer_access Proxy_squid1_it_best_tv_com allow dvr1_cache_it_best_tv_com
cache_peer_access Proxy_squid2_it_best_tv_com allow squid1_it_best_tv_com
cache_peer_access Proxy_squid2_it_best_tv_com allow squid2_it_best_tv_com
cache_peer_access Proxy_squid2_it_best_tv_com allow dvr1_cache_it_best_tv_com
просто чтобы было понятно - dvr1.cache - это псевдоним для прокси-серверов. dvr1.origin - это веб-сервер.
Оба сервера работают, оба обслуживают контент и кешируют его и работают нормально. Однако, когда я очищаю кеш на одном сервере, а затем обращаюсь к нему, он получает содержимое от родительского (DVR1_ORIGIN) вместо того, чтобы переходить к брату-кальмару.
Что я неправильно настроил? Или, может быть, я неправильно понимаю архитектуру? Я читал руководства по squid, но насколько я понимаю, я делал все по инструкции, и все же это не работает правильно.
Любая помощь будет оценена по достоинству!
Не пробовал, поэтому не могу гарантировать, что это сработает. У меня есть идеи:
Во-первых, я думаю, что acls «dstdomain» должен относиться к обслуживаемому целевому домену, а не к имени хоста сервера (dvr1.cache.it.best-tv.com). Вероятно, это будет "it.best-tv.com", и вам понадобится всего лишь один объект acl.
acl dvr1_cache_it_best_tv_com dstdomain www.yourdomain.com
cache_peer_access Proxy_dvr1_origin_it_best_tv_com allow dvr1_cache_it_best_tv_com cache_peer_access Proxy_squid1_it_best_tv_com allow dvr1_cache_it_best_tv_com cache_peer_access Proxy_squid2_it_best_tv_com allow dvr1_cache_it_best_tv_com
http_port 8081 accel defaultsite=www.yourdomain.com
Во-вторых, порядок записей cache_peer имеет значение (хотя я не уверен, что это применимо в вашем случае). На всякий случай попробуйте поставить пира ORIGIN последним:
cache_peer squid1.it.best-tv.com sibling 8081 3130 weight=10 name=Proxy_Squid1_it_best_tv_com cache_peer squid2.it.best-tv.com sibling 8081 3130 weight=10 name=Proxy_Squid2_it_best_tv_com cache_peer dvr1.origin.it.best-tv.com parent 80 0 no-query originserver name=Proxy_dvr1_origin_it_best_tv_com
Наконец, вы можете попробовать использовать параметр только прокси в обоих определениях прокси cache_peer.
Надеюсь, это поможет.