Varnish的部署

一.CDN简介

CDN(Content Delivery Network)是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
搭建CDN系统可以选择3种主流方案:
1.squid 2.varnish 3.Nginx+memcache

二.varnish简介

1.基本介绍

Varnish是高性能开源的反向代理服务器和HTTP缓存服务器,Varnish的功能与Squid服务器相似,都可以用来做HTTP缓存。
Squid是从硬盘读取缓存的数据,而Varnish把数据存放在内存中,直接从读取内存,避免了频繁在内存、磁盘中交换文件,所以Varnish要相对更高效,但也有缺点,内存中的缓存在服务器重启后会丢失 。
2.工作过程
<1>初始化过程
Varnish 的master进程负责启动工作,master进程读取配置文件,根据指定的空间大小来创建存储空间,创建并管理child进程。child进程来处理后续任务,它会分配一些线程来执行不同的工作,例如:接受http请求;为缓存对象分配存储空间;清除过期缓存对象;释放空间碎片整理等/
<2>http请求处理过程
有一个专门负责接收http请求的线程,一直监听请求端口,当有请求过来时,负责唤起一个工作线程来处理请求。工作线程会分析http请求的uri,知道了这个请求想要什么,就到缓存中查找是否有这个对象。如果有,就把缓存对象直接返回给用户;如果没有,会把请求转给后端服务器处理,并等待结果。工作线程从后端得到结果内容后,先把内容作为一个缓存对象保存到缓存空间(以备下次请求这个对象时快速响应),然后再把内容返回给用户。
<3>分配缓存过程
有一个对象需要缓存时,根据这个对象的大小,到空闲缓存区中查找大小最适合的空闲块,找到后就把这个对象放进去。如果这个对象没有填满这个空闲块,就把剩余的空间做为一个新的空闲块。如果空闲缓存区中没地方了,就要先删除一部分缓存来腾出地方,删除是根据最近最少使用原则。
<4>释放缓存过程
有一个线程来负责缓存的释放工作,它定期检查缓存中所有对象的生存周期,如果某个对象在指定的时间段内没有被访问,就把这个对象删除,释放其占用的缓存空间。释放空间后,检查一下临近的内存空间是否是空闲的,如果是,就整合
这里写图片描述

三.VCL处理流程图

这里写图片描述
处理过程大致分为如下几个步骤:
(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或Pipe,或者进入 Lookup(本地查询)。
(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进入 miss 状态。
(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。
(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地的存储。
(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。

四.使用Varnish部署CDN节点集群

实验环境:
三台redhat6.5版本虚拟机+一台物理机;
server1:172.25.14.1
server2:172.25.14.2
server3:172.25.14.3
Client:172.25.14.250
1.varnish的部署
server1:
1.下载并安装varnish软件包

lftp 172.25.14.250:~> get varnish-3.0.5-1.el6.x86_64.rpm
lftp 172.25.14.250:~> get varnish-libs-3.0.5-1.el6.x86_64.rpm
[root@server1 ~]# yum install * -y

这里写图片描述
2.修改varnish监听的端口

[root@server1 ~]# vim /etc/sysconfig/varnish
 VARNISH_LISTEN_PORT=80           ##改为80端口

3.修改配置文件

[root@server1 ~]# vim /etc/varnish/default.vcl 
[root@server1 ~]# /etc/init.d/varnish restart

这里写图片描述
4.开启服务

[root@server1 ~]# vim /etc/security/limits.conf #对varnish用户进行限制
varnish         -       nofile          131073 
varnish         -       memlock         82000   
varnish         -       nproc           unlimited
[root@server1 ~]# /etc/init.d/varnish start

这里写图片描述
Server2:
下载httpd服务,编写测试页并开启httpd服务

[root@server2 ~]# yum install httpd -y
[root@server2 ~]# /etc/init.d/httpd start 
[root@server2 ~]# vim /var/www/html/index.html

这里写图片描述
客户端测试(/etc/hosts中有解析):
这里写图片描述
2.查看缓存命中情况
server1:
添加代码:

sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
}

这里写图片描述

[root@server1 ~]# /etc/init.d/varnish reload   #重新加载varnish

这里写图片描述
client测试:
添加解析:

[root@foundation14 ~]# vim /etc/hosts
172.25.14.1   www.westos.org

访问测试:
第一次访问未命中
这里写图片描述
后续访问命中:
这里写图片描述

#varnish默认缓存时间120s,超过120s自动清除缓存

3.通过varnishadm手动清除缓存

varnishadm ban.url .*$  #清除所有
varnishadm ban.url /index.html  #清除 index.html 页面缓存
varnishadm ban.url /admin/$  #清除 admin 目录缓存

在server1:

[root@server1 ~]# varnishadm ban.url /index.html

在client客户端测试:
这里写图片描述
4.定义多个不同站点的后端服务器
server1:

[root@server1 ~]# vim /etc/varnish/default.vcl

这里写图片描述

[root@server1 ~]# /etc/init.d/varnish reload

server2:配置网络服务器

[root@server2 ~]# vim /var/www/html/index.html

这里写图片描述

server3:配置网络服务器

[root@server3 ~]# yum install httpd -y
[root@server3 ~]# /etc/init.d/httpd start
[root@server3 ~]# vim /var/www/html/index.html

这里写图片描述
client测试:
添加本地解析:

[root@foundation14 ~]# vim /etc/hosts
172.25.14.1 bbs.westos.org www.westos.org

测试:
这里写图片描述
这里写图片描述
这里写图片描述
5.负载均衡和健康状况
server2.server3.

yum install httpd -y
/etc/init.d/httpd start

物理机

[root@foundation14 ~]# systemctl start httpd

server1:

[root@server1 ~]# vim /etc/varnish/default.vcl

这里写图片描述
server2:

[root@server2 ~]# vim /var/www/html/index.html

这里写图片描述
server3:

[root@server3 ~]# mkdir /www1
[root@server3 ~]# cd /www1/
[root@server3 www1]# vim index.html 

这里写图片描述

[root@server3 www1]# vim /etc/httpd/conf/httpd.conf
[root@server3 www1]# /etc/init.d/httpd restart

这里写图片描述
这里写图片描述
测试,域名解析:

[root@foundation14 ~]# vim /etc/hosts

这里写图片描述
在server3测试:
这里写图片描述
在client测试:
测试:
这里写图片描述
6.varnish CDN 推送
在server1中:

[root@server1 ~]# ls
bansys.zip  varnish-3.0.5-1.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm
[root@server1 ~]# yum install httpd -y
[root@server1 ~]# vim /etc/httpd/conf/httpd.conf

这里写图片描述

[root@server1 ~]# yum install php -y
[root@server1 ~]# yum install -y unzip
[root@server1 ~]# unzip bansys.zip -d /var/www/html/ ##-d解压到指定目录
[root@server1 ~]# cd /var/www/html/
[root@server1 html]# ls
bansys
[root@server1 bansys]# ls
class_socket.php  config.php  index.php  purge_action.php  static
[root@server1 bansys]# mv * ..
[root@server1 bansys]# ls
[root@server1 bansys]# cd ..
[root@server1 html]# ls
bansys  class_socket.php  config.php  index.php  purge_action.php  static
[root@server1 html]# vim config.php 

这里写图片描述

[root@server1 html]# /etc/init.d/httpd start
[root@server1 varnish]# vim /etc/varnish/default.vcl 
[root@server1 varnish]# /etc/init.d/varnish reload

这里写图片描述
这里写图片描述
测试:
这里写图片描述
在物理机:
这里写图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值