Varnish 3.0 возвращает 503 с перерывами, даже если бэкэнд-сервер отвечает менее чем за 3 секунды
У нас странная проблема с Varnish 3.0. Мы наблюдаем частоту 10-20 отказов на узел в минуту на нашей ферме лаков. Varnish взаимодействует с внутренним сервером, который в этом случае находится в приложении балансировки нагрузки (F5). Мы взяли дампы TCP на уровне Varnish и на уровне балансировки нагрузки. Похоже, что сервер отвечает примерно за 3 секунды. В дампе TCP мы видим 200 Ok, получаемых Varnish через 3 секунды. После этого мы видим странное поведение. Сервер Varnish отправляет сообщение ACK на балансировщик нагрузки в течение миллисекунд. Сообщение FIN, ACK отправляется с задержкой около 10 секунд. Это время соответствует 10-секундной конфигурации в слое Varnish, и мы видим, что ошибка 503 возвращается из слоя Varnish. Это конфигурация Varnish Backend. Бэкэнд был переименован по соображениям безопасности.
backend backend1{
.host = "<load balancer virtual server name>";
.port = "<port>";
.first_byte_timeout = 120s;
.connect_timeout = 10s;
.between_bytes_timeout = 10s;
}
Кто-нибудь из вас сталкивался с подобной проблемой? Любые указатели по устранению неполадок этой проблемы будет принята с благодарностью.
1 ответ
Проблема, кажется, в between_bytes_timeout
конфигурации. Вы установили его на 10 секунд, и, по вашему мнению, балансировщику нагрузки требуется 10 секунд для отправки сообщения FIN, ACK. Из лаковых документов:
between_bytes_timeout
Единицы измерения: с
По умолчанию: 60Время ожидания по умолчанию между байтами при получении данных из бэкэнда. Мы только ждем это много секунд между байтами, прежде чем сдаться. Значение 0 означает, что оно никогда не истечет. VCL может переопределить это значение по умолчанию для каждого внутреннего запроса и внутреннего запроса. Этот параметр не относится к трубе.
Попробуйте увеличить это число и посмотрите, что получится