企业CDN缓存系统varnish(一)-----搭建最基本varnnish系统

一、基础知识

关于varnish

Varnish是一个反向HTTP代理,有时称为HTTP加速器或web加速器。其工作在应用层

  1. Varnish将文件或文件片段存储在内存中,使它们能够快速被提供。
    3.Varnish本质上是一个键/值存储,它通常使用URL作为键。
  2. 清漆是为现代硬件、现代操作系统和现代工作负载而设计的
    Varnish是一款高性能的开源HTTP加速器,挪威最大的在线报纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好
    之前的squid加速器(代理缓存服务器)是将从服务器要回来的资源放在自己的硬盘里,客户读取的速率很慢,代理的效率低
    现在的varnish加速器(代理缓存服务器)是将从服务器要回来的资源放在自己的内存里,客户读取的速率很快,代理的效率高
    varnish代理服务器的工作方式有两种
    (1)仅仅作为一个代理服务器:帮客户端去问服务端要数据,要回来的数据直接给客户端自己不缓存一份,这种情况是客户的隐私信息、
    热点信息、更新比较快的数据,不缓存,只代理。
    (2)既代理又缓存:帮客户端去问服务端要数据,要回来的数据先给自己缓存一份,然后再发给客户端,这种情况是用于更新比较慢的数据,此时varnish既代理又缓存。

使用缓存有两个前提条件:

一是数据访问热点不均衡,某些数据会被更频繁的访问,这些数据应该放在缓存中;
二是数据在某个时间段有效,不会很快过期,否则缓存的数据就会因已经失效而产生脏读,影响结果的正确性。

网站应用中,缓存除了可以加快数据访问速度,还可以减轻松后端应用和数据存储的负载压力,这一点对网站数据库架构至关重要,网站数据库库几乎都是按照有缓存的前提进行负载能力设计的。
varnish与squid的异同点
squid加速器(代理缓存服务器) :将从服务器要回来的资源放在自己的 硬盘 里,客户读取的速率很慢,代理的效率低。
squid 与 varnish的相同点:

(1)都是一个反向代理服务器。
(2)都是开源软件。

squid 与 varnish的不同点(Varnish的优点):

(1)Varnish的稳定性很高,两者在完成相同负荷的工作时,Squid服务器发生故障的机率要高于Varnish,因为使用Squid要经常重启。
(2)Varnish访问速度更快,Varnish采用了“Visual Page Cache”技术,所有缓存数据都直接从内存读取,而squid是从硬盘读取 , 因而Varnish在访问速度方面会更快。
(3)Varnish可以支持更多的并发连接,因为Varnish的TCP连接释放要比Squid快 ,因而在高并发连接情况下可以支持更多TCP连接。
(4)Varnish可以通过管理端口,使用正则表达式批量的清除部分缓存,而Squid是做不到的。
Varnish 缺点:

(1)varnish在高并发状态下CPU、IO、内存等资源开销都高于Squid。
(2)varnish进程一旦Hang、Crash或者重启,缓存数据都会从内存中完全释放,此时所有请求都会发送到后端服务器,在高并发情况下,会给后端服务器造成很大压力。
针对缺点二的解决方案:在访问量很大的情况下推荐使用varnish的内存缓存方式启动,而且后面需要跟多台squid/nginx服务器。主要为了防止前面的varnish服务、服务器被重启的情况下,大量请求穿透varnish,这样squid/nginx可以就担当第二层CACHE,而且也弥补了varnish缓存在内存中重启都会释放的问题;

关于缓存代理

比如:我们国家使用微信的用户非常多,微信的服务商腾讯总部在深圳
当每个地区的用户使用微信访问腾讯服务器的资源的时候,访问量太大
对于深圳的服务器来说,会造成很大的访问压力,甚至会造成服务器瘫痪
对于每个地区的用户来数,如果都去访问腾讯的总部服务器,会造成网络拥塞,使得客户的访问很缓慢,不利于用户的使用
现在腾讯总部给每个地区都放varnish代理服务器,每个地区的微信使用用户想访问深圳资源的时候
都会间接去问自己地区的varnish代理服务器要资源
如果varnish代理服务器上面没有资源,此时varnish代理服务器就会去向深圳的服务器要资源,将要回来的资源视情况而定给自己缓存一份,然后再给客户端发一份。这种情况下,varnish代理服务器的数量远远少于微信用户的数量,即使所有的varnish代理服务器同时向深圳总部的服务器要资源的时候,也不会给深圳的服务器造成很大的压力,对微信使用的客户端和深圳总部的服务端都有好处
假如代理服务器缓存了一些更新慢的数据,当客户端再次要这个数据的时候,代理服务器会直接返回给客户端,不需要再去问深圳的服务器要资源,那么这就是把varnish服务器叫做加速器的原因,加快了客户端和服务端之间的访问速率

关于CDN

CDN:缓存网络,Content Delivery Network,即内容分发网络;加速器,反向代理缓存、

