Varnish——CDN加速的实现(单个后端服务器、缓存命中率的情况)
CDN简介:
1.CDN的全称是Content Delivery Network,即内容分发网络。
2.CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。
3.CDN的关键技术主要有内容存储和分发技术
4.CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度
Varnish的工作原理图:
varnish具有缓存和反向代理的功能
Varnish处理流程图:
处理过程大致分为如下几个步骤:
(1)Receive状态,也就是请求处理的入口状态,根据VCL规则判断该请求应该是Pass或 Pipe,或者进入Lookup(本地查询)
(2)Lookup状态,进入此状态后,会在hash表中查找数据,若找到,则进入Hit状态,否则进 入miss状态
(3)Pass状态,在此状态下,会进入后端请求,即进入fetch状态
(4)Fetch状态,在Fetch状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地 的存储
(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求
一、varnish部署单个后端服务器的过程
实验环境:
主机 | IP | 服务 | 作用 |
---|---|---|---|
server1 | 172.25.22.1 | varnish | 调度器 |
server2 | 172.25.22.2 | apache | 后端服务器 |
server3 | 172.25.22.3 | apache | 后端服务器 |
配置server1:
1.官网下载安装包
varnish-libs-3.0.5-1.el6.x86_64.rpm
varnish-3.0.5-1.el6.x86_64.rpm
2.安装varnish
安装好之后/etc/passwd文件中出现了varnish用户,对varnish的访问控制实际上是对varnish用户的控制实现的
3.查看varnish的配置文件
4.打开varnish配置文件,可以看到最大能打开的文件数为131072,最多能使用的内存空间为82000K,也就是82M,单个用户能运行的最大线程数不受限制,默认端口为6081,将端口修改为80
修改后
但是系统中对用户限制的最大文件数只有98864,比varnish的小,所以我们要模拟生产环境填满这个最大值
修改限制的最大文件数:
(1)poweroff关闭虚拟机vm1
(2)进入虚拟机管理界面,将内存改为2048M
(3)开机ssh连接,再次查看系统中允许的最大文件数,现在是188464,大于131072
查看系统默认最多能使用的内存空间
4.修改varnish用户的限制文件
5.在varnish配置文件中配置一个后端服务器
重启varnish服务
系统中产生了varnish用户的进程,这里root开启的是master进程,不接受请求,用来监控子进程
配置server2:
1.安装apache
2.编写一个apache的测试页
3.开启apache服务
测试:
打开物理机的浏览器访问172.25.22.2,出现server2的测试页
访问172.25.22.2,出现的也是server2的测试页
二、查看缓存命中率的情况
server1中配置:
1.编辑/etc/varnish/default.vcl文件,退出保存后reload服务
文件中添加的内容如下:
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache"; ##在varnish缓存中命中访问的域名
}
else {
set resp.http.X-Cache = "MISS from westos cache"; ##在后端服务器中获得
}
return (deliver);
}
重新加载varnish服务
注意:
如果请求发出后访问的结果是MISS from westos cache就表示是从后端0服务器获得的
如果返回的是HIT from westos cache就表示是从缓存中获得的
物理主机测试:
2.发送请求
curl -I 172.25.22.1
第一次访问返回的是MISS
第二次及以后访问返回的是HIT
3.server1 中清除所有缓存
varnishadm ban.url .*$
4.物理机 再次测试:
出现MISS,说明缓存被清理,后面的有全部都是HIT
5.访问172.25.22.1/index.html
第一次出现MISS,后面出现的都是HIT
注意:第一次出现MISS说明curl -I 172.25.22.1和curl -I 172.25.22.1是完全不同的两个资源,因为我们没有清除缓存,如果两者是统一资源的话这里访问curl -I 172.25.22.1/index.html出现的应该是HIT,但事实上出现的是MISS,这一点可以通过后面的实验来验证
6.server1 清除/index.html的缓存
varnishadm ban.url /index.html
物理机测试;
访问curl -I 172.25.22.1出现的是HIT,所以清除的/index.html缓存跟172.25.22.1没有关系
访问curl -I 172.25.22.1/index.html返回的是MISS,再次访问返回的是HIT