Лак периодически выходит из строя без видимых причин

Лак периодически выходит из строя без видимых причин

В течение последних нескольких лет мы используем 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.healthVarnish Box, чтобы увидеть, в каком состоянии Varnish считает ваш бэкенд. В зависимости от результата вы можете решить, куда смотреть дальше:

  1. Если бэкенд считается нездоровым, то проблема лежит между Varnish и бэкендом (или в самом бэкенде). Проверьте сетевое подключение к бэкенду, а также любой мониторинг на бэкенде.
  2. Если бэкенд считается здоровым, то проблема лежит между monit и Varnish. Проверьте сетевое подключение к серверу Varnish, а также отладьте сам мониторинг.
  3. Если процесс Varnishadm не может установить соединение, то проблема в самом Varnish. Проверьте, какие процессы Varnish запущены, и найдите сообщения об ошибках от Varnish в ваших журналах.

Связанный контент