基本原理:广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或
网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓
存服务器上,由缓存服务器直接响应用户请求
内容管理和全局的网络流量管理(Traffic Management)是CDN的核心所在。通过用户就近性>和服务器负载的判断,CDN确保内容以一种极为高效的方式为用户的请求提供服务
总的来说,内容服务基于缓存服务器,也称作代理缓存(Surrogate),它位于网络的边缘,>距用户仅有"一跳"(Single Hop)之遥。同时,代理缓存是内容提供商源服务器(通常位于CDN服务提供商的数据中心)的一个透明镜像。这样的架构使得CDN服务提供商能够代表他们客
户,即内容供应商,向最终用户提供尽可能好的体验,而这些用户是不能容忍请求响应时间
有任何延迟的

VCL的处理流程

vcl compiler:配置接口
vcl compiler通过调用外部的C cpmpiler(C编译器)进行编译,这就要依赖gcc编译器,然后生成一个二进制格式的配置对象,这个二进制格式的配置对象可以被各Child和cache子进程所加载读取相关配置

所以,每一次修改varnish配置文件,都要手动加载、编译、装载、使用;支持动态装载

vcl 的处理流程,主要是由 Varnish 的状态机决定,可以通过 vcl 配置文件来对 varnish 状态机各个步骤所做的操作进行配置

vcl_recv
vcl_recv 是 http 请求到达后进入的第一个状态,在这个状态中,可以对请求进行以下的一些处理
1. 修改 client 请求,以减少缓存决策时的差异性。
2. 根据 client 请求,决定缓存策略。
3. 重定向请求
4. 决定处理请求的 backend(即后端 webserver )
vcl_deliver
在缓存数据将要发送到客户端时调用

关于 sysctl

sysctl命令用于运行时配
-a 显示所有的系统参数置内核参数 ##增大内存到2048 就能达到varnish进程的需要

关于 ulimit

ulimit是指每个user使用各种资源的限制值。ulimit 命令用来限制系统用户对shell资源的访问,它是一种简单并且有效的实现资源限制的方式

二、搭建最基本的varnish系统

准备:在server1搭建varnish服务,在server2作后台主机,真机测试

server1

1.用ssh服务连通server1,并关闭封锁防火墙在这里插入图片描述

2.将真机中的varnish软件包传给server1
在这里插入图片描述

3.利用yum源下载相关软件

安装软件:yum install jemalloc-3.6.0-1.el7.x86_64.rpm varnish-4.0.5-1.el7.x86_64.rpm varnish-libs-4.0.5-1.el7.x86_64.rpm

在这里插入图片描述

在这里插入图片描述

4.查看varnish服务的配置文件

rpm -qc varnish

在这里插入图片描述
查看版本:rpm -qa | grep varnish
在这里插入图片描述
查看相关参数:vim /lib/systemd/system/varnish.service
ulimit -a 查看内核相关参数
在这里插入图片描述
查看系统允许开启的最大文件个数:sysctl -a | grep file

在这里插入图片描述
查看内存使用情况 ulimit -a
在这里插入图片描述
查看系统剩余空间: free -m
在这里插入图片描述

sysctl -a | grep net.core

net.core.optmem_max = 20480 #每个套接字所允许的最大缓冲区的大小
net.core.rmem_default = 212992 #网络协议栈默认接收内存
net.core.rmem_max = 212992 #网络协议栈最大接收内存
在这里插入图片描述
5.修改相关配置满足要求
永久修改:值针varnish用户而不是所有用户,所以只对varnish用户进行修改

vim /etc/security/limits.conf

在这里插入图片描述
在这里插入图片描述

临时修改
针对全局:

ulimit -n 131072
ulimit -l 82
ulimit -a

在这里插入图片描述

6.修改相关配置开启80端口使客户可以访问到

vim /etc/varnish/varnish.params

在这里插入图片描述
在这里插入图片描述
7.配置后端服务器相关配置

vim /etc/varnish/default.vcl 修改为server2 ip的80端口

在这里插入图片描述
在这里插入图片描述

8.重启服务查看端口开放情况

systemctl restart varnish
netstat -antlp

在这里插入图片描述

server2

1.关闭防火墙封锁防火墙:
在这里插入图片描述
2.开启httpd服务:
在这里插入图片描述

3.进入默认发布目录编写页面
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.真机测试访问server1 ip返回
server2页面说明代理成功:
在这里插入图片描述

三、验证varnish缓存命中功能

1.编辑配置文件:

vim /etc/varnish/default.vcl

在这里插入图片描述
在这里插入图片描述
2.重启服务
清理缓存:varnishadm ban req.url “~” /
在这里插入图片描述
在这里插入图片描述
3.真机测试发现第一次未命中,之后命中

curl -I 172.25.68.1

在这里插入图片描述

在这里插入图片描述
4.清除html页面缓存:

varnishadm ban req.url "~" /index.html

在这里插入图片描述
5.真机测试查询http服务命中
查询共享页面未命中
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值