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 может переопределить это значение по умолчанию для каждого внутреннего запроса и внутреннего запроса. Этот параметр не относится к трубе.

Попробуйте увеличить это число и посмотрите, что получится

Другие вопросы по тегам