varnish缓存一:概述及基本配置

1.Varnish概述
    Varnish是一款高性能且开源的反向代理服务器和HTTP 加速器,它的作者Poul-Henning Kamp是FreeBSD核心的开发人员之一,Varnish采用全新的软件体系机构,和现在的硬件体系配合紧密。作者认为现在的电脑比起1975年已经 复杂许多。在1975年时,储存媒介只有两种:内存与硬盘。但现在计算机系统的内存除了主存外,还包括CPU内的L1、L2,甚至有L3快取。硬盘上也有 自己的快取装置,因此Squid Cache自行处理物件替换的架构不可能得知这些情况而做到最佳化,但操作系统可以得知这些情况,所以这部份的工作应该交给操作系统处理,这就是 Varnish cache设计架构。
挪威最大的在线报纸 Verdens Gang(vg.no)使用3台Varnish代替了原来的12台squid,性能比以前更好,这是Varnish最成功的应用案例,目 前,Varnish可以在FreeBSD6.0/7.0、solaris、 Linux2.6内核上运行。

2.Varnish的结构与特点
    Varnish是一个轻量级的Cache和反向代理软件,先进的设计理念和成熟的设计框架是Varnish的主要特点,现在的Varnish总共代码量不大,功能上虽然在不断改进,但是还需要继续丰富和加强。下面总结了Varnish的一些特点:
(1)是基于内存缓存,重启后数据将消失。
(2)利用虚拟内存方式,io性能好。
(3)支持设置0~60秒内的精确缓存时间。
(4)VCL配置管理比较灵活。
(5)32位机器上缓存文件大小为最大2G。
(6)具有强大的管理功能,例如top,stat,admin,list等。
(7)状态机设计巧妙,结构清晰。
(8)利用二叉堆管理缓存文件,达到积极删除目的。
3.Varnish与Squid的对比
    说到Varnish,不能不提Squid,Squid是一个高性能的代理缓存服务器,它和varnish之间有诸多的异同点,这里分析如下:
下面是他们之间的相同点:
(1)都是一个反向代理服务器,
(2)都是开源软件,
下面是它们的不同点,也是Varnish的优点:
(1)Varnish的稳定性很高,两者在完成相同负荷的工作时,Squid服务器发生故障的几率要高于Varnish,因为使用Squid要经常重启。
(2)Varnish访问速度更快,Varnish采用了“Visual Page Cache”技术,所有缓存数据都直接从内存读取,而squid是从硬盘读取,因而Varnish在访问速度方面会更快。
(3)Varnish可以支持更多的并发连接,因为Varnish的TCP连接释放要比Squid快。因而在高并发连接情况下可以支持更多TCP连接。
(4)Varnish可以通过管理端口,使用正则表达式批量的清除部分缓存,而Squid是做不到的。
当然,与传统的Squid相比,Varnish也是有缺点的,列举如下:
(1)varnish在高并发状态下CPU、IO、内存等资源开销都高于Squid。
(2)varnish进程一旦Hang、Crash或者重启,缓存数据都会从内存中完全释放,此时所有请求都会发送到后端服务器,在高并发情况下,会给后端服务器造成很大压力。


一、安装:
yum -y install pcre
export PKG_CONFIG_PATH=/usr/lib64/pkgconfig
useradd -s /sbin/nologin -M varnish
wget http://repo.varnish-cache.org/source/varnish-3.0.3.tar.gz
./configure --prefix=/usr/local/varnish --enable-dependency-tracking --enable-debugging-symbols --enable-developer-warnings
make && make install
cp redhat/varnish.initrc /etc/init.d/varnish
cp redhat/varnish.sysconfig /etc/sysconfig/varnish
二、配置启动脚本:
1、vim /etc/sysconfig/varnish
NFILES=131072
MEMLOCK=82000
DAEMON_OPTS="-a 172.16.5.158:80 \
            -T 127.0.0.1:3500 \
            -f /usr/local/varnish/etc/varnish/default.vcl \
            -u varnish -g varnish \
            -w 2,51200,10 \
            -p thread_pools=8 \        #一般设为与cpu个数相同
            -s malloc,1G"
