¿Se puede consultar a un director de Varnish por la cantidad de backends en buen estado que contiene?

¿Se puede consultar a un director de Varnish por la cantidad de backends en buen estado que contiene?

Específicamente en Varnish 3, ¿hay alguna manera de comprobar si un director tiene backends en buen estado?

Mi caso de uso es que tengo un equilibrador de carga que distribuye el tráfico a 2 cajas de barniz, que a su vez se encuentran frente a varios servidores web. Quiero que Varnish devuelva un 200 a la verificación de estado del balanceador de carga si el director tiene al menos un backend en buen estado, sin depender de pasar la solicitud a un backend real.

Estoy buscando algo como:

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

Respuesta1

Lo principal es que tiene su director configurado con sondeo, por lo que en realidad tiene un estado de salud en sus backends. Si ese es el caso, entonces podrías usar algo como lo siguiente:

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

Respuesta2

La solución equivalente de Varnish 4 es:

if (req.url ~ "healthcheck.html") {
  if (!std.healthy(req.backend_hint)) {
    return (synth (503, "No backends available"));
  }
  else {
    return (synth (200, "All is well"));
  }
}

información relacionada