可以查詢 Varnish 控制器包含的健康後端數量嗎?

可以查詢 Varnish 控制器包含的健康後端數量嗎?

特別是在 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"));
  }
}

相關內容