一、varnish 原理:
1)Varnish 简介:
varnish 缓存是 web 应用加速器,同时也作为 http 反向缓存代理。你可以安装 varnish 在任何 http 的前端,同时配置它缓存内容。与传统的 squid 相比,varnish 具有性能更高、速度更 快、管理更加方便等诸多优点。
根据官网的介绍,Varnish 的主要特性如下:https://www.varnish-cache.org/
1.缓存位置:可以使用内存也可以使用磁盘。如果要使用磁盘的话推荐 SSD 做 RAID1
2.日志存储:日志也存储在内存中。存储策略:固定大小,循环使用
3.支持虚拟内存的使用。
4.有精确的时间管理机制,即缓存的时间属性控制。
5.状态引擎架构:在不同的引擎上完成对不同的缓存和代理数据进行处理。可以通过特定的 配置语言设计不同的控制语句,以决定数据在不同位置以不同方式缓存,在特定的地方对经 过的报文进行特定规则的处理。
6.缓存管理:以二叉堆格式管理缓存数据,做到数据的及时清理。
2)Varnish 与 Squid 的对比
相同点: 都是一个反向代理服务器; 都是开源软件;
Varnish 的优势:
1、Varnish 的稳定性很高,两者在完成相同负荷的工作时,Squid 服务器发生故障的几率要 高于 Varnish,因为使用 Squid 要经常重启;
2、Varnish 访问速度更快。
3、Varnish 可以支持更多的并发连接,
4、Varnish 可以通过管理端口,使用正则表达式批量的清除部分缓存,而 Squid 是做不到的;
Varnish 的劣势:
1、varnish 进程一旦 Crash 或者重启,缓存数据都会从内存中完全释放,此时所有请求都会 发送到后端服务器,在高并发情况下,会给后端服务器造成很大压力;
2、在 varnish 使用中如果单个 url 的请求通过 HA/F5 等负载均衡,则每次请求落在不同的 varnish 服务器中,造成请求都会被穿透到后端;而且同样的请求在多台服务器上缓存,也 会造成 varnish 的缓存的资源浪费,造成性能下降;
3)简单架构:
Varnish 分为 management 进程和 child 进程;
Management 进程:对子进程进行管理,同时对 VCL 配置进行编译,并应用到不同的状态引 擎。
Child 进程:生成线程池,负责对用户请求进行处理,并通过 hash 查找返回用户结果。
4)varnish 主要配置部分:
varnish 配置主要分为:后端配置,ACL 配置,probes 配置,directors 配置,核心子程序配置 几大块。其中后端配置是必要的,在多台服务器中还会用到 directors 配置,核心子程序配 置。
后端配置:即给 varnish 添加反代服务器节点,最少配置一个。
ACL 配置:即给 varnish 添加访问控制列表,可以指定这些列表访问或禁止访问。
probes 配置:即给 varnish 添加探测后端服务器是否正常的规则,方便切换或禁止对应后端 服务器。
directors 配置:即给 varnish 添加负载均衡模式管理多个后端服务器。
核心子程序配置:即给 varnish 添加后端服务器切换,请求缓存,访问控制,错误处理等规 则。
5、特定功能性语句
ban(expression):清除指定对象缓存
call(subroutine):调用子程序,如:call(name); hash_data(input):生成 hash 键,用于制定
hash 键值生成结构,只能在 vcl_hash 子程序中使 用。调用 hash_data(input) 后,即这个 hash 为当前页面的缓存 hash 键值,无需其它获取或 操作,
二、安装 varnish
varnish是一个非常优秀的图片缓存服务器,他是完全基于内存的缓存服务器,从图片缓存的角度来看,性能优于nginx和squid,下面我将为大家讲述如何完整的安装一个varnish缓存服务器。
(1):安装依赖关系的软件包(注:使用 centos 在线 yum 源)
[root@varnish ~]# yum -y install autoconf automake libedit-devel libtool ncurses-devel pcre-devel pkgconfig python-docutils python-sphinx
2、安装 varnish
1:搭建环境:
确保 varnish 服务器能正常访问 web01、web02 Varnish 缓存代理服务器配置
Varnish 的官方网址为 http://varnish-cache.org,可以在这里下载最新版本的软件。
下载地址:https://www.varnish-cache.org/content/varnish-cache-403
先安装依赖从yum源上下载:(大概4分钟看下载速度)
yum -y install libedit-devel pcre-devel python-docutils
解压,进入解压目录编译安装:
[root@varnish ~]# tar zxf varnish-4.0.3.tar.gz
[root@varnish ~]# cd varnish-4.0.3/
[root@varnish varnish-4.0.3]# export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
[root@varnish varnish-4.0.3]#./configure && make && make install
[root@varnish varnish-4.0.3]# cp etc/example.vcl /usr/local/var/varnish/default.vcl
安装完成后编辑vcl文件配置内容:
验证:
(2):访问控制列表(ACL): 创建一个地址列表,用于后面的判断,可以是域名或 IP 集合。这个可以用于指定某些地址 请求入口,防止恶意请求等。
语法格式:
说明:acl 是访问列表关键字(必需小写),name 是该列表的别名用于调用,花括号内部是 地址集。
注意:如果列表中包含了无法解析的主机地址,它会匹配任何地址。
验证:
5)缓存规则配置:
如果不是 GET 和 HEAD 就跳到 pass;
3、启动 varnish
当启动 varnish 时有两个重要的参数你必须设置: 一个是处理 http 请求的 tcp 监听端口,另一 个是处理真实请求的后端 server