
特別是在 Varnish 3 中,有沒有辦法檢查導向器是否有健康的後端?
我的用例是,我有一個負載平衡器,它將流量分配到 2 個清漆盒,而這兩個清漆盒又位於多個 Web 伺服器前面。如果director至少有一個健康的後端,我希望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"));
}
}