多台服务器共享Varnish缓存

5
我们有4个Varnish服务器放在负载均衡器后面。默认情况下,每个Varnish服务器都有自己的缓存,它们不共享一个缓存。这是一个问题,因为需要加载5-6次特定页面才能将其缓存在每个服务器中。
为了解决这个问题,我将Varnish存储从内存更改为文件。该文件存储在磁盘驱动器上,该驱动器跨所有Varnish服务器共享。所有Varnish服务器都能正确启动,但它们仍在使用自己的缓存。我确认了Varnish正在将缓存文件写入其中。
有任何解决这个问题的想法吗?

为什么需要使用4个Varnish服务器?负载过重吗? - Moshe L
无。灾难恢复。 - Neerav Mehta
如果它们都共享同一个缓存,那么你又回到了单点故障的状态。更好的方法可能是在启动Varnish之前预热缓存。 - Pier-Luc Gendreau
1个回答

5

我知道这个问题已经很旧了,但是为了将来的参考:

文件后端使用mmap支持在内存中存储对象,并在磁盘上备份未链接的文件。

(来自https://www.varnish-cache.org/docs/4.0/users-guide/storage-backends.html

这里重要的词是未链接,这意味着一旦发生,该文件在进程外不再可用。创建进程仍然可以使用它,因为它通过mmap持有一个句柄。 来自unlink(2) man页面:

如果名称是指向文件的最后一个链接,但任何进程仍然打开该文件,则该文件将保留存在,直到关闭引用它的最后一个文件描述符为止。

所以简而言之:不能共享同一文件后端,此外,目前没有已知的方法可以在几个varnish实例之间共享缓存本身(大多数现有技术涉及链接实例以复制缓存内容,但这是复制,而不是共享)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接