我们有两个服务器,web1和web2,每个都运行apache和varnish。他们负载均衡,持续30分钟。同步多个光油缓存服务器
在我们的测试中,我们发现一些情况是页面缓存在一个清漆实例(比如web1)上,但不会显示在web2上的清漆上。
是否有办法让它们保持同步?所以,当一个页面被缓存(或清除)在web1中,它也被加载到(或清除)web2,反之亦然?
非常感谢!
我们有两个服务器,web1和web2,每个都运行apache和varnish。他们负载均衡,持续30分钟。同步多个光油缓存服务器
在我们的测试中,我们发现一些情况是页面缓存在一个清漆实例(比如web1)上,但不会显示在web2上的清漆上。
是否有办法让它们保持同步?所以,当一个页面被缓存(或清除)在web1中,它也被加载到(或清除)web2,反之亦然?
非常感谢!
您可以使用一种清漆作为另一种清漆的后端。
你可以这样做:
// use random director so you can fall back to web
director varnish random {
{
.backend = varnish2;
.weight = 100000000;
}
{
.backend = web;
.weight = 1;
}
}
acl othervarnish {
"{hostname}";
}
sub vcl_recv {
set req.backend = web;
// switch backend to varnish only if you haven't come from there
if (!client.ip ~ othervarnish) {
set req.backend = varnish;
}
}
但要注意这似乎是它doesn't work with ESIs。
我也在寻找解决方案来解决平等的问题,但还没有找到它。
一种解决方法可以是:
你的Web服务器之前将一个HAProxy的和激活粘性会话。因此,用户只能被导向到他访问过的一个清漆服务器(并保存相同的缓存数据)。
要正确清除这两种清漆,您的脚本或应用程序应遍历所有清漆服务器的清单,并逐个清除它们。
在我看来,这种解决方案是不推荐的。清漆应该支持建立一个网格,所有服务器可以随时间同步(最终一致性)。
感谢@Pax。如果你愿意并且同步它们,那么没有办法让两台清漆服务器处于“并行”状态......?如果有一半失败,我们有两个前线。很高兴保留这种冗余。 –