Varnish
一、varnish简介
Varnish是一款高性能的开源HTTP加速器,它比squid还稳定,且效率更高,资源占用更少。相信在反向代理,web加速方面,varnish已经有足够能力代替squid。挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。
二、Varnish的结构与特点
Varnish是一个轻量级的Cache和反向代理软件,先进的设计理念和成熟的设计框架是Varnish的主要特点,现在的Varnish总共代码量不大,功能上虽然在不断改进,但是还需要继续丰富和加强。下面总结了Varnish的一些特点:
(1)是基于内存缓存,重启后数据将消失。
(2)利用虚拟内存方式,io性能好。
(3)支持设置0~60秒内的精确缓存时间。
(4)VCL配置管理比较灵活。
(5)32位机器上缓存文件大小为最大2G。
(6)具有强大的管理功能,例如top,stat,admin,list等。
(7)状态机设计巧妙,结构清晰。
(8)利用二叉堆管理缓存文件,达到积极删除目的。
三、varnish的系统架构
varnish主要运行两个进程:Management进程和Child进程(也叫Cache进程)。
Management进程主要实现应用新的配置、编译VCL、监控varnish、初始化varnish以及提供一个命令行接口等。Management进程会每隔几秒钟探测一下Child进程以判断其是否正常运行,如果在指定的时长内未得到Child进程的回应,Management将会重启此Child进程。
Child进程包含多种类型的线程,常见的如:
cache-main线程:全局只有一个,用于启动cache;
acceptor线程:接收新的连接请求并响应;
worker线程:child进程会为每个会话启动一个worker线程,因此,在高并发的场景中可能会出现数百个worker线程甚至更多;
expiry线程:从缓存中清理过期内容;
backend poll线程:每个后端服务器一个,用于检测后端服务器的健康状况;
epoll/kqueue线程:数量可配置,默认为2,用于管理线程池
在配置varnish时,一般只需为关注cache-worker线程,而且也只能配置其线程池的数量,而除此之外的其它均非可配置参数。与此同时,线程池的数量也只能在流量较大的场景下才需要增加,而且经验表明其多于2个对提升性能并无益处。
四、Varnish的安装
由于我使用的系统为RHEL5.8 ,因此在安装varnish之前,需要安装如下软件包:
automake,autoconf,libtool,ncurses-devel,libxslt,groff,pcre-devel,pkgconfig
# yum -y install *.rpm
编译安装varnish
# tar xf varnish-2.1.3.tar.gz
# cd varnish-2.1.3
# ./configure --prefix=/usr/loca/varnish
# make && make install
为varnish提供配置文件
将varnish的默认配置文件复制成为/etc/sysconfig/varnish
# cp /usr/local/varnish/etc/varnish/default.vcl /etc/sysconfig/varnish
创建Varnish用户和Varnish的工作目录
# useradd –s /sbin/nologin varnish
#mkdir /web/cache
#chown –R varnish:varnish /web/cache
在varnish 2.0版本中,启动varnish之前首先需要为varnish指定后端服务器地址,因此,我们需要编辑varnish的配置文件,指定后端服务器地址。
# vim /etc/sysconfig/varnish
添加如下信息即可:
backend default {
.host = "127.0.0.1";
.port = "80";
}
五、varnish的启动和停止
# /usr/local/varnish/sbin/varnishd -f /etc/sysconfig/varnish -s malloc,200M -T 127.0.0.1:2000 -a 0.0.0.0:8080
-f:指定varnish的配置文件
-s:指定varnish的存储类型和存储容量
-T:指定一个基于本文的管理接口,可用于在不停止varnish的情况下来管理varnish
-a:指定监听的套接字
查看varnish是否启动成功
# netstat -tunlp | grep varnish
tcp 0 0 0.0.0.0:8080 0.0.0.0:* LISTEN 18684/varnishd
tcp 0 0 127.0.0.1:2000 0.0.0.0:* LISTEN 18683/varnishd
其中8080为Varnish监听的端口,2000为Varnish基于telnet的管理端口。
停止Varnish,使用如下命令
# killall varnishd
六、Varnish的二进制程序文件
在安装Varnish后,会生成许多二进制程序文件,其中常见的命令有:
/usr/local/varnish/sbin/varnishd:这种Varnish的启动命令,最重要
/usr/local/varnish/bin/varnishadm:可用来控制管理Varnish实例的。如删除缓存对象
/usr/local/varnish/bin/varnishlog:显示Varnish的日志信息
/usr/local/varnish/bin/varnishncsa:这个命令也可以显示Varnish的日志信息,只不过这个命令显示的日志信息的格式有点类似于apache的combine格式输出的日志。
/usr/local/varnish/bin/varnishstat:显示Varnish的缓存信息
七、varnishd指令
varnishd的启动命令是/usr/local/varnishd/sbin/varnisd命令,这个命令有众多参数,可以使用/usr/local/varnish/sbin/varnishd –h来查看相关参数的详细信息。其中常用的参数有:
-a address:port:指定Varnish监听的套接字
-b address:port:指定后端服务器地址及其监听端口
-d:表示debug调试模式
-f file:指定Varnish的配置文件
-P file:指定Varnish的pid文件
-p param=value:指定服务器参数,用来优化Varnish性能的
-n dir:指定Varnish的工作目录
-s kind[,storageoptions]:指定Varnish后端存储的方式。常用的后端存储方式有:
-s malloc,-s file,<dir_or_file>,<size>。注意在32位的操作系统下,Varnish最大仅支持2G的容量存储。
-t:指定缺省的ttl值
-T address:port:设定Varnish基于telnet的管理地址及其端口
-V:指定Varnish的版本号
-w int[,int[,int]]:指定Varnish的工作线程数。其配置方式有如下几种:
-w <fixed_count>
-w min,max
-w min,max,timeout [default: -w2,500,300]