Varnish 配置后端有多个探测器?

Varnish 配置后端有多个探测器?

在 Varnish 3 中是否可以配置后端以进行多个探测?

我有多个运行 Drupal 的 varnish 服务器和多个后端服务器。我配置了一个基本的 1 秒间隔健康检查 PHP 文件来验证应用程序服务器的健康状况,但我还想对 Drupal 堆栈使用健康检查,但是此检查的运行频率需要低于基本健康检查。例如:每 5 秒它可以检查一次 Drupal 堆栈。

对于这种情况,可以在单个后端使用 2 个独立的探测器吗?

理论配置:

probe healthcheck {
    .url = "/healthcheck.php";
    .interval = 1s;
    .timeout = 100 ms;
    .window = 5;
    .threshold = 5;
}

probe drupalcheck {
    .url = "/index.php";
    .interval = 5s;
    .timeout = 5s;
    .window = 5;
    .threshold = 5;
}

backend apache_1 {.host = "server01"; .port = "8080"; .probe = healthcheck; .probe = drupalcheck}
backend apache_2 {.host = "server02"; .port = "8080"; .probe = healthcheck; .probe = drupalcheck}
backend apache_3 {.host = "server03"; .port = "8080"; .probe = healthcheck; .probe = drupalcheck}

答案1

快速回答:不。

更长的答案:您可以为单个实际后端服务器指定任意数量的后端,每个后端都可以有自己的探测器。然后您可以根据需要将流量路由到它们。

您还可以通过探测调用在应用程序服务器上调用类似“探测检查”的脚本,该脚本可以执行自己的状态检查。无论如何,您只是在调用 php/python/etc 脚本,因此它可以是您创建的脚本。

这里还有更多内容(不完全相关): https://www.varnish-cache.org/lists/pipermail/varnish-misc/2011-October/021298.html

答案2

探测器只检查返回的标头。因此,您可以编写一个脚本/probe.php,先向 发送一个请求/healthcheck.php,然后再向 发送另一个请求index.php

在里面/probe.php您可以使用$headers = get_headers($url,1);并分析每个 URL 上的 40X 或 50X 返回代码。

在最后:

if($atleastOneOfTheUrlsReturnedSomeThingBad){
  header('HTTP/1.0 404 Not Found');
}
else{
  header( "HTTP/1.1 200 OK" );
}
exit();

相关内容