2011-08-17 33 views
3

我们有两个服务器,web1和web2,每个都运行apache和varnish。他们负载均衡,持续30分钟。同步多个光油缓存服务器

在我们的测试中,我们发现一些情况是页面缓存在一个清漆实例(比如web1)上,但不会显示在web2上的清漆上。

是否有办法让它们保持同步?所以,当一个页面被缓存(或清除)在web1中,它也被加载到(或清除)web2,反之亦然?

非常感谢!

回答

1

您可以使用一种清漆作为另一种清漆的后端。

你可以这样做:

// 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

+0

感谢@Pax。如果你愿意并且同步它们,那么没有办法让两台清漆服务器处于“并行”状态......?如果有一半失败,我们有两个前线。很高兴保留这种冗余。 –

0

我也在寻找解决方案来解决平等的问题,但还没有找到它。

一种解决方法可以是:

你的Web服务器之前将一个HAProxy的和激活粘性会话。因此,用户只能被导向到他访问过的一个清漆服务器(并保存相同的缓存数据)。

要正确清除这两种清漆,您的脚本或应用程序应遍历所有清漆服务器的清单,并逐个清除它们。

在我看来,这种解决方案是不推荐的。清漆应该支持建立一个网格,所有服务器可以随时间同步(最终一致性)。