高性能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
转载于:https://blog.51cto.com/11024583/1905699
高性能HTTP加速器varnish实践相关推荐
- 高性能HTTP加速器Varnish(概念篇)
一. Varnish概述 Varnish是一款高性能且开源的反向代理服务器和HTTP 加速器,它的作者Poul-Henning Kamp是FreeBSD核心的开发人员之一,Varnish采用全新的软 ...
- 高性能HTTP加速器Varnish(性能调优篇)
varnish是否能稳定.快速的运行,与Linux本身的优化以及varnish自身参数的设置有很大关系,在varnish安装配置完成后,还必须从操作系统和varnish配置参数两个方面对varnish ...
- 高性能HTTP加速器Varnish(管理维护篇)
一.varnishd指令 Varnish启动的命令是/usr/local/varnish/sbin/varnishd,此命令参数较多,用法比较复杂,在命令行执行"/usr/local/var ...
- 高性能HTTP加速器Varnish(安装配置篇)
一.安装Varnish Varnish的安装非常简单,下面逐步介绍: 1.安装前的准备 Varnish安装环境如下表1所示: 表1 主机名 操作系统 ...
- Varnish高性能开源HTTP加速器:Varnish Nginx和Varnish Apache搭建配置
Varnish是一款高性能的开源HTTP加速器,一般用来和Nginx.Apache等搭配使用,组建一个高效率的Web服务器.Varnish的某个负责接受新HTTP连接的线程开始等待用户,如果有新的HT ...
- python sanic orm_Sanic + 前端MVVM 一种新一代Python高性能全栈开发实践
SanicCRUD-vue Sanic + 前端MVVM 一种新一代Python高性能全栈开发实践 背景 本项目将使用Sanic + Vue2 + Webpack2 配合最简单CRUD的逻辑来展示一个 ...
- 【实践】LightSeq:高性能NLP序列推理实践-字节跳动.pdf(附下载链接)
今天给大家带来字节跳动人工智能实验室王晓晖先生所做的分享<LightSeq:高性能NLP序列推理实践.pdf>.本次分享主要包含如下三大部分: 1.CUDA: 2.压缩量化: 3.TVM. ...
- python sanic_Sanic + 前端MVVM 一种新一代Python高性能全栈开发实践
SanicCRUD-vue Sanic + 前端MVVM 一种新一代Python高性能全栈开发实践 背景 本项目将使用Sanic + Vue2 + Webpack2 配合最简单CRUD的逻辑来展示一个 ...
- 运维企业专题(1)HTTP加速器——Varnish缓存机制前篇
1.简介 1)CDN 加速缓存有两种方式Squid与Varnish,为什么选择了Varnish? Varnish是一款高性能的开源HTTP加速器,Varnish的功能与Squid服务器相似,都可以用来 ...
最新文章
- IDC最新报告:阿里语音AI登顶中国No.1
- c语言源程序的下载,编程(C语言源程序代码)
- hibernate的一种报错
- 转发和重定向和request域对象
- 200个c语言程序(由简单到复杂),200个c语言程序(由简单到复杂)
- android 属性动画还原,属性动画和补间动画
- 数据科学入门与实战:玩转pandas实战项目分析航班晚点情况
- Vim 命令常用功能详解
- 实战篇—关于某产品的切分细则
- django进阶04部署上线(nginx,uwsgi,supervisor)
- [BZOJ3124]直径
- JAVA链表中的回文链表结构
- Origin 不连续数据点做出连续曲线
- 巧用宏录制,轻松制作Excel简易查询小系统
- android:stretchcolumns=0,1,2,3,stretch_stretch是什么意思
- clickhouse 如何快速写入数据
- 数学分析教程(科大)——1.2笔记+习题
- linux create 函数,creat - Linux C 函数 使用手册
- 常见机器学习算法总结
- 【安安教具】-【数学】-【数轴】模拟器 教你如何用python制作数轴模拟器 python 小项目创作
热门文章
- c++程序目录结构_C程序结构
- centos mysql数据迁移_Mysql 5.7.17 离线版安装和数据迁移(centos 7)
- esp32 linux内核,【小狂系列】跟着小狂玩ESP32之编译环境搭建篇
- java set删除第一个元素_Java面试题10(如何取到set集合的第一个元素)
- 数组随机抽取 java_Java利用数组随机抽取幸运观众如何实现
- php 插入2个数组,用PHP将2个数组插入mysql
- HDLBits 系列(43)找 bug 专题
- 【 Vivado 】Performing System-Level Design Entry(总览)
- Oracle ORA-600 [2662] 错误
- 数据中心在2017年的愿望清单