在 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();