Varnish 在内存模式下比较高效,不过它有一个缺点就是 缓存是放在内存里的,一旦重启, 缓存文件也就没了。
往往由于需要调整 vcl 配置文件,但是又不想重启varnish服务,就让配置文件生效的话。这时就可以通过 reload 配置文件使之生效。
Varnish 重载配置文件的方法,主要有:telnet管理法、varnishadm重载法、varnish_reload_vcl脚本法。
一、telnet管理法
使用 telnet 命令登录到管理接口。
[root@localhost varnish]# telnet 127.0.0.1 6082 Trying 127.0.0.1... Connected to localhost.localdomain (127.0.0.1). Escape character is '^]'. 200 232 ----------------------------- Varnish Cache CLI 1.0 ----------------------------- Linux,2.6.18-308.el5,x86_64,-sfile,-smalloc,-hcritbit varnish-3.0.6 revision 1899836 Type 'help' for command list. Type 'quit' to close CLI session. help 200 447 help [command] ping [timestamp] auth response quit banner status start stop vcl.load <configname> <filename> vcl.inline <configname> <quoted_VCLstring> vcl.use <configname> vcl.discard <configname> vcl.list vcl.show <configname> param.show [-l] [<param>] param.set <param> <value> panic.show panic.clear storage.list backend.list backend.set_health matcher state ban.url <regexp> ban <field> <operator> <arg> [&& <field> <oper> <arg>]... ban.list
然后使用如下命令
vcl.load online_new.vcl /data/varnish/etc/varnish/online.vcl # 如果配置文件修改得有问题,此时会报错,返回的就不是2000 200 13 VCL compiled. vcl.list 200 87 active 3 boot available 0 online_new.vcl vcl.use online_new.vcl # 执行此命令,此时新的配置文件已经生效 200 0 vcl.list 200 87 available 3 boot active 0 online_new.vcl
我们也可以使用 vcl.show online_new.vcl 查看当前配置文件的内容。
二、varnishadm 重载法
运行varnishadm工具后出现的提示界面和telnet进行管理的界面是相同的,当然重载配置文件的方法也是相同的。都是先通过vcl.load检查配置文件是否有问题。发现是200后,再通过vcl.use加载新的配置并生效。所以从本质上说两者并没有区别。
三、varnish_reload_vcl 脚本法
能过yum包安装的话,可以直接使用该脚本。而且通过源码包进行安装的话,在源码包的的redhat目录下也含有该脚本,不过并不能直接使用该脚本,该脚本会读取/etc/sysconfig/varnish文件里的一些变量(该文件更改后就可以使用了)。
而如果细看该脚本的话,其原理是通过varnishadm命令,重新读取配置文件并载入。原理上来说和上面两种方法也没太大区别。
所以总的来说,三种方法属于同宗同源。