AWS ELB背后的两个Varnish服务器之间的一致性

时间:2013-10-18 10:44:18

标签: amazon-web-services amazon-ec2 varnish

我们正在使用ELB在两个不同的AZ中的两个不同Nginx + Varnish服务器之间加载平衡请求。这些Varnish服务器已配置为平衡对另一个ELB请求到我们的应用服务器的请求。通过这种方式,如果一个AZ停止工作,我们应该能够保持站点正常工作。

我们面临的问题是,我们不知道如何防止网站向同一客户端提供不同的缓存对象,即保持两个Varnish服务器之间缓存内容的一致性。

一种可能的解决方案是使用ELB的IP哈希,以便根据客户端IP,一个Varnish或另一个将提供请求。这会在一定程度上缓解这个问题。

还有其他方法可以同步这两个Varnish服务器之间的内容吗?

2 个答案:

答案 0 :(得分:3)

Varnish中没有可用的活动状态同步。

你可以使用一个帮助程序来完成这个过程,这个过程会将varnishlog和其他n个Varnish服务器调用,但这很脆弱,可能会破坏你。常见的方法是进行循环操作并拥有足够的流量,以便在需要的地方缓存所有内容。 :)

您的应用程序在您的问题中的行为方式有一些潜在的知识,但没有太多细节。为什么不同的后端做出响应是一个问题?如果它们是相同的(因为你想要冗余,我希望它们是?)这应该不是问题。

如果后端回复某些URL的特定于用户的响应数据,它应该告诉Varnish使用Vary标头。

在ELB中添加会话粘性(~ip哈希)只会隐藏您的问题,直到其中一个AZ关闭并且流量被重新路由,此时我猜您已经很忙了。

答案 1 :(得分:0)

您可以启用ELB粘性来实现您的需求,没有清漆集群在varnish实例之间共享状态。