
特に Varnish 3 では、ディレクターに正常なバックエンドがあるかどうかを確認する方法はありますか?
私のユースケースでは、2 つの Varnish ボックスにトラフィックを分散するロード バランサーがあり、これらのボックスは複数の Web サーバーの前に配置されています。ディレクターに少なくとも 1 つの正常なバックエンドがある場合、実際のバックエンドにリクエストを渡すことなく、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"));
}
}