运维企业专题(1)HTTP加速器——Varnish缓存机制前篇
1.简介
1)CDN 加速缓存有两种方式Squid与Varnish,为什么选择了Varnish?
Varnish是一款高性能的开源HTTP加速器,Varnish的功能与Squid服务器相似,都可以用来做HTTP缓存。
Squid是从硬盘读取缓存的数据,而Varnish把数据存放在内存中,直接从读取内存,避免了频繁在内存、磁盘中交换文件,所以Varnish要相对更高效,但也有缺点,内存中的缓存在服务器重启后会丢失。
2)Varnish 如何工作?
- 初始化过程
Varnish 的master进程负责启动工作,master进程读取配置文件,根据指定的空间大小(例如管理员分配了2G内存)来创建存储空间,创建并管理child进程,child进程来处理后续任务,它会分配一些线程来执行不同的工作,例如
接受http请求
为缓存对象分配存储空间
清除过期缓存对象
释放空间 碎片整理
http请求处理过程
有一个专门负责接收http请求的线程,一直监听请求端口,当有请求过来时,负责唤起一个工作线程来处理请求
工作线程会分析http请求的uri,知道了这个请求想要什么,就到缓存中查找是否有这个对象
如果有,就把缓存对象直接返回给用户
如果没有,会把请求转给后端服务器处理,并等待结果,工作线程从后端得到结果内容后,先把内容作为一个缓存对象保存到缓存空间(以备下次请求这个对象时快速响应),然后再把内容返回给用户分配缓存过程
有一个对象需要缓存时,根据这个对象的大小,到空闲缓存区中查找大小最适合的空闲块,找到后就把这个对象放进去
如果这个对象没有填满这个空闲块,就把剩余的空间做为一个新的空闲块
如果空闲缓存区中没地方了,就要先删除一部分缓存来腾出地方,删除是根据最近最少使用原则释放缓存过程
有一个线程来负责缓存的释放工作,他定期检查缓存中所有对象的生存周期,如果某个对象在指定的时间段内没有被访问,就把这个对象删除,释放其占用的缓存空间
释放空间后,检查一下临近的内存空间是否是空闲的,如果是,就整合为一个更大的空闲块,实现空间碎片的整理
2.环境搭建
1)准备三个虚拟机,我们这里使用的是rhel6.5的镜像
2)搭建一个6.5版本的网络共享yum源
具体过程这里不再详述(可参考作者前面的博客,有详述)
3.实验一:varnish的反向代理
实验设备:
主机 | IP | 服务 | 作用 |
---|---|---|---|
server1 | 172.25.6.1 | varnish | 调度器 |
server2 | 172.25.6.2 | apache | 后端服务器 |
server3 | 172.25.6.3 | apache | 后端服务器 |
实验目的:server1:作代理;server2:作被访问的主机
实验步骤:
server1上相关配置
<1>获得varnish包资源,并安装
yum install varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm -y
rpm -qc varnish-3.0.5-1.el6.x86_64(查看配置文件)
<2>打开varnish配置文件,可以看到最大能打开的文件数为131072,最多能使用的内存空间为82000K,也就是82M,单个用户能运行的最大线程数不受限制,默认端口为6081
vim /etc/sysconfig/varnish
最大打开文件个数:(NFILES=131072)
内存需求:(MEMLOCK=82000)
进程数:(NPROCS="unlimited")不限制
查看系统内存信息以及能打开的最大文件数,看是否能支持服务所能打开的最大文件数(顺便说一下,如果你的server1是按照作者前面博客中设置来,即设置内存大小为2048M,这里就不会有问题)
ulimit -a #查看系统内存信息
sysctl -a | grep file #查看系统支持打开的最大文件数——188465
当然如果像上图一样不够也没关系,打开虚拟机管理器进行添加就好了
修改服务的默认端口为80
<3>修改varnish用户的限制文件——在文件末尾添加信息
vim /etc/security/limits.confvarnish - nofile 131072
varnish - memlock 82000
varnish - nproc unlimited
<4>在varnish配置文件中配置一个后端服务器
vim /etc/varnish/default.vcl7 backend default {8 .host = "172.25.6.2";9 .port = "80";
10 }
重启服务
/etc/init.d/varnish restart
netstat -antlp | grep 80(查看端口)
系统中产生了varnish用户的进程,这里root开启的是master进程,不接受请求,用来监控子进程
ps aux
server2上相关配置
<1>安装apache
<2>编写一个apache的测试页
<3>开启apache服务
/etc/init.d/httpd start
测试:
打开物理机的浏览器访问172.25.6.1,出现server2的测试页
反向代理实验完成!
4.实验二:查看访问到的网页是否为缓存
vim /etc/sysconfig/varnis
TIMEOUT=120 #默认调度器server1会在120秒后清除后端服务器server2缓存
1)在调度器server1中的配置文件中编辑是否命中后的反馈信息
vim /etc/varnish/default.vcl
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);
}
2)重新加载服务
/etc/init.d/varnish reoad
注意:
如果请求发出后访问的结果是MISS from westos cache就表示数据调度器server1是从后端服务器获得的
如果返回的是HIT from westos cache就表示是在调度器的缓存中获得的
3)物理机上测试:
curl -I 172.25.6.1 ##发送访问请求
第一次访问:距离上个实验访问该网页也过去超过120秒,调度器自动清理了缓存,因此第一次访问调度器需要从后端服务器上获取数据然后给客户端(物理机)
第二次访问:数据是从调度器上得到的
为了排除干扰,将server1 中所有缓存清除在测试
varnishadm ban.url .*$
第一次访问:
第二次访问:
第三次访问:
4)访问172.25.6.1/index.html
先访问一次172.25.6.1(调度器),缓存已存在
继续访问172.25.6.1/index.html
注意:上述过程说明curl -I 172.25.6.1和curl -I 172.25.6.1/index.html 是完全不同的两个资源
清理代理的缓存信息
varnishadm ban.url .*$ #清除所有缓存
varnishadm ban.url /index.html #清除url部分,可能并不会达到效果(再次执行清除所有的命令)(客户端通过 curl 172.25.8.1/index.html会被清除缓存)
运维企业专题(1)HTTP加速器——Varnish缓存机制前篇相关推荐
- 运维企业专题(5)LVS高可用与负载均衡中篇——VS/DR模式配置详解
实验准备 1.下面的实验使用的是rhel6系列(rhel6.5)的虚拟机,因此你需要有对应的镜像和yum源 2.准备三台虚拟机,为了区分主机名与IP分别为 server1 172.25.6.1 ser ...
- 运维企业专题(2)HTTP加速器——Varnish缓存机制后篇(后端服务器集群、负载均衡与CDN推送平台搭建)
1.实验一:配置后端服务器集群 1)实验目的:定义不同域名站点的后端服务器,通过域名会访问不同的后端主机 2)实验过程: <1>在调度器server1上编写Varnish的配置文件 vim ...
- 运维企业专题(3)LB负载均衡介绍
1.LB是什么?有哪些主要的方式? LB--负载均衡(Load Balancing ) 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数 ...
- 运维企业专题(4)LVS高可用与负载均衡前篇——先学原理,再学配置
我保证看完这篇文章,面试时问到相关问题轻轻松松解决,本文末尾会结合全文教你该如何回答面试官的问题 1.什么是LVS? LVS 是 Linux Virtual Server的简写,意即Linux虚拟服务 ...
- 运维企业专题——LVS高可用与负载均衡之原理篇
我保证看完这篇文章,面试时问到相关问题轻轻松松解决,本文末尾会结合全文教你该如何回答面试官的问题 1.什么是LVS? LVS 是 Linux Virtual Server的简写,意即Linux虚拟服务 ...
- 运维企业专题(11)RHCS高可用集群下MySql数据库与共享磁盘(单点写入、多点写入)的设置
实验环境 主机名 IP 服务 server1 172.25.6.1 ricci,luci, iscsi,mysql-server server2 172.25.6.2 ricci,iscsi,mysq ...
- 运维企业专题(10)RHCS集群工具——FENCE搭建、高可用服务配置详解
前言:FENCE工具的原理及作用 FENCE设备是RHCS集群中必不可少的一个组成部分,通过FENCE设备可以避免因出现不可预知的情况而造成的"脑裂"现象,FENCE设备的出现,就 ...
- 运维企业专题(9)RHCS集群工具介绍
1.集群: 是指一组相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点都是运行各自服务的独立服务器,这些服务器之间可以彼此通信,协同向用户提供应用程序,系统资源和数据,并以 ...
- 运维企业专题(8)LVS高可用与负载均衡后篇——LVS健康检查与高可用详解
实验准备 1.下面的实验使用的是rhel6系列(rhel6.5)的虚拟机,因此你需要有对应的镜像和yum源 2.准备三台虚拟机,为了区分主机名与IP分别为 server1 172.25.6.1 ser ...
最新文章
- [转]Display PDF within web browser using MVC3
- 配置文件值注入 ||导入配置文件处理器,以后编写配置就有提示
- harmonyos2.0如何申请,华为鸿蒙HarmonyOS2.0手机开发者Beta版公测申请地址方法_专题_53货源网...
- Spring Boot 专栏全栈开发实战
- python 量化交易 框架 开源_Hikyuu首页、文档和下载 - 基于 C++/Python 的开源量化交易研究框架 - OSCHINA - 中文开源技术交流社区...
- 虚拟机里面安装Openfiler 2.99
- vc mysql_vc6.0连接mysql数据库
- 太快了,太变态了:什么会影响Java中的方法调用性能?
- 再次参加(第七届)商学院徒步戈壁挑战赛,赋词几首
- python ---单例(Singleton)
- Java笔记-对SpringBoot中CommandLineRunner的使用笔记
- CSDN极客头条使用指南
- 收到客户反馈的BUG,主管应该怎么办
- WWDC2019: SwiftUI实现你的第一个App
- linux安装lrzsz工具
- CCF CSP 201503-1 图像旋转
- NodeJS+七牛云实现图片上传
- IOS上架时及开发注意事项
- 个人微信小程序快速赚攻略
- 如何验证office是否已永久激活。
热门文章
- R语言WVPlots包可视化克利夫兰点ClevelandDotPlot、并按照分类变量排序进行可视化克利夫兰点ClevelandDotPlot
- R语言t分布函数Student t distribution(dt, pt, qt rt )实战
- 百度PaddleOCR及云平台OCR API详解及示例
- GBDT 和 AdaBoost区别?
- 影像组学视频学习笔记[44(End)]-带95%置信区间的折线图、Li‘s have a solution and plan.
- 广义线性模型?链接函数?sigmoid和softmax?Logistic处理多分类问题?logistic回归处理超大数据?使用logistic和randomsearch进行组合获取最优参数组合、优缺点
- 计算机无法搜索程序,电脑搜索功能不能用的解决方法
- netapp存储服务器文档,NetApp秘密开发服务器闪存?
- Linux创建两个相同的用户,在Linux系统中一次创建多个用户
- 重温目标检测--YOLO v1