VCL-探头

配置后端运行状况探测

手册部分:

7

后端运行状况探测器

可以将Varnish配置为定期发送请求,以测试后端是否正在应答,从而测试是否处于“健康”状态。

可以为每个后端配置探测::

backend foo {
    [...]
    .probe = {
        [...]
    }
}

它们可以命名并在后端之间共享::

probe light {
    [...]
}

backend foo {
    .probe = light;
}

backend bar {
    .probe = light;
}

或者是一个 default 可以定义探测,它适用于所有后端,而不是特定的 .probe 已配置::

probe default {
    [...]
}

基本语法与后端相同::

probe name {
    .attribute1 = value;
    .attribute2 = "value";
    [...]
}

没有强制属性,它们都有缺省值。

属性 .url

要查询的URL。默认为 / **

.url = "/health-probe";

属性 .request

可用于指定要发送的完整HTTP/1.1请求::

.request = "GET / HTTP/1.1"
    "Host: example.com"
    "X-Magic: We're fine with this."
    "Connection: close";

每个字符串都将具有 CRNL 追加并终止最终的HTTP标头块 CRNL 也将被附加。

因为连接关闭是运行状况检查的一部分, Connection: close 是强制性的。

属性 .expected_response

预期的HTTP状态,默认为 200 **

.expected_response = 418;

属性 .expect_close

是否期望后端关闭底层连接。

接受 truefalse ,默认为 true **

.expect_close = false;

警告:后端未关闭连接时,设置 expect_closefalse 使探测任务等到超时后才检查响应。

属性 .timeout

探测必须成功的速度,默认为两秒::

.timeout = 10s;

属性 .interval

探测之间的时间,默认为5秒::

.interval = 1m;

后端健康移位寄存器

后端健康探测使用64级移位寄存器来记住最新的健康探测并评估后端的总体健康状况。

在CLI中,良好的后端运行状况如下所示:

varnish> backend.list -p boot.backend
Backend name    Admin    Probe    Health     Last change
boot.backend    probe    5/5      healthy    Wed, 13 Jan 2021 10:31:50 GMT
 Current states  good:  5 threshold:  4 window:  5
  Average response time of good probes: 0.000793
  Oldest ================================================== Newest
  4444444444444444444444444444444444444444444444444444444444444444 Good IPv4
  XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX Good Xmit
  RRRRRRRRRRRRRRRRRRRRRRR----RRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRRR Good Recv
  HHHHHHHHHHHHHHHHHHHHHHH--------HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH Happy

从底部开始,最后一行显示,这个后端对于64个健康探头来说大部分都被声明为“Happy”,但前段时间出现了一些麻烦。

然而,在这种情况下, .window 被配置为5,并且 .threshold 设置为4,因此在这个时间点,后端被认为是完全健康的。

一项额外的 .initial 当加载VCL时,在移位寄存器中填充那么多“Happy”条目,以便后端可以快速变得健康,即使它们的健康通常被考虑在许多样本上:

.interval = 1s;
.window = 60;
.threshold = 45;
.initial = 43;

如果最后一分钟的四个健康探测中有三个是正常的,那么这个后端将被认为是健康的,但是在加载VCL之后,一旦发生了两个良好的探测,它就会变得健康。

默认值为:

  • .window =8

  • .threshold =3

  • .initial = one less than .threshold

请注意,默认设置为 .initial 意味着在第一个探测响应成功返回之前,后端将被标记为不健康。这意味着对于按需创建的后端(由vmod创建),不能使用的默认值 .initial ,因为当后端请求发生时,新创建的后端很可能仍然不健康。

另请参阅

HISTORY

VCL是由Pul-Henning Kamp与Verden Gang AS、Redpill Linpro和Varnish Software合作开发的。本手册页面由Per Buer、Pul-Henning Kamp、Martin Blix Grydeland、Kristian LyngstøL、Lasse Karstensen等人撰写。