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缓存机制前篇相关推荐

  1. 运维企业专题(5)LVS高可用与负载均衡中篇——VS/DR模式配置详解

    实验准备 1.下面的实验使用的是rhel6系列(rhel6.5)的虚拟机,因此你需要有对应的镜像和yum源 2.准备三台虚拟机,为了区分主机名与IP分别为 server1 172.25.6.1 ser ...

  2. 运维企业专题(2)HTTP加速器——Varnish缓存机制后篇(后端服务器集群、负载均衡与CDN推送平台搭建)

    1.实验一:配置后端服务器集群 1)实验目的:定义不同域名站点的后端服务器,通过域名会访问不同的后端主机 2)实验过程: <1>在调度器server1上编写Varnish的配置文件 vim ...

  3. 运维企业专题(3)LB负载均衡介绍

    1.LB是什么?有哪些主要的方式? LB--负载均衡(Load Balancing ) 负载均衡建立在现有网络结构之上,它提供了一种廉价有效透明的方法扩展网络设备和服务器的带宽.增加吞吐量.加强网络数 ...

  4. 运维企业专题(4)LVS高可用与负载均衡前篇——先学原理,再学配置

    我保证看完这篇文章,面试时问到相关问题轻轻松松解决,本文末尾会结合全文教你该如何回答面试官的问题 1.什么是LVS? LVS 是 Linux Virtual Server的简写,意即Linux虚拟服务 ...

  5. 运维企业专题——LVS高可用与负载均衡之原理篇

    我保证看完这篇文章,面试时问到相关问题轻轻松松解决,本文末尾会结合全文教你该如何回答面试官的问题 1.什么是LVS? LVS 是 Linux Virtual Server的简写,意即Linux虚拟服务 ...

  6. 运维企业专题(11)RHCS高可用集群下MySql数据库与共享磁盘(单点写入、多点写入)的设置

    实验环境 主机名 IP 服务 server1 172.25.6.1 ricci,luci, iscsi,mysql-server server2 172.25.6.2 ricci,iscsi,mysq ...

  7. 运维企业专题(10)RHCS集群工具——FENCE搭建、高可用服务配置详解

    前言:FENCE工具的原理及作用 FENCE设备是RHCS集群中必不可少的一个组成部分,通过FENCE设备可以避免因出现不可预知的情况而造成的"脑裂"现象,FENCE设备的出现,就 ...

  8. 运维企业专题(9)RHCS集群工具介绍

    1.集群: 是指一组相互独立的计算机,利用高速通信网络组成的一个较大的计算机服务系统,每个集群节点都是运行各自服务的独立服务器,这些服务器之间可以彼此通信,协同向用户提供应用程序,系统资源和数据,并以 ...

  9. 运维企业专题(8)LVS高可用与负载均衡后篇——LVS健康检查与高可用详解

    实验准备 1.下面的实验使用的是rhel6系列(rhel6.5)的虚拟机,因此你需要有对应的镜像和yum源 2.准备三台虚拟机,为了区分主机名与IP分别为 server1 172.25.6.1 ser ...

最新文章

  1. [转]Display PDF within web browser using MVC3
  2. 配置文件值注入 ||导入配置文件处理器,以后编写配置就有提示
  3. harmonyos2.0如何申请,华为鸿蒙HarmonyOS2.0手机开发者Beta版公测申请地址方法_专题_53货源网...
  4. Spring Boot 专栏全栈开发实战
  5. python 量化交易 框架 开源_Hikyuu首页、文档和下载 - 基于 C++/Python 的开源量化交易研究框架 - OSCHINA - 中文开源技术交流社区...
  6. 虚拟机里面安装Openfiler 2.99
  7. vc mysql_vc6.0连接mysql数据库
  8. 太快了,太变态了:什么会影响Java中的方法调用性能?
  9. 再次参加(第七届)商学院徒步戈壁挑战赛,赋词几首
  10. python ---单例(Singleton)
  11. Java笔记-对SpringBoot中CommandLineRunner的使用笔记
  12. CSDN极客头条使用指南
  13. 收到客户反馈的BUG,主管应该怎么办
  14. WWDC2019: SwiftUI实现你的第一个App
  15. linux安装lrzsz工具
  16. CCF CSP 201503-1 图像旋转
  17. NodeJS+七牛云实现图片上传
  18. IOS上架时及开发注意事项
  19. 个人微信小程序快速赚攻略
  20. 如何验证office是否已永久激活。

热门文章

  1. R语言WVPlots包可视化克利夫兰点ClevelandDotPlot、并按照分类变量排序进行可视化克利夫兰点ClevelandDotPlot
  2. R语言t分布函数Student t distribution(dt, pt, qt rt )实战
  3. 百度PaddleOCR及云平台OCR API详解及示例
  4. GBDT 和 AdaBoost区别?
  5. 影像组学视频学习笔记[44(End)]-带95%置信区间的折线图、Li‘s have a solution and plan.
  6. 广义线性模型?链接函数?sigmoid和softmax?Logistic处理多分类问题?logistic回归处理超大数据?使用logistic和randomsearch进行组合获取最优参数组合、优缺点
  7. 计算机无法搜索程序,电脑搜索功能不能用的解决方法
  8. netapp存储服务器文档,NetApp秘密开发服务器闪存?
  9. Linux创建两个相同的用户,在Linux系统中一次创建多个用户
  10. 重温目标检测--YOLO v1