Я настроил varnish для прослушивания порта 80 и nginx для прослушивания на 8080. Примерно через 24 часа безотказной работы мой сайт не работал в течение 22 часов. Я проверил и обнаружил, что лак не прослушивает порт 80.
Когда сайт открыт:
abc@abc:~$ sudo netstat -anp --tcp --udp | grep LISTEN
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 571/varnishd
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 376/nginx
tcp 0 0 0.0.0.0:9171 0.0.0.0:* LISTEN 376/nginx
tcp 0 0 publicip:6082 0.0.0.0:* LISTEN 569/varnishd
tcp6 0 0 :::80 :::* LISTEN 376/nginx
tcp6 0 0 ::1:6082 :::* LISTEN 569/varnishd
Когда сайт не работает:
abc@abc:~$ sudo netstat -anp --tcp --udp | grep LISTEN
tcp 0 0 127.0.0.1:8080 0.0.0.0:* LISTEN 376/nginx
tcp 0 0 0.0.0.0:9171 0.0.0.0:* LISTEN 376/nginx
tcp 0 0 publicip:6082 0.0.0.0:* LISTEN 745/varnishd
tcp6 0 0 :::80 :::* LISTEN 376/nginx
tcp6 0 0 ::1:6082 :::* LISTEN 745/varnishd
Это мой / etc / default / varnish:
## Alternative 2, Configuration with VCL
#
# Listen on port 6081, administration on localhost:6082, and forward to
# one content server selected by the vcl file, based on the request. Use a 1GB
# fixed-size cache file.
#
DAEMON_OPTS="-a :80 \
-T localhost:6082 \
-f /etc/varnish/default.vcl \
-S /etc/varnish/secret \
-s malloc,96m"
Есть ли конкретная причина, по которой varnish не прослушивает порт 80 во втором случае? Я, вероятно, могу просто проверить, и если лак не подошел, перезапустить его, но это все равно будет означать несколько минут простоя.
Мой файл varnish.vcl: http://pastebin.com/UH2c8KdH Я на Ubuntu 12.04 x86
Это случилось снова примерно через 2 часа, и это я нашел из системного журнала.
Feb 14 18:16:00 abc varnishd[745]: Child (749) not responding to CLI, killing it.
Feb 14 18:16:51 abc varnishd[745]: Child (749) not responding to CLI, killing it.
Feb 14 18:17:49 abc varnishd[745]: Child (749) not responding to CLI, killing it.
Feb 14 18:18:06 abc varnishd[745]: Child (749) not responding to CLI, killing it.
Feb 14 18:19:33 abc varnishd[745]: Child (749) not responding to CLI, killing it.
Feb 14 18:21:25 abc varnishd[745]: Child (749) not responding to CLI, killing it.
Feb 14 18:22:34 abc varnishd[745]: Child (749) not responding to CLI, killing it.
Feb 14 18:28:28 abc varnishd[745]: Child (749) not responding to CLI, killing it.
Feb 14 18:29:41 abc varnishd[745]: Child (749) not responding to CLI, killing it.
Feb 14 18:29:48 abc last message repeated 2 times
Feb 14 18:29:48 abc varnishd[745]: Child (749) died signal=3
Feb 14 18:29:49 abc varnishd[745]: Child cleanup complete
Feb 14 18:29:55 abc varnishd[745]: child (1380) Started
Feb 14 18:29:58 abc varnishd[745]: Pushing vcls failed: CLI communication error (hdr)
Feb 14 18:29:58 abc varnishd[745]: Stopping Child
Feb 14 18:29:58 abc varnishd[745]: Child (1380) said Child starts
Feb 14 18:29:59 abc varnishd[745]: Child (1380) said Child dies
Feb 14 18:30:02 abc varnishd[745]: Child (1380) died status=1
Feb 14 18:30:04 abc varnishd[745]: Child cleanup complete
Я не уверен, почему идентификаторы процессов отличаются от тех, что я опубликовал ранее. Может, перезапустил при устранении неполадок. Я не могу ничего разобрать из этих журналов. Любая помощь приветствуется.
Добавление дополнительных журналов:
Подробности из /etc/log/messages
:
В первый раз остановилось:
Feb 13 17:40:44 dragon75 varnishd[581]: Child (583) died signal=3
Feb 13 17:41:09 dragon75 varnishd[581]: child (2682) Started
Feb 13 17:42:31 dragon75 varnishd[581]: Child (2682) said Child starts
Feb 13 17:51:48 dragon75 varnishd[581]: Child (2682) died status=1
Feb 13 17:51:48 dragon75 varnishd[581]: Child (-1) said Child dies
Второй раз остановилось:
Feb 14 18:29:48 dragon75 varnishd[745]: Child (749) died signal=3
Feb 14 18:29:55 dragon75 varnishd[745]: child (1380) Started
Feb 14 18:29:58 dragon75 varnishd[745]: Child (1380) said Child starts
Feb 14 18:29:59 dragon75 varnishd[745]: Child (1380) said Child dies
Feb 14 18:30:02 dragon75 varnishd[745]: Child (1380) died status=1
Согласно сообщениям, в 16:31 стартовал лак, затем в / var / log / messages появилось 5 сообщений MARK, а в 18:29 - сообщение о смерти ребенка varnish. Между ними нет ничего.
Я не думаю, что ресурсы - это узкое место. Это новый веб-сайт, который все еще находится на стадии тестирования. Я на самом деле ничего не ставил. Нет трафика, кроме сценария работоспособности, который у меня есть на другом сервере, который просто проверяет домашнюю страницу. Я впервые использую лак.
Увеличьте параметр cli_timeout в Varnish до 60 с.
Это контролирует, как долго контролирующий родитель будет ждать ответа ребенка на проверку работоспособности. Если операционная система занята подкачкой данных на диск или с диска, значение 10 секунд по умолчанию может быть низким. Увеличьте его до одной минуты (по умолчанию с 4.0) и посмотрите, исчезнет ли проблема.
Если это не поможет, моим следующим предположением будут сценарии ротации журналов, которые убивают больше, чем должны.