我的清漆设置看起来像这样(显然我已经简化):
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; }
清漆是什么当我的! 生病了(或者如果导演的所有后台都生病了,只有我的情况是1/1)? 它立即进入vcl_error,并触发重启?
我想知道它将如何处理最大重新启动。 在这个例子中,我只想在放弃之前尝试两次。 我总是想先尝试在本地获取页面,然后如果失败,请尝试我的同行之一。 但是,如果我事先已经知道我的地方病了,我还是希望能够尝试我的两个同龄人。 有没有办法设置?
我做了自己的testing,看起来导演不健康的时候是错误的。 注意我从来没有用第一个池中的多个服务器进行testing。
当我设置我的目标page.php自动返回一个头500状态(只在我!服务器上),并观看varnishlog,我看到了我的要求! 当X-Restarts = 0时,它返回一个500.接着请求一个X-Restarts = 1的对等成功获得了200状态的page.php。
当我对我进行探测testing时! 为了让我看起来不健康,并且对page.php做了相同的请求,日志中的第一个(也是唯一)条目就是请求X-Restarts = 1的其中一个对象。
所以它的行为就像我猜测的那样……但是真正需要的是它实际上试图传递给后端的次数。 这是一个非常大的差异,要知道失败是从实际尝试检索页面,而不是尝试做。