如果控制器中的所有后端都出现问题,Varnish 是否会计算重新启动?

如果控制器中的所有后端都出现问题,Varnish 是否会计算重新启动?

我的清漆设置看起来像这样(显然我已经简化了):

director default round-robin {
    { .backend = me! }
}
director peers random {
    { .backend = peer1 }
    { .backend = peer2 }
    { .backend = peer3 }
}

我想知道的 vcl 是:

if (req.restarts == 0) {
    set req.backend = default;
} else {
    set req.backend = peers;
}

当我!出现故障时,Varnish 会做什么?(或者说,如果 director 中的所有后端都出现故障,但在我的例子中只有 1/1)?它会立即进入 vcl_error 并触发重启吗?

我想知道它将如何处理最大重启次数。在这个例子中,我只想在放弃之前尝试两次。我总是想先尝试在本地获取页面,然后如果失败,再尝试我的一个对等点。但是,如果我提前知道我的本地有问题,我仍然希望能够尝试我的两个对等点。有没有办法设置它?

答案1

我已经进行了自己的测试,当控制器不健康时,这似乎是一个错误。请注意,我从未在第一个池中使用多台服务器进行过测试。

当我将目标 page.php 设置为自动返回标头 500 状态(仅在 me! 服务器上)并观察 varnishlog 时,我看到对 me! 的请求带有 X-Restarts = 0,它返回了 500。随后向其中一个对等点发出请求,X-Restarts = 1,成功获取带有 200 状态的 page.php。

当我设置探测测试来显示我不健康,并对 page.php 发出相同的请求时,日志中第一个(也是唯一的)条目是向 X-Restarts = 1 的其中一个对等点发出的请求。

所以它的行为确实和我猜想的一样……但它真正需要的是一个计数器,用于记录它实际尝试传递到后端的次数。知道失败是来自实际尝试检索页面还是没有尝试检索页面,这两者之间有很大区别。

相关内容