企业—varnish的基本概念以及模拟varnish实现
一.varnish简介
1.Varnish的工作原理图
Varnish是一款高性能的开源反向代理服务器和缓存服务器。
2.varnish的特点
varnish可以通过端口进行管理,使用正则语句做到清除缓存的功能,这些squid都做不到,但是在varnish高并发的情况下,资源消耗较高,而且varnish服务进程一旦崩溃,重启,内存中的数据将会全部丢失。
varnish与一般服务机器软件类似,就是一个web缓存代理服务器。
varnish的进程:master(management)进程和child(worker,主要做cache的工作)进程。master进程读入命令,进行一些初始化,然后fork并监控child进程。child进程分配若干线程进行工作,主要包括一些管理线程和很多worker线程。
二.vcl简介
1.Vcl定义
Varnish Configuration Language(VCL)是varnish配置缓存策略的工具,它是一种基于‘域’的简单变成语言,使用VCL编写的缓存策略通常保存在.vcl文件中,其需要编以成二进制的格式后才能由varnish调用
2.VCL处理流程图
处理大致分为以下几个步骤:
Receive 状态:也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或Pipe,或者进入 Lookup(本地查询)。
Lookup状态:进入此状态后会在hash表中查找数据,若找到则进入Hit状态,若没找到则进入miss状态。
Pass状态:在此状态下会进入后端请求,即进入Fetch状态。
Fetch状态:在Fetch状态下对请求进行后端的获取,发送请求,获得数据,并进行本地的存储。
Deliver状态:将获得的数据发送给客户端然后结束本次请求。
三.CDN简介
CDN全称:Content Delivery Network,即内容分发网络
基本思路:是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快更稳定。
通过在网络各位置处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时的根据网络流量和各结点的连接,负载状态以及到用户的距离和响应时间等综合信息将用户的请求重新导向距离用户最近的服务节点上。
目的:使用户可就近取的所需内容,解决Internet网络拥挤的状况,提高用户访问网站的响应速度。
三.模拟varnish的实现
主机环境:
rhel6 selinux,iptables disabled
实验环境:
主机名(IP) 服务
server1(172.25.254.1) varnish(virtualserver)
server2 (172.25.254.2) realserver(apache)
server3 (172.25.254.3) realserver (apache)
1.实验环境的搭建
在官网上下载一个linux6.5系统的镜像,因为实验需要多台虚拟机,所以u安装一个linux6.5的虚拟机作为母盘,然后再创建快照虚拟机。
封装母盘
(1)安装rhel6.5版本的虚拟机base
(2)base母盘的封装
cd /etc/udev/rules.d,删除以70开头的文件
设置本地域名解析
在/etc/hosts添加快照所需要的域名解析
注意:必须与物理机的ip处于同一网段
配置base母盘网络
注意:该版本重启服务是由脚本启动的
yum源的配置
a.在物理机上挂载镜像到apache的默认发布目录下
b.配置母盘yum源
设置selinux
关闭防火墙(linux6.5中火墙采用iptables)
安装所需要的安装包
设置完成后要poweroff虚拟机,而不能reboot,如果reboot那么一切配置将会失败
(3)创建虚拟机快照
cd /var/lib/libvirt/images/
创建三个快照vm1,vm2,vm3
进入虚拟机管理界面导入快照
依次安装三个快照虚拟机
配置三个快照虚拟机的主机名和网络
配置主机名
配置网络
依次配置三台虚拟快照,配置完成后对应的主机名及其ip对应如下:
主机名 IP
server1 172.25.254.1
server2 172.25.254.2
server3 172.25.254.3
2.varnish的单个后端服务器部署
server1 缓存
server2 主服务器
server1的配置:
准备varnish的安装包,也可以在官网下载
安装完成后在系统的/etc/passwd中生成varnish用户,对varnish的访问控制实际上是对varnish用户的控制实现的
配置varnish的服务端口
[[email protected] ~]# rpm -qc varnish-3.0.5-1.el6.x86_64 #查看varnish服务的配置文件
[[email protected] ~]# vi /etc/sysconfig/varnish 配置文件
8 NFILES=131072 ##最多能打开的文件数,varnish会自动调整该数值
12 MEMLOCK=82000 #最多能使用的内存空间,varnish会自动调整该数值
15 NPROCS="unlimited" #单个用户所能运行的最大线程数,varnish会自动调整该数值
66 VARNISH_LISTEN=80#修改varnish的端口为80
修改varnish用户的限制文件
因为varnish这个程序运行在varnish这个用户的私有空间内,内核对普通用户限制的最大文件数为1024.对varnish用户的最大文件限制为131072,在模拟中需要满足varnish用户的文件的最大值
[[email protected] ~]# sysctl -a | grep file #查看系统用户的文件数
配置varnish用户的安全限制
[[email protected] ~]# vim /etc/security/limits.conf
在该文件的最后面加:
varnish - nofile 131072
varnish - memlock 82000
varnish - nproc unlimited
在varnish的配置文件中添加一个后端服务器
[[email protected] ~]# vim /etc/varnish/default.vcl
在文件中添加的内容如下:
backend default {
.host = "172.25.254.2"; ##后端服务器的IP
.port = "80"; ##后端服务器的端口
开启服务并重新加载服务
server2 的配置:
安装apache
开启服务并在默认发布目录下写入内容方便检测
检测:
在真机上:
发现访问到的是server2后端服务器下apache目录下发布的内容
四.Varnish缓存及其缓存清理
1.查看cdn缓存的命中情况
在varnish的部署完成之后,详情可参靠上篇文章
server1:
[[email protected] html]# vim /etc/varnish/default.vcl #编辑配置文件
[[email protected] ~]# /etc/init.d/varnish restart #重启服务
文件编辑内容如下:
检测如下:在物理机上
发现第一次MISS表示未命中。第二次HIT表示命中
2.清理缓存
server1:
清除所有缓存
[[email protected] ~]# varnishadm ban.url .*$ #清除所有缓存
验证如下:
发现在之前是命中的状态,当再次查看的时候发现是MISS状态
清除页面缓存
在物理机上访问页面保持其为HIT命中状态
在server1上清理该页面的缓存
[[email protected] ~]# varnishadm ban.url /index.html
1
在物理机上验证如下:
再次查看发现为MISS状态