varnish warm up

阿赞 2012-11-13

适用场景

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

  • 原来所有缓存的文件都需要全部回源,发生雪崩。
  • 重新计算请求数据,影响效率

那么有什么好的方法在服务器重新解析之前,可以把所有的缓存都重新找回来类,答案是肯定的,这里我用到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中,那么就无需你手工执行了。

适用场景延伸

  • varnish缓存数据迁移将新varnish的backend设定为原varnish,基于varnishreplay拷贝缓存数据
  • 原varnish宕机,数据重生分析varnishlog,得到缓存索引(uri),向后端预请求uri。

弊端

  • varnishlog写硬盘带来的开销多大?
  • 数据重生时,对varnish后端的压力控制

展望

期待varnish持久化缓存的问世

参考:

http://www.ywjt.org/index/archives/734.html

相关推荐