命令参数 参数含义  
-a address:port 表示varnish对httpd的监听地址及其端口  
-b address:port 表示后端服务器地址及其端口  
-d 表示使用debug调试模式  
-f file 指定varnish服务器的配置文件  
-p param=value 指定服务器参数,用来优化varnish性能  
-P file Varnish进程PID文件存放路径  
-n dir 指定varnish的工作目录  
-s kind[,storageoptions] 指定varnish缓存内容的存放方式,常用的方式有:“-s file,<dir_or_file>,<size>”。  
其中“<dir_or_file>”指定缓存文件的存放路径,“<size>”指定缓存文件的大小  
-t 指定缺省的TTL值  
-T address:port 设定varnish的telnet管理地址及其端口  
-w int[,int[,int]] 设定varnish的工作线程数,常用的方式有:  
                    -w min,max  
                    -w min,max,timeout  
                    例如:-w5,51200,30,这里需要说明下,在varnish2.0版本以后,最小启动的线程数不能设定过大,设置过大,会导致varnish运行异常缓慢。
2、修改/etc/init.d/varnish 下相应的路径。
3、启动varnish:service varnish start
三、管理运行日志:
mkdir /usr/local/varnish/logs
vim /etc/init.d/varnishncsa
#!/bin/sh  
if [ "$1" == "start" ];then  
/usr/local/varnish/bin/varnishncsa  | /usr/sbin/rotatelogs /usr/local/varnish/logs/varnish.%Y.%m.%d.%H.log 86400 480 &  
elif [ "$1" == "stop" ];then  
     killall varnishncsa  
else  
               echo $0 "{start|stop}"  
fi  
chmod +x /etc/init.d/varnishncsa
启动日志:/etc/init.d/varnishncsa start
四、查看缓存效果与状态:
1、查看响应头信息,看是否命中。curl -I http://172.16.5.158
2、/usr/local/varnish/bin/varnishstat
“Client connections accepted”表示客户端向反向代理服务器成功发送HTTP请求的总数量。
"Client requests received"表示到现在为止,浏览器向反向代理服务器发送HTTP请求的累积次数,由于可能会使用长连接,所以这个值一般会大于“Client connections accepted”。
“Cache hits”表示反向代理服务器在缓存区中查找并且命中缓存的次数。
“Cache misses”表示直接访问后端主机的请求数量,也就是非命中数。
“N struct object”表示当前被缓存的数量。
“N expired objects”表示过期的缓存内容数量。
“N LRU moved objects”表示被淘汰的缓存内容个数。
五、管理缓存内容:
    Varnish的一个显著优点是可以灵活的管理缓存内容,而管理缓存主要的工作是如何迅速有效的控制和清除指定的缓存内容,varnish清除缓存相对比较复杂,不过幸运的是,可以通过varnish的管理端口发送ban指令来清除不需要的缓存。
查看帮助信息:/usr/local/varnish/bin/varnishadm help
1、清除缓存内容:
格式:/usr/local/varnish/bin/varnishadm -T 172.16.5.158:3500 ban.url <regexp>
eg:
   /usr/local/varnish/bin/varnishadm -T 172.16.5.158 :3500 ban.url /s360/index.html
   /usr/local/varnish/bin/varnishadm -T 172.16.5.158 :3500 ban.url  ^/a/b/s.*$
   /usr/local/varnish/bin/varnishadm -T 172.16.5.158 :3500 purge.url  ^.*$    #清除所有缓存
2、查看最近清除的详细URL列表
/usr/local/varnish/bin/varnishadm -T  172.16.5.158 :3500 ban.list
3、清除缓存脚本:
vim /root/work/varnish_purge.sh
#!/bin/sh
if [ $# != 1 ];then
       echo "Please input one argv at a time..."
       exit 1
else
/usr/local/varnish/bin/varnishadm -T  172.16.5.158:3500 ban.url $1
echo "delete $1 was completed..."
fi
eg:
   /root/work/varnish_purge.sh /s360/index.html


你可能感兴趣的:(缓存,varnish,概述及基本配置)