如何重载varnish缓存

众所周知,varnish是一个十分强大的缓存服务器,比squid的性能要高出很多,但相比一个最大的缺点就是如果varnish进程挂掉或服务器down机,那么所有的缓存就全部丢失了。结果就是:

1)原来所有缓存的文件都需要全部回源,造成回源流量和负载都高,如果在高峰,或者一些机器都挂掉的话会把上层源搞挂。

2)如果对于几十M的文件重新回源,会让用户等待,影响用户体验

那么有什么好的方法在服务器重新解析之前,可以把所有的缓存都重新找回来类,答案是肯定的,这里我用到varnishreplay 这一利器。

操作如下:

varnishlog -D -a -w /var/log/varnish.log

如上相当于一个记录器,把用户的访问都写到一个log文件中

varnishreplay -a 127.0.0.1:80 -r /var/log/varnish.log

这个就是一个恢复的操作,它会对照varnish.log里面的东西重新把原来的缓存填满,相当于一个回放功能

我们可以把varnish.log进行日志切割,根据个人的业务保存预留的天数,比如在服务器挂掉的时候,我只重新加载1个星期的缓存,如果你把varnishreplay -r /var/log/varnish.log放到rc.local 中,那么就无需你手工执行了。

哈哈,varnishreplay是不是很强大!!!