Назад | Перейти на главную страницу

Varnish перестает прослушивать порт 80 через несколько часов

Я настроил 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) и посмотрите, исчезнет ли проблема.

Если это не поможет, моим следующим предположением будут сценарии ротации журналов, которые убивают больше, чем должны.