
Especificamente no Varnish 3, existe uma maneira de verificar se um diretor possui back-ends saudáveis?
Meu caso de uso é que tenho um balanceador de carga que distribui tráfego para duas caixas de verniz, que por sua vez estão na frente de vários servidores web. Quero que o Varnish retorne 200 para a verificação de integridade do balanceador de carga se o diretor tiver pelo menos um back-end íntegro, sem depender de passar a solicitação para um back-end real.
Estou procurando algo como:
if (req.url ~ "healthcheck.html") {
if (my_director.has_healthy_backend) {
return 200
} else {
error 500 "No backends available"
}
}
Responder1
O principal é que você tenha seu diretor configurado para sondar, para que ele realmente tenha um status de integridade em seus back-ends. Se for esse o caso, você poderia simplesmente usar algo como o seguinte:
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...]
Responder2
A solução equivalente de Verniz 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"));
}
}