高性能HTTP加速器varnish实践

一,varnish介绍及特点

varnish是一款高性能的、轻量的、开源的反向代理服务器和HTTP加速器。Varnish代码量不大,先进的设计理念和成熟的设计框架是它的主要特征。目前在缓存工具的选择上Varnish由于在本身的技术上优势已经超越传统的缓存工具squid,越来越受到青睐。以下是varnish的一些特点介绍:
      1,基于内存缓存,重启后数据消失
      2,利用虚拟内存方式,I/O性能好
      3,支持设置0-60秒的精确缓存时间
      4,配置管理灵活
      5,,具有强大的管理功能

二,varnish的安装

Varnish安装简单,可以使用非root用户进行安装。
1,首先安装 pcre 库,pcre 库是为兼容正则表达式。
     >tar zxvf pcre7.9.tar.gz 
     >cd pcre7.9/ 
     >./configure --prefix=/zhangzya/pcre/ 
     >Make && make install
2,varnish 安装
     >tar xzvf varnish-3.0.3.tar.gz 
     >cd varnish-3.0.3 
     >export PKG_CONFIG_PATH=/zhangzya/pcre/lib/pkgconfig 
     >./configure --prefix=/zhangzya/varnish      
     >make 
     >make install
     到此安装完成

三,varnish配置

1,VCL配置文件常用函数介绍
     vcl,即varnish configuation language,用来定义varnish的存取策略。下面对vcl常用内置函数进行介绍。
     Vcl_recv函数:用于接收和处理请求。
     Vcl_pipe函数:进入pipe模式时被调用,将请求直接传递至后端主机。
     Vcl_pass函数:用户将请求直接传递到后端主机,数据不进行任何缓存。
     Lookup:在缓存中查找请求对象,根据查找结果赋权给vcl_hit  vcl_miss函数。
     Vcl_hit函数:执行lookup后,在缓存中找到请求内容自动调用该函数。
     Vcl_fetch函数:在后端主机更新缓存并获取内容后调用,通过判断获取的内容来决定是将内容放入缓存还是直接返回给客户端。
     Vcl_deliver函数:将在缓存中找到的请求内容发生给客户端前调用。

2,vcl处理流程介绍

Varnish 处理 HTTP 请求的过程大致分为如下几个步骤:
     Receive 状态(vcl_recv):也就是请求处理的入口状态,根据 VCL 规则判断该请求应该 pass(vcl_pass)或是 pipe(vcl_pipe),还是进入 lookup(本地查询)。 
     Lookup 状态:进入该状态后,会在 hash 表中查找数据,若找到,则进入 hit(vcl_hit)状态,否则进入 miss(vcl_miss)状态。
    Pass(vcl_pass)状态:在此状态下,会直接进入后端请求,即进入 fetch(vcl_fetch)状态
    Fetch(vcl_fetch)状态:在 fetch 状态下,对请求进行后端获取,发送请求,获得数据,并根据设置进行本地存储。
    Deliver(vcl_deliver)状态。将获取到的数据发给客户端,然后完成本次请求。

3,vcl配置文件详细介绍
      Varnish安装完成后,默认配置文件在/echnweb/varnish/etc/varnish/default.vcl。该文件内容默认全部注释,我们可以已该文件为模板,创建新的的文件varnish.vcl,主要配置介绍:

#指定后端主机的IP及端口
 backend default {
     .host = "192.168.232.139";
     .port = "9080";
 }
