阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

高性能的开源http加速器Varnish介绍

146次阅读
没有评论

共计 6019 个字符,预计需要花费 16 分钟才能阅读完成。

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]

八、Varnish 是如何记录数据的?
Varnish 一个比较显著的特点就是它如何记录数据的,varnish 将所有的数据全部记录到内存当中,当内存全部使用以后,又从头开始记录,覆盖最旧的记录。因此,这样就可以很快的记录数据,而且也不占用磁盘空间。不过,一旦服务器宕机的话,则内存中所有的数据都会被释放。
 
九、varnishlog 指令
Varnish 提供了众多的工具来查看内存中的数据,在这里我只说 varnishlog 的应用
在命令行上执行 varnishlog 命令,显示结果如下:
  17 RxHeader    c Accept-Encoding: gzip, deflate
  17 RxHeader    c Host: 192.168.108.202:8080
  17 RxHeader    c Connection: Keep-Alive
  17 VCL_call    c recv
  17 VCL_return  c lookup
  17 VCL_call    c hash
  17 VCL_return  c hash
其中第一列是任意的数,它用来定义请求,相同的号码代表相同的 HTTP 传输。
第二列是信息标记,所有的日志都带有一个标记(tag),标记对应相对的操作。Rx 表示 varnish 收到数据,Tx 表示 varnish 发送数据。
第三列代表数据是从哪里传出或者传入的,是从 c(client)还是 b(backend)。
第四列是被记录的数据。
Varnishlog 还有许多子选项:
-b:只显示 varnish 和 backend server 之间的日志,当您想要优化命中率的时候可以使用这个参数。
-c:和 - b 差不多,不过它代表的是 varnish 和 client 端的通信。
-i tag:只显示某个 tag 相关的信息,比如“varnishlog –iSessionOpen”将只显示新会话,注意,这个地方的 tag 名字是不区分大小写的。
-I:通过正则表达式过滤数据,比如“varnishlog -c -i RxHeader -I Cookie”将显示所有接到来自客户端的包含 Cookie 单词的头信息。

十、varnishstat 指令
varnishstat 的二进制程序是 /usr/local/varnish/bin/varnishstat。缓存命中率的高低直接说明了 varnish 的运行状态和效果,较高的缓存命中率说明了 varnish 运行状态良好,web 服务器的性能也会提高很多,反之,过低的缓存命中率说明 varnish 的配置可能存在问题,那么就需要进行调整,因此,从整体上了解 varnish 的命中率和缓存状态,对于优化和调整 varnish 至关重要。
使用 /usr/local/varnish/bin/varnishstat 命令可以查看 Varnish 的缓存状态信息。如:
# /usr/local/varnish/bin/varnishstat
Hitrate ratio:        1        1        1
Hitrate avg:    0.5294  0.5294  0.5294
 
          18        0.00        0.01 Client connections accepted
          17        0.00        0.01 Client requests received
          9        0.00        0.00 Cache hits
          8        0.00        0.00 Cache misses
          8        0.00        0.00 Backend conn. success
          8        0.00        0.00 Fetch with Length
          11          .            .  N struct sess_mem
          1          .            .  N struct objectcore
          1          .            .  N struct objecthead
          1          .            .  N struct smf
          1          .            .  N large free smf
          10          .            .  N worker threads
          10        0.00        0.00 N worker threads created
          1          .            .  N backends
          8          .            .  N expired objects
          8          .            .  N LRU moved objects
          10        0.00        0.00 Objects sent with write
          18        0.00        0.01 Total Sessions
          17        0.00        0.01 Total Requests
 
其中比较重要的参数有:
Client connections accepted:表示接受的连接数
Client requests received:表示接受的请求总数,如果使用了长连接,那么该值一般大于 Client connections accepted 值
Cache hits:表示命中的次数
Cache misses:表示非命中的次数
N struct objectcore:表示被缓存对象的数量
N expired objects:表示过期的缓存对象数量
N LRU moved objects:表示被淘汰的缓存对象数量

缓存服务器 Varnish 概念篇 http://www.linuxidc.com/Linux/2014-05/101389.htm

缓存服务器 Varnish 概念篇 http://www.linuxidc.com/Linux/2014-05/101389.htm

Varnish Cache 的架构笔记 http://www.linuxidc.com/Linux/2013-10/91016.htm

CentOS 5.8 下 Varnish-2.1.5 的安装配置 http://www.linuxidc.com/Linux/2013-09/89916.htm

RedHat 脚本改用 CentOS 源更新安装 Nginx、PHP 5.3、Varnish http://www.linuxidc.com/Linux/2012-07/65801.htm

利用 Varnish 构建 Cache 服务器笔记 http://www.linuxidc.com/Linux/2012-07/65234.htm

缓存服务 Varnish 安装配置 http://www.linuxidc.com/Linux/2012-07/65228.htm

Varnish 编译安装所需准备 http://www.linuxidc.com/Linux/2012-07/65230.htm

Linux 下 Varnish 缓存的配置优化 http://www.linuxidc.com/Linux/2012-03/56435.htm

Varnish 的详细介绍:请点这里
Varnish 的下载地址:请点这里

本文永久更新链接地址:http://www.linuxidc.com/Linux/2015-05/117752.htm

正文完
星哥说事-微信公众号
post-qrcode
 
星锅
版权声明:本站原创文章,由 星锅 2022-01-20发表,共计6019字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中