Kann ein Varnish-Director nach der Anzahl der in ihm enthaltenen fehlerfreien Backends abgefragt werden?

Kann ein Varnish-Director nach der Anzahl der in ihm enthaltenen fehlerfreien Backends abgefragt werden?

Gibt es speziell in Varnish 3 eine Möglichkeit zu überprüfen, ob ein Director über fehlerfreie Backends verfügt?

Mein Anwendungsfall ist, dass ich einen Load Balancer habe, der den Datenverkehr auf zwei Varnish-Boxen verteilt, die wiederum vor mehreren Webservern sitzen. Ich möchte, dass Varnish eine 200 an den Health Check des Load Balancers zurückgibt, wenn der Director mindestens ein gesundes Backend hat, ohne dass die Anfrage an ein tatsächliches Backend weitergeleitet werden muss.

Ich suche so etwas wie:

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

Antwort1

Die Hauptsache ist, dass Ihr Director mit Probing eingerichtet ist, sodass er tatsächlich einen Gesundheitsstatus auf Ihren Backends hat. Wenn das der Fall ist, können Sie einfach etwas wie das Folgende verwenden:

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

Antwort2

Die entsprechende Varnish 4-Lösung lautet:

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

verwandte Informationen