URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID12
Нить номер: 7224
[ Назад ]

Исходное сообщение
"Принудительное переподключение к cache_peer parent"

Отправлено Neurotic , 31-Окт-15 17:42 
Всем привет!
Есть у меня некоторое количество домашних сервачков на Debian и squid-deb-proxy на squid 3.5, родительский и дочерний, между которыми сеть фигового качества.

На дочернем прописано:


cache_peer parent-server-hostname parent 8000 0 no-query no-digest no-netdb-exchange default connect-timeout=600 standby=5 connect-fail-limit=10240
never_direct allow all

Собственно, все эти параметры я добавил в попытках принудить его обращаться на родительский сервер ни смотря ни на что, и не получилось.

Клиент начинает качать пакеты нормально, но в какой-то момент дочерний сервер начинает отвечать на все запросы ошибкой 500


1446300676.201      0 10.42.2.60 TCP_MISS/500 4560 GET http://ftp.debian.org/debian/pool/main/libr/libreoffice/libr... - HIER_NONE/- text/html
1446300676.205      0 10.42.2.60 TCP_MISS/500 4477 GET http://ftp.debian.org/debian/pool/main/e/evince/evince_3.18.... - HIER_NONE/- text/html
1446300676.208      0 10.42.2.60 TCP_MISS/500 4489 GET http://ftp.debian.org/debian/pool/main/e/evince/evince-gtk_3... - HIER_NONE/- text/html
1446300676.212      0 10.42.2.60 TCP_MISS/500 4507 GET http://ftp.debian.org/debian/pool/main/e/evince/libevdocumen... - HIER_NONE/- text/html
1446300676.215      0 10.42.2.60 TCP_MISS/500 4495 GET http://ftp.debian.org/debian/pool/main/e/evince/libevview3-3... - HIER_NONE/- text/html

У него пропадает родительский сервер из доступных.


2015/10/31 16:59:45.394 kid1| 15,5| neighbors.cc(759) peerDigestLookup: peerDigestLookup: peer parent-server-hostname
2015/10/31 16:59:45.394 kid1| 15,5| neighbors.cc(763) peerDigestLookup: peerDigestLookup: gone!
2015/10/31 16:59:45.394 kid1| 44,3| peer_select.cc(685) peerGetSomeParent: GET ftp.debian.org
2015/10/31 16:59:45.394 kid1| 15,3| neighbors.cc(350) getRoundRobinParent: returning NULL
2015/10/31 16:59:45.394 kid1| 15,3| neighbors.cc(400) getWeightedRoundRobinParent: getWeightedRoundRobinParent: returning NULL
2015/10/31 16:59:45.394 kid1| 15,3| neighbors.cc(312) getFirstUpParent: getFirstUpParent: returning NULL
2015/10/31 16:59:45.394 kid1| 15,3| neighbors.cc(490) getDefaultParent: getDefaultParent: returning NULL
2015/10/31 16:59:45.394 kid1| 15,3| neighbors.cc(490) getDefaultParent: getDefaultParent: returning NULL
2015/10/31 16:59:45.394 kid1| 44,2| peer_select.cc(280) peerSelectDnsPaths: Failed to select source for 'http://ftp.debian.org/debian/pool/main/libr/libreoffice/libr...'
2015/10/31 16:59:45.394 kid1| 44,2| peer_select.cc(281) peerSelectDnsPaths:   always_direct = DENIED
2015/10/31 16:59:45.394 kid1| 44,2| peer_select.cc(282) peerSelectDnsPaths:    never_direct = ALLOWED
2015/10/31 16:59:45.394 kid1| 44,2| peer_select.cc(295) peerSelectDnsPaths:        timedout = 0
2015/10/31 16:59:45.409 kid1| 93,5| AsyncCall.cc(56) cancel: will not call Initiate::noteInitiatorAborted [call28424] because job gone
2015/10/31 16:59:45.409 kid1| 93,5| AsyncCall.cc(48) make: will not call Initiate::noteInitiatorAborted [call28424] because of job gone

При этом родительский сервер по факту доступен, просто видимо в какой-то момент мигнула сеть. Связь восстановилась, а дочерний сервер продолжает отфутболивать клиентов, пока его не перезапустишь.

Как заставить squid пытаться переподключиться к родительскому пиру до посинения, вместо того чтобы сразу отфутболивать клиентов ошибкой 500?


Содержание

Сообщения в этом обсуждении
"Принудительное переподключение к cache_peer parent"
Отправлено ipmanyak , 03-Ноя-15 08:24 
попробуй добавить тэги
prefer_direct off  # сквид сначала будет пытаться обратиться к родительскому прокси
nonhierarchical_direct off
-------------
cache_peer parentcache.foo.com parent 3128 0 no-query default
never_direct allow all  # по идее эта опция  всегда будет заставлять сквид идти через parent
prefer_direct off  
nonhierarchical_direct off

"Принудительное переподключение к cache_peer parent"
Отправлено ipmanyak , 03-Ноя-15 08:27 
> попробуй добавить тэги
> prefer_direct off  # сквид сначала будет пытаться обратиться к родительскому прокси
> nonhierarchical_direct off
> -------------
> cache_peer parentcache.foo.com parent 3128 0 no-query default
> never_direct allow all  # по идее эта опция  всегда будет
> заставлять сквид идти через parent
> prefer_direct off
> nonhierarchical_direct off

