
В течение последних нескольких лет мы используем Varnish в качестве кэша и балансировщика нагрузки перед несколькими серверами Apache, обслуживающими несколько тысяч веб-сайтов.
Мы также используем monit, чтобы гарантировать, что если Varnish когда-нибудь умрет, он будет перезапущен. Раздел Varnish в monitrc выглядит так:
# Check varnish on port 80
check process varnish with pidfile /var/run/varnishd.pid
start program = "/etc/init.d/varnish start"
stop program = "/etc/init.d/varnish stop"
if failed host 127.0.0.1 port 80 protocol http
and request "/monit-check-url"
then restart
Это работало нормально по крайней мере 3 года. У нас иногда случаются сбои проверки порта 80, но monit перезапускает Varnish соответствующим образом, и это обычно незаметно для пользователей.
Однако за последние несколько недель мы наблюдаем шквал таких сбоев, обычно в течение пары часов, и пользователи замечают сбои в подключении. Сегодня было особенно плохо.
В syslog нет никаких подсказок (кстати, это Debian-бокс), как и предполагает раздел «Сбой Varnish» по адресу:https://www.varnish-cache.org/docs/3.0/tutorial/troubleshooting.htmlи все, что мы там видим, это то, что monit не проходит проверку на порту 80, а затем останавливается и запускается Varnish.
Кроме того, мы не наблюдаем никаких скачков пропускной способности или количества обращений к внутренним веб-серверам, которые могли бы указывать на сбой при нагрузке выше обычной.
Мы использовали Varnish 3.0.3, который я обновил до 3.0.7, но проблема осталась. Никаких других изменений, которые совпадали бы с началом проблем, в этот ящик не вносилось, а конфигурация Varnish не менялась довольно долгое время.
У кого-нибудь был подобный опыт с лаком или есть предложения по дальнейшему устранению неполадок? Может ли это быть какая-то атака?
Любая помощь или совет будут высоко оценены!
решение1
Ваш подход здесь кажется немного тяжеловесным, поскольку существует множество причин, по которым запрос может не выполниться, и не все из них связаны с проблемами Varnish (например, проблемы с подключением, сбои на бэкэндах и т. д.). Перезапуск Varnish приведет к сбою при повторном запуске, поэтому его следует использовать только в крайнем случае.
Прежде чем что-либо перезапускать, я бы рекомендовал запустить varnishadm debug.health
Varnish Box, чтобы увидеть, в каком состоянии Varnish считает ваш бэкенд. В зависимости от результата вы можете решить, куда смотреть дальше:
- Если бэкенд считается нездоровым, то проблема лежит между Varnish и бэкендом (или в самом бэкенде). Проверьте сетевое подключение к бэкенду, а также любой мониторинг на бэкенде.
- Если бэкенд считается здоровым, то проблема лежит между monit и Varnish. Проверьте сетевое подключение к серверу Varnish, а также отладьте сам мониторинг.
- Если процесс Varnishadm не может установить соединение, то проблема в самом Varnish. Проверьте, какие процессы Varnish запущены, и найдите сообщения об ошибках от Varnish в ваших журналах.