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

Считает ли лак перезапуск, если все серверы в директоре больны?

Моя установка лака выглядит так (очевидно, я упростил):

director default round-robin {
    { .backend = me! }
}
director peers random {
    { .backend = peer1 }
    { .backend = peer2 }
    { .backend = peer3 }
}

И vcl, о котором мне интересно:

if (req.restarts == 0) {
    set req.backend = default;
} else {
    set req.backend = peers;
}

Что делает лак при мне! болеет (или действительно если все бэкенды в директоре болят, только в моем случае это 1/1)? Он сразу переходит к vcl_error и запускает перезапуск?

Я хочу знать, как он будет обрабатывать максимальное количество перезапусков. Скажем в этом примере, я хочу попробовать дважды, прежде чем сдаться. Я всегда хочу сначала попытаться получить страницу локально, а затем, если это не удастся, попробовать одного из моих коллег. Но, если я уже заранее знаю, что мой местный житель болен, я все равно хотел бы попробовать двух своих коллег. Есть ли способ это настроить?

Я провел собственное тестирование, и похоже, что это ошибка, когда режиссер нездоров. Обратите внимание: я никогда не тестировал это с более чем одним сервером в первом пуле.

Когда я установил свой целевой page.php для автоматического возврата статуса заголовка 500 (только на сервере me!) И просмотрел журнал varnishlog, я увидел запрос ко мне! с X-Restarts = 0, и он вернул 500. Затем последовал запрос к одному из партнеров с X-Restarts = 1, который успешно получил page.php со статусом 200.

Когда я поставил на себя пробный тест! чтобы показать меня как нездоровую и сделать тот же запрос для page.php, первой (и единственной) записью в журнале был запрос к одному из пиров с X-Restarts = 1.

Так что он действительно ведет себя так, как я предполагаю ... но что ему действительно нужно, так это счетчик количества попыток передачи на бэкэнд. Довольно большая разница - знать, произошла ли ошибка из-за фактической попытки получить страницу, или из-за отсутствия попытки.