Изменить бэкэнд при повторных попытках в Varnish 4
Я хотел бы иметь возможность изменить серверную часть при повторной попытке в Varnish 4. У нас это работает на другом (более старом) приложении, использующем Varnish 3, но я не смог выяснить это для v4, ни найти много документации. Мы хотим, чтобы установка состояла из двух наборов директоров - один для первоначального запроса, пытающегося использовать локальный сервер в том же центре обработки данных, что и лак, потому что это намного быстрее, и только в случае сбоя выбирайте случайным образом из другого директора серверы в другом датацентров.
В v3 это было легко:
sub vcl_recv {
if (req.restarts == 0) {
set req.backend = defaultdirector;
} else {
set req.backend = backupdirector;
}
}
#Then in vcl_fetch and/or vcl_error something like:
if (beresp.status >= 500 && req.restarts < some_max) {
return(restart);
}
Но теперь, в версии 4, перезапуск предположительно был заменен на повтор, при этом вся документация была такой:
В версии 3.0 было возможно выполнить возврат (перезапуск), заметив, что ответ бэкенда был неправильным, чтобы перейти на другой бэкэнд.
Теперь это называется return (retry) и возвращается к vcl_backend_fetch.
Это влияет только на внутренний поток извлечения, на обработку на стороне клиента это не влияет.
Тем не менее, я все еще вижу пример кода нескольких людей, содержащий return (restart), а не return (retry), и ни одного примера его работы с командой retry.
Я понимаю, что лаку не нужно снова выполнять всю работу в vcl_recv (например, удалять файлы cookie), так как не удалось установить связь только с бэкэндом, поэтому имеет смысл возвращаться к бэкэнду, а не повторять вся обработка внешнего интерфейса, но я получаю ошибку компиляции, если я пытаюсь изменить бэкэнд в vcl_backend_fetch. Как мне сделать эту работу?