高性能http加速器varnish实践

author author     2022-08-24     732

关键词:

一,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


http加速器——varnish

...nish?它能实现什么样的功能?.......  Varnish是一款高性能的开源HTTP加速器,常见的缓存服务开源解决方案有varnish、nginx、squid、ats等,Varnish的作者Poul-HenningKamp是FreeBSD的内核开发者之一,varnish项目是2006年发布的第一个版 查看详情

varnish

0.Varnish介绍(配置程序架构,原理)  Varnish是一款高性能的开源HTTP加速器,具有反向代理,缓存的功能。缓存类型:代理式缓存(递归方式);旁挂式缓存(迭代)缓存机制:过期机制(Expires)、条件式缓存(通过最近文件... 查看详情

varnish安装使用

...re.com/the-varnish-book填写信息后能够下载pdf文件Varnish是一款高性能的开源HTTP加速器系统centos7安装varnish编译安装源码包下载地址:http://varnish-cache.org/releases/这里使用的是varnish-5.1.3.tgz安装epel仓库yuminstall-ye 查看详情

加速与缓存技术之varnish

VarnishVarnish是一款高性能且开源的反向代理服务器和HTTP加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的squid相比,varnish具有性能更高、速度更快、管理更加方便等诸多优点,很多大型的网站都开始尝... 查看详情

varnish(代码片段)

Varnish工作原理Varnish是一款高性能的开源HTTP加速器,Varnish的功能与Squid服务器相似,都可以用来做HTTP缓存。Squid是从硬盘读取缓存的数据,而Varnish把数据存放在内存中,直接从读取内存,避免了频繁在内存、磁盘中交换文件,... 查看详情

varnish基础

...nbsp;         Varnish是一款高性能且开源的反向代理服务器和HTTP加速器,其采用全新的软件体系机构,和现在的硬件体系紧密配合,与传统的squid相比,varnish具有性能更高、速度更快、管理更加方... 查看详情

varnish

...度差异的结构,均可称之为Cache。 varnish是一款开源的高性能http加速器。 varnish架构:          varnish也和传统的服务器软件一样,也有master进程和child进程,m 查看详情

varnish

varnish是一款高性能的开源http加速器主机环境:rhel6selinuxandiptablesdisabled实验主机:172.25.38.1varnish(主机1)westos1.example.com172.25.38.2apache(主机2)westos2.example.com172.25.38.3apache(主机3)westos3.example.com172.25.38.25 查看详情

varnish-原理

一、varnish原理:1)Varnish简介:varnish缓存是web应用加速器,同时也作为http反向缓存代理。你可以安装varnish在任何http的前端,同时配置它缓存内容。与传统的squid相比,varnish具有性能更高、速度更快、管理更加方便等诸多优点... 查看详情

varnish

一varish简介:是一款高性能且开源的反向代理服务器和HTTP加速器,1varnish结构特点:1轻量级,基于内存进行缓存,重启后数据将会丢失2利用虚拟内存方式,I/O性能好3支持设置0-60秒的精确缓存时间4VCL配置管理灵活532位主机上缓... 查看详情

varnish缓存负载均衡backend的实现

简介:varnish:是一款高性能并且开源的反向代理服务器和http加速器,据官方称可有300-1000倍的速度提升,它采用了全新的软件体系结构,和现在的硬件体系紧密结合,和传统的squid相比,varnish具有性能更高、速度更快、管理更... 查看详情

varnish缓存代理

 1)Varnish简介:varnish缓存是web应用加速器,同时也作为http反向缓存代理。你可以安装varnish在任何http的前端,同时配置它缓存内容。与传统的squid相比,varnish具有性能更高、速度更快、管理更加方便等诸多优点。有一部分企... 查看详情

varnish缓存机制详细介绍及简单配置

Varnish是一款高性能的开源HTTP加速器,其主要用来做为反向代理中的缓存服务器使用,但其实Varnish本身也是具有反向代理功能的,但在创建连接和维持连接上,与Nginx相比差距很大,现在有一个很流行的架构就是前端用Nginx作为... 查看详情

varnish的了解与常用配置使用

Varnish是一款高性能的开源HTTP加速器及反向代理服务器。varnish架构图:650)this.width=650;"src="https://s4.51cto.com/wyfs02/M01/9E/BD/wKioL1mVUDejtnnAAAGEvDyp-uQ564.png"title="1112333.png"alt="wKioL1mVUDejtnnAAAGEvDyp-uQ564.png" 查看详情

varnish缓存代理简介与配置

一、varnish原理:1)Varnish简介:varnish缓存是web应用加速器,同时也作为http反向缓存代理。你可以安装varnish在任何http的前端,同时配置它缓存内容。与传统的squid相比,varnish具有性能更高、速度更快、管理更加方便等诸多优点... 查看详情

varnish4.0缓存代理配置

一、varnish原理:1)Varnish简介:varnish缓存是web应用加速器,同时也作为http反向缓存代理。你可以安装varnish在任何http的前端,同时配置它缓存内容。与传统的squid相比,varnish具有性能更高、速度更快、管理更加方便等诸多优点... 查看详情

varnish4.0缓存代理配置

一、varnish原理:1)Varnish简介:varnish缓存是web应用加速器,同时也作为http反向缓存代理。你可以安装varnish在任何http的前端,同时配置它缓存内容。与传统的squid相比,varnish具有性能更高、速度更快、管理更加方便等诸多优点... 查看详情

varnish4.0缓存代理配置

...力。一、varnish原理:1)Varnish简介:varnish缓存是web应用加速器,同时也作为http反向缓存代理。你可以安装varnish在任何http的前端,同时配置它缓存内容。与传统的squid相比,varnish具有性能更高、速度更快、管理更加方便等诸多... 查看详情