В частности, в Varnish 3 есть ли способ проверить, есть ли у директора работоспособные серверные части?
Мой вариант использования состоит в том, что у меня есть балансировщик нагрузки, который распределяет трафик на 2 ящика с лаком, которые, в свою очередь, находятся перед несколькими веб-серверами. Я хочу, чтобы Varnish возвращал 200 проверке работоспособности балансировщика нагрузки, если у директора есть хотя бы один работоспособный бэкэнд, вне зависимости от передачи запроса в реальный бэкэнд.
Я ищу что-то вроде:
if (req.url ~ "healthcheck.html") {
if (my_director.has_healthy_backend) {
return 200
} else {
error 500 "No backends available"
}
}
Главное, чтобы ваш директор настроил зондирование, чтобы он действительно имел состояние здоровья на ваших серверах. Если это так, вы можете просто использовать что-то вроде следующего:
sub vcl_recv {
if (req.url ~ "healthcheck.html") {
if (!req.backend.healthy) {
error 503 "No backends available";
} else {
error 200 "All is well";
}
}
[...rest of your logic...]
Эквивалентный раствор Varnish 4:
if (req.url ~ "healthcheck.html") {
if (!std.healthy(req.backend_hint)) {
return (synth (503, "No backends available"));
}
else {
return (synth (200, "All is well"));
}
}