#开始调用vcl_recv函数
 sub vcl_recv {
     ... ...
     #移除匹配规则的对应请求的Cookie信息
     if (req.request == "GET" && req.url ~ "\.(jpg|png|gif|swf|jpeg|ico|css|js|html)$")
     {
         unset req.http.cookie;
     }  
     #如果请求的类型不是GET或HEAD,则进入pass模式
     if (req.request != "GET" && req.request != "HEAD") {
         return (pass);
    ... ...
    }
sub vcl_fetch {
   #当请求类型是GET并且请求的URL以js、css等结尾时进行缓存,缓存时间7天。
   if (req.request == "GET" && req.url ~ "\.(js|css|mp3|jpg|png|gif|swf|jpeg|ico)$") 
     { set beresp.ttl = 7d; }
}

Varnish对应多台Web主机的应用实例,具有负载分担和健康检测机制。具体配置如下:
backend web1{
.host="192.168.232.11";
.port="80";
}
backend web2{
.host="192.168.232.12";
.port="80";
}
#定义一个名为webserver的director,也就是由web1和web2两台后端服务器随机分担请求。.weight用来指定两台后端服务器的权值,权值高的处理请求的几率就高。
director webserver random{
{.backend=web1;.weight=5;}
{.backend=web2;.weight=8;}
}

四,varnish的启动

1,Varnish启动命令为/zhangzya/varnish/sbin/varnishd,启动时参数较多,执行
/zhangzya/varnish/sbin/varnishd -h 可获得各参数的详细用法。


启动参数


含义


-a address:port


表示Varnish对httpd的监听地址及端口


-b address:port


表示后端服务器地址及端口


-d


表示使用debug调试模式


-f


指定Varnish服务器的配置文件


-p param=value


指定服务器参数,用来优化Varnish性能


-P file


Varnish进程pid文件存放路径


-n dir


指定Varnish的工作目录


-T address:port


设定varnish的telnet管理地址及端口


-w int,int,int


设定varnish的工作线程数,常用的方式有:-w min,max -w min,max,timeout


-s kind[,storageoptions]


指定Varnish缓存内容的存放方式,常用的方式有:-s file,,
其中用于指定缓存文件的存放路径,“”用于指定缓存文件的大小

2,启动后效果如下图,需要注意的是,Varnish运行时会同时启动两个进程,一个主进程,一个是子进程,如果子进程出现问题,主进程将重新生成一个子进程。

3,如果Varnish正常 启动,31000端口和31001端口应该处于监听状态。可以通过netstat进行查看。

五,varnish运行日志介绍
       varnish提供了varnishlog和varnishncsa两个工具用于日志处理。前者便于详细的查看varnish 缓存、接收、发送、是否命中等详细的处理过程,便于对varnish进行性能分析和故障查询;后者便于日常的日志分析和数据挖掘。

1,Varnishncsa日志如下图,可以把日志记录到文件中
/zhangzya/varnish/bin/varnishncsa -n /echnweb/varnish1/cache -w varnish.log &

2,varnishlog日志如下图
/zhangzya/varnish/bin/varnishlog -n /echnweb/varnish1/cache

六,varnish缓存效果展示

可以通过浏览器访问对应的网页来查看Varnish缓存的效果。下面用命令行方式通过查看网页头来查看缓存命中情况。

第一次访问后查看网页头信息,红框中状态为MISS,表示该访问没有从缓存中读取。

第二次访问相同的URL地址,红框中状态为HIT,表示缓存命中,从缓存中读取内容。

七,varnish缓存刷新

Varnish的一个显著优点是可以灵活管理缓存内容。可迅速有效地控制和清除指定的缓存内容。

1,telnet登录管理端口清楚所有缓存,登陆后执行ban.url /*返回200表示清理成功。

2,通过linux命令方式清除缓存,清理所有域名下download下的缓存

/zhangzya/varnish/bin/varnishadm -T 192.168.232.139:31001 ban.url /download/

3,清理10086.com域名下所有png文件的缓存

/zhangzya/varnish/bin/varnishadm -T 192.168.232.139:31001  ban req.http.host == "10086.com" && req.url  ~ ".png$"

八,优化varnish自身参数

telnet到Varnish的管理端口,然后执行param.show命令即可看到Varnish运行中的所有参数。当然也可以通过这种方式更改相关参数,下面对4个重点参数进行介绍:
thread_ pools 4[ pools]
thread_ pool_ min 50[ threads]
thread_ pool_ max 5120[ threads]
thread_ pool_ timeout 10[ seconds]

thread_pools:用来设置线程池的数量。一般认为这个值和系统CPU的数目相同最好。设置多一些的pool,Varnish的并发处理能力会更强,但是也会消耗更多的CPU和内存。

thread_pool_min:用来设置每个pool的最小thread数。pool接收到可用的请求后,就会将请求分配给空闲的thread来处理。

thread_pool_max:表示所有pool对应的thread数总和的最大值。此值不能太大,设置为系统峰值的90%左右即可,设置过大会导致进程被挂起。

thread_pool_timeout:表示thread的超时过期时间。当thread数大于thread_pool_min设定值时,如果thread空闲超过thread_pool_timeout设定的时间,thread就会释放。

九,优化linux内核参数
      内核参数是用户和系统内核之间交互的一个接口,通过这个接口用户可以在系统运行的同时动态更新内核配置,可以通过调整Proc文件系统达到优化Linux性能的目的。

以下参数是官方给出的一个配置:
net.ipv4.ip_local_port_range=1024 65536
net.core.rmem_max=16777216
net.core.wmem_max=16777216
net.ipv4.tcp_rmem=4096 87380 16777216
net.ipv4.tcp_wmem=4096 65536 16777216
net.ipv4.tcp_fin_timeout=30
net.core.netdev_max_backlog=30000
net.ipv4.tcp_no_metrics_save=1
net.core.somaxconn=262144
net.ipv4.tcp_syncookies=1
net.ipv4.tcp_max_orphans=262144
net.ipv4.tcp_max_syn_backlog=262144
net.ipv4.tcp_synack_retries=2
net.ipv4.tcp_syn_retries=2

时间: 2024-10-15 06:02:56

高性能HTTP加速器varnish实践的相关文章

高性能缓存加速器varnish(概念篇)

高性能缓存加速器varnish(概念篇) 一.varnish简介 varnish是一款高性能的开源HTTP加速器,现在很多门户网站已经部署了varnish,并且反应都很好,甚至反应比squid还稳定,且效率更高,资源暂用更少. 作者Poul-Henning Kamp是FreeBSD的内核开发者之一.Varnish采用全新的软件体系架构,和现在的硬件提交配合紧密.在1975年时,储存媒介只有两种:内存与硬盘.但现在计算 机系统的内存除了主存外,还包括了cpu内的L1.L2,甚至有L3快取.硬盘上也

高性能HTTP加速器Varnish安装与配置(包含常见错误)

Varnish是一款高性能的开源HTTP加速器.挪威最大的在线报纸Verdens Gang使用3台Varnish取代了原来的12台Squid,性能竟然比曾经更好.Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开发人员之中的一个.他觉得如今的计算机比起1975年已经复杂很多.在1975年时.储存媒介仅仅有两种:内存与硬盘.但如今计算机系统的内存除了主存外,还包含了cpu内的L1.L2,甚至有L3快取. 硬盘上也有自己的快取装置.因此Squid cache自行处理物件

高性能HTTP加速器Varnish安装与配置

导读 Varnish是一款高性能且开源的反向代理服务器和HTTP加速器,它采用了全新的软件体系结构,和现在的硬件体系配合紧密.下面就由我给大家简单说说他的安装与配置. 安装 安装pcre 如果没有安装pcre,在编译varnish 2.0以上版本时,会提示找不到pcre库,而pcre库是为了兼容正则表达式,所以必须先安装pcre库.下面是pcre的安装过程: [[email protected] ~]# tar -zxvf pcre-7.9.tar.gz [[email protected] ~

搭建cdn的高性能HTTP加速器Varnish服务器

CND的简单了解: 内容分发网络(CDN)是一种新型网络构建方式,它是为能在传统的IP网发布宽带丰富媒体而特别优化的网络覆盖层:而从广义的角度,CDN代表了一种基于质量与秩序的网络服务模式. CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡.内容分发.调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率.CDN的关键技术主要有内容存储和分发技术. CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中

强大的http加速器------varnish

varnish 简介 varnish是一款强大的http加速器,其设计初衷因为计算机越来越复杂,不像那个只有内存与硬盘的存储媒介的年代,如今的计算机系统除了内存外还有cpu的L1.L2.L3快取,因此当初的Squid cache自行处理物件替换的架构不可能得知这些情况而做到最佳,但操作系统可以得知该情况,此PoulHenning Kamp设计了varinish的架构 varnish术语解析 缓存的衡量参数:命中率 # 1 文档命中率 # 2 字节命中率 缓存类型: # 私有缓存 (比如客户端的浏

高性能缓存服务器Varnish架构配置

Varnish跟Squid都是一款内容加速缓存服务器,我们可以使用它们来对我们的网页内容进行缓存,以此来从某个方面提高用户体验度,提升网站整体的抗压能力. 目前自建的CDN中,有很多都是基于Squid.Varnish等相关缓存软件,经过内部的二次开发实现了更好的内容加速及管理. 那今天我们一起来学习一下Varnish简单的搭建及日常的维护,深入的东西后期分享,跟大家一起来交流.这里直接上Shell脚本自动初始化并安装: #!/bin/sh #auto install varnish #2014-

高性能的开源http加速器Varnish

Varnish简介 Varnish是一款高性能的开源HTTP加速器.varnish项目是2006年发布的第一个版本0.9.距今已经八年多了,此文档之前也提过varnish还不稳定,那是2007年时候编写的,经过 varnish开发团队和网友们的辛苦耕耘,现在的varnish已经很健壮.很多门户网站已经部署了varnish,并且反应都很好,甚至反应比 squid还稳定,且效率更高,资源占用更少.相信在反向代理,web加速方面,varnish已经有足够能力代替squid. Varnish的系统架构

高性能web缓存加速器---varnish

web缓存是对网页文档的临时缓存的信息技术,web缓存能有效降低带宽使用量和服务器负载,提高用户体验.为什么需要缓存呢? 经验研究发现程序的运行具有两个方面的局部性特征: 时间局部性:数据再次被访问到的几率很大 空间局部性:周围数据也可能被访问到的几率很大 根据局部性特征,将访问过的资源IO或加载到高速存储上,不再从源位置加载:另外把其周边的数据也加载到高速存储中,加速资源的访问.缓存就是使用了高速的设备和良好结构设计加速资源访问速度. 一.web缓存 web缓存加速器常常应用的于调度器之后,实

HTTP加速器——VARNISH

一.前言    首先来简单认识一下什么是varnish?它能实现什么样的功能?....... Varnish是一款高性能的开源HTTP加速器,常见的缓存服务开源解决方案有varnish.nginx.squid .ats等,Varnish 的作者Poul-Henning Kamp是FreeBSD的内核开 发者之一,varnish项目是2006年发布的第一个版本0.9.距今已经有十年了,此文档之前也提过varnish还不稳定,那是2007年时候编写的,经过varnish开发团队和网友们的辛苦耕耘,现