http://www.squid-cache.org/Doc/config/prefer_direct/
http://www.squid-cache.org/Doc/config/nonhierarchical_direct/



"Принудительное переподключение к cache_peer parent"
Отправлено Neurotic , 03-Ноя-15 09:36 
>[оверквотинг удален]
>> prefer_direct off  # сквид сначала будет пытаться обратиться к родительскому прокси
>> nonhierarchical_direct off
>> -------------
>> cache_peer parentcache.foo.com parent 3128 0 no-query default
>> never_direct allow all  # по идее эта опция  всегда будет
>> заставлять сквид идти через parent
>> prefer_direct off
>> nonhierarchical_direct off
> http://www.squid-cache.org/Doc/config/prefer_direct/
> http://www.squid-cache.org/Doc/config/nonhierarchical_direct/

Спасибо, но это не то.
prefer_direct и так по умолчанию off, а nonhierarchical_direct  "only sets a preference".

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


"Принудительное переподключение к cache_peer parent"
Отправлено ipmanyak , 03-Ноя-15 08:34 
попробуй еще добавить отдельную директиву
peer_connect_timeout 30 seconds
http://www.squid-cache.org/Doc/config/peer_connect_timeout/
она думаю связана с connect-timeout= в директиве  cache_peer
но connect-timeout=600 -  600 сек имхо многовато?

"Принудительное переподключение к cache_peer parent"
Отправлено Neurotic , 03-Ноя-15 10:13 
> попробуй еще добавить отдельную директиву
> peer_connect_timeout 30 seconds
> http://www.squid-cache.org/Doc/config/peer_connect_timeout/
> она думаю связана с connect-timeout= в директиве  cache_peer
> но connect-timeout=600 -  600 сек имхо многовато?

снизил таймаут вообще до 5, может он будет чаще пытаться, посмотрим.


"Принудительное переподключение к cache_peer parent"
Отправлено Neurotic , 04-Ноя-15 00:05 
> снизил таймаут вообще до 5, может он будет чаще пытаться, посмотрим.

Не помогло. Два часа качал нормально, потом снова ошибка 500 при любой дальнейшей попытке на несколько минут вперед как минимум.
При том что оба сервера друг друга видят, оба сквида на них работают.
Судя по дампу трафика, дочерний в это время даже не пытается обращаться к родительскому.

Включил ICP и сделал dead_peer_timeout 60.
Имитировал короткое падение сети, дочерний сразу потерял родительского и опять заткнулся. В cache.log "Detected DEAD Parent"

Причем при попытке что-нибудь скачать теперь идет ICP пакет в сторону родительского и приходит один пакет в ответ. Но живее родитель от этого в глазах ребенка не становится.


"Принудительное переподключение к cache_peer parent"
Отправлено Neurotic , 04-Ноя-15 02:11 
> Включил ICP и сделал dead_peer_timeout 60.
> Имитировал короткое падение сети, дочерний сразу потерял родительского и опять заткнулся.
> В cache.log "Detected DEAD Parent"
> Причем при попытке что-нибудь скачать теперь идет ICP пакет в сторону родительского
> и приходит один пакет в ответ. Но живее родитель от этого
> в глазах ребенка не становится.

Прибил HTTP и ICP гвоздями к адресам через http_port и udp_incoming_address соответственно. Вроде помогло.
По крайней мере, получил REVIVED через несколько секунд после DEAD, что в свою очередь случилось после серии TCP connection failed, а не вдруг из воздуха как раньше.

Если других новостей не напишу, значит так и буду жить.


"Принудительное переподключение к cache_peer parent"
Отправлено Neurotic , 07-Ноя-15 11:59 
> Прибил HTTP и ICP гвоздями к адресам через http_port и udp_incoming_address соответственно.
> Вроде помогло.
> По крайней мере, получил REVIVED через несколько секунд после DEAD, что в
> свою очередь случилось после серии TCP connection failed, а не вдруг
> из воздуха как раньше.
> Если других новостей не напишу, значит так и буду жить.

Вроде шло хорошо, но потом случилось:


2015/11/07 10:23:25 kid1| WARNING: DNS lookup for 'parent-server-hostname' failed!

DNS разок недостучался до удаленной сети - и все, никаких попыток подключиться больше часа. Хотя все 99% времени было доступно и резолвилось.
Потом неожиданно:

2015/11/07 11:26:19 kid1| Configuring Parent parent-server-hostname/8000/8001

Вот как бы сделать чтобы сразу?


"Принудительное переподключение к cache_peer parent"
Отправлено Neurotic , 14-Фев-16 22:08 
В общем, пробовал еще поиграться с dead_peer_timeout и icp_query_timeout, ничего не вышло. Все равно на каждый чих squid уходит в отказ и отвечает ошибкой 500 на все последующие попытки что-либо скачать.
Пришлось жить брутфорсом и пихать все 'apt update' и 'apt full-upgrade -d' в циклы до успешного завершения. Просто магия какая-то, за 10-50 попыток оно все-таки прокачивалось.
Видимо squid с иерархией подходит только для качественных сетей, в которых задержки вменяемые и пакеты не теряются.

Снес все это дело и вернулся к использованию apt-cacher-ng, он каскадируется без бубна и кешем на уровне файлов рулить можно. Удивительно, но пока все прокачивается с первого раза. Теперь только следить за специфическими глюками, из-за которых раньше пришлось от него отказаться. Но версия свежая из experimental, может и пофиксили.