Можно ли запросить у директора Varnish количество содержащихся в нем работоспособных бэкэндов?

Можно ли запросить у директора Varnish количество содержащихся в нем работоспособных бэкэндов?

В частности, в Varnish 3 есть ли способ проверить, есть ли у директора работоспособные бэкэнды?

Мой вариант использования заключается в том, что у меня есть балансировщик нагрузки, который распределяет трафик на 2 ящика Varnish, которые, в свою очередь, находятся перед несколькими веб-серверами. Я хочу, чтобы Varnish возвращал 200 на проверку работоспособности балансировщика нагрузки, если у директора есть хотя бы один работоспособный бэкенд, без зависимости от передачи запроса на фактический бэкенд.

Я ищу что-то вроде:

if (req.url ~ "healthcheck.html") {
    if (my_director.has_healthy_backend) {
        return 200
    } else {
        error 500 "No backends available"
    }
}

решение1

Главное, чтобы ваш директор был настроен на зондирование, так что у него действительно есть статус работоспособности на ваших бэкэндах. Если это так, то вы можете просто использовать что-то вроде следующего:

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...]

решение2

Эквивалентный раствор 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"));
  }
}

Связанный контент