CDN简介:
CDN的全称——Content Delivery Network,即内容分发网络。
基本思路:是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。
通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。
其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
一.Varnish简述
Varnish是一款高性能、开源的反向代理服务器和缓存服务器。Varnish使用内存缓存文件来减少响应时间和网络带宽消耗。这个项目是由挪威的一家报纸Verdens Gang的网络分支起始的,其架构设计和开发总监Poul-Henning Kamp是FreeBSD核心的开发人员之一,最初项目的管理与基础设施及额外开发由挪威一家Linux咨询公司Linpro提供。
说到varnish,squid就不得不提及。squid算得上是古老的缓存服务器。由于varnish先进的设计理念,性能要比squid高上许多,varnish还可以通过端口进行管理,使用正则语句做到清除指定缓存的功能,这些squid都做不到。但是varnish在高并发的情况下,资源消耗较高,而且varnish服务进程一旦崩溃,重启,内存中的缓存数据将全部丢失
二.varnish的特点
1、基于内存进行缓存,重启后数据将消失。
2、利用虚拟内存方式,IO性能好。
3、支持设置0~60秒的精确缓存时间。
4、VCL配置管理比较灵活。
5、具有强大的管理功能,例如top、stat、admin、list 等。
6、状态机设计巧妙、结构清晰。
7、利用二叉堆管理缓存文件,可达到积极删除目的。
三.varnish处理缓存的过程
(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或 Pipe,或者进入 Lookup(本地查询)。
(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进 入 miss 状态。
(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。
(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地 的存储。
(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。
四.varnish的单个后端的服务器的配置
实验所需环境:三台配置好网络的虚拟机,分别设置主机名为server1、server2、server3、server4
server1 :varnish的服务器
server2、3:后端的服务器
server4:客户端,测试端
1.安装服务
在server1中打开官网,下载rpm包进行安装
yum install varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm -y
注意:安装完成后,在系统的/etc/passwd中会生成varnish用户,对varnish的访问控制实质上是对varnish用户的控制实现的。后面会需要对varnish的需要的资源进行配置文件的修改,因为varnish这个应用软件是用varnish这个普通用户的身份进行的,而不是root用户,因此操作系统不可能给应用那么大的权限。所以需要更改配置文件。
2.配置varnish的服务(varnish的配置文件的修改)
(1)查看varnish的配置文件
其中,varnish的配置文件,第一个是varnish的log日志文件,第二个是给varnish的分配资源的文件,第三个是varnish的默认的配置文件。
(2)编辑varnish服务器配置文件,文件的参数需要根据实际的系统内核及系统还有相关硬件设定
vim /etc/sysconfig/varnish
8 NFILES=131072 ##最多能打开的文件数,varnish会自动调整该值,是为了防止高并发导致的服务器宕机
12 MEMLOCK=82000 ##最多能使用的内存空间,varnish会自动调整该值
15 NPROCS="unlimited" ##单个用户所能运行的最大线程数
66 VARNISH_LISTEN_PORT=80 ##修改端口
注意:上面的配置文件的内容,和下面修改文件的权限相互对应。
vim /etc/security/limits.conf ##修改文件的权限的配置文件
(3)配置一个后端的服务器。
vim /etc/sysconfig/varnish ##varnish的配置文件,配置 varnish 服务端口
VARNISH_LISTEN_PORT=80 ##varnish监听端口
vim /etc/varnish/default.vcl ##配置一个后端服务器,缓存配置
backend default {
.host = "172.25.5.2"; ##host指定要缓存的后端服务器地址
.port = "80";
}
3.重新的启动服务
/etc/init.d/varnish restart ##重启varnish应用
4.测试
在server2中配置好http服务,并编写一个网页文件index.html,内容任意
在真机中打开浏览器输入server1的IP地址,可以看到server2中的发布页面内容
五.多个后端服务器及实现负载均衡(varnish—CND加速的实现)
1.varnish的多个后端服务器的配置文件的修改
这里设置了两个后端的服务器,一个是web1,一个是web2.
vim /etc/varnish/default.vcl
backend web1 { ##后端第一个服务器名web1
.host = "172.25.5.2"; #将server2 www.westos.org作为第一个服务器主机
.port = "80";
}
backend web2 { # 后端第二个服务器名web2
.host = "172.25.5.3"; #将server3 bbs.westos.org作为第二个服务器主机
.port = "80";
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") { ##当访问 www.westos.org 或 westos.org 域名时从 web1 上取数据;
set req.http.host = "www.westos.org";
set req.backend = web1;
}elsif (req.http.host ~ "^bbs.westos.org") { ##访问 bbs.westos.org 域名时到 web2 取数据;
set req.backend = web2;
} else {
error 404 "westos cache"; #访问其他,页面报错。
}
}
/etc/init.d/varnish restart ##重启varnish服务
2.server2、server3这两个后端服务器配置http内容
vim /var/www/html/index.html
<h1>server2/3-westos.com<h1>
/etc/init.d/http start
3.在server4上配置DNS解析
vim /etc/hosts
172.25.5.1 www.westos.com bbs.westos.com
4.在客户端上进行测试:
在客户端的shell界面内,输入 curl www.westos.com/bbs.westos.com
5.负载均衡的配置:
server1(varnish服务器)上:
vim /etc/varnish/default.vcl
注意: set req.backend = lb; ##调用平衡轮叫 lb 的函数 return (pass); ##为了测试方便,不进行缓存
6.重启服务
7.清除缓存
varnishadm ban.url .*$ ##清除所有
varnishadm ban.url /index.html ##清除 index.html 页面缓存
varnishadm ban.url /admin/$ 清除 admin 目录缓存
8.在客户端进行测试,访问www.westos.org时,会出现每访问一次,会变跳
六.验证 varnish 具有缓存的作用
1.编辑配置文件
vim /etc/varnish/default.vcl
将配置文件中,上面的为了查看轮询效果而添加的语句注释掉。
## return (pass); ##本语句的意思是,varnish不进行缓存操作。注释掉以后,varnish就会将访问过的页面进行缓存。
再在配置文件中添加以下的操作,目的是看到后面输出的语句。
## HIT from westos cache 表示访问的页面是从varnish的缓存中返回的信息
## MISS from westos cache 表示缓存的页面没有相应的varnish的缓存
2.重启 varnish 服务
3.将原有的缓存清除,防止影响实验的结果
4.测试,查看 varnish 是否具有缓存的作用
第一次访问相应的页面,返回的结果是:varnish中没有缓存的信息
第二次访问相同的页面的时候,因为第一次访问过了,而且配置文件中将 return(pass)语句注释掉,因此varnish会有相应的缓存记录
实验证明:varnish具有缓存的功能。
七.一台主机多个解析
1.在server3的httpd的默认发布目录中建立两个虚拟主机
[root@server3 ~]# vim /etc/httpd/conf/httpd.conf
990 NameVirtualHost *:80 ##注释打开
##在最后编辑:
<VirtualHost *:80>
DocumentRoot /www
ServerName www.westos.org
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /bbs
ServerName bbs.westos.org
</VirtualHost>
2.创建目录/www 和/bbs,并编辑相应的前端文件
mkdir /www
mkdir /bbs
cd /www
vim index.html
<h1>www.westos.com--server3<h1>
cd /bbs
vim index.html
<h1>bbs.westos.com--server3<h1>
3.重启httpd服务
/etc/init.d/httpd restart
4.测试
(1)在测试之前,记得给客户端添加解析
vim /etc/hosts
172.25.5.3 www.westos.com bbs.westos.com
(2)测试:
curl www.westos.com
<h1>www.westos.com--server3<h1>
curl bbs.westos.com
<h1>bbs.westos.com--server3<h1>
八.CDN推送管理平台 (web界面批量清除缓存)
CDN推送: 当后端服务器中的DNS有更新时,在varnish的缓存中应该及时同步后端服务中的内容
1.在server1上
安装httpd,并编辑httpd配置文件
将136行的端口号修改8080(因为我们的varnish服务已经占用了80端口,避免冲突)
下载php(显示页面)
下载unzip(解压安装包)
vim /etc/httpd/conf/httpd.conf
Listen 8080
/etc/init.d/httpd restart
2.将banzip安装包从物理机发送到server1,并在server1解压到/var/www/html(指定目录解压 -d)
3.编辑config.php
4.将 /var/www/html/bansys 中的所有东西移到 /var/www/html 中
移动的原因是:如果不移动的话,发布页面是在 /var/www/html/bansys ,在网页上访问的时候,就需要输入 172.25.5.1:8080/bansys
5.记得要做DNS解析,/etc/hosts 中的文件修改
6.打开浏览器,浏览器中输入172.25.5.1:8080,出现CDN推送管理页面
7.编写 varnish 的默认文件
vim /etc/varnish/default.vcl
##设置访问控制,即白名单,允许本机和172.25.64网段和推送
acl westos{ "127.0.0.1"; ##允许本机访问 "172.25.5.0"/24; ##允许172.25.5网段的所有主机访问 }
8.测试
第一次miss,则没有缓存到
第二次hit,缓存成功(后面一直是hit)
9.CDN推送 (写入推送页面,点击确认提交)
10.再次测试,则为miss(表示缓存已经清除成功,否则还是hit)