CDN的全称是Content Delivery Network,即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
一、部署单个服务端的varnish服务
1.利用虚拟机封装中快照的创建方式,创建两台虚拟机快照server1、server2
从官网上下载varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm两个varnish的安装包,
2.在server1上安装varnish
yum install varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm -y
/etc/init.d/varnish strat
vim /etc/sysconfig/varnish
配置varnish服务的配置文件,将端口改为80
NFILES=131072
MEMLOCK=82000
NPROCS='unlimited'
VARNISH_LISTEN_PORT=80
ulimit -a # 查看系统中的限制文件的大小
sysctl -a # 查看限制文件大小
vim /etc/security/limits.conf # 修改varnish文件的限制文件
varnish - nofile 9000
varnish - nenlock 82000
varnish - nproc unlimited
cd /etc/varnish/
vim default.vcl
backend web1 {
.host = "172.25.11.2";
.port = "80";
}
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);
}
/etc/init.d/varnish reload
3.在server2中安装httpd服务
yum install httpd -y
/etc/init.d/httpd start
在发布目录下写发布文件index.html,(文件中的内容可以随意,我在这写的是www.westos.org-server2)
4.在真实物理机上写入域名解析
vim /etc/hosts
172.25.11.1 www.westos.org westos.org
172.25.11.1 bbs.westos.org
5.在主机上验证:
当缓存大于120s后缓存会清0
varnishadm ban.url /index.html # 清空缓存
当你所创建的虚拟机不再br0的桥接上时,执行下面两条命令
brctl addif br0 vnet0
ip link set up dev vnet0
cdn数据缓存的过程:
client-->dns-->cdn-->server-->cdn-->cache-->client
二、部署多个服务端的varnish服务
1.利用虚拟机封装中快照的创建方式,创建两台虚拟机快照server3
2.安装http服务
yum install httpd -y
/etc/init.d/httpd start
vim /var/www/html/index.html(我在其中写的发布文件内容为bbs.westos.org)
/etc/init.d/httpd restart
3.在server1中配置varnish
vim /etc/varnish/default.vcl
backend web2 {
.host = "172.25.11.3";
.port = "80";
}
director westos round-robin {
{.backend = web1;}
{.backend = web2;}
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = westos;
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
/etc/init.d/varnish reload
4.在物理主机上验证:
三、轮叫:
1.在server3上配置http的配置文件:
vim /etc/httpd/conf/httpd.conf
NameVirtualHost *:80 # 打开80端口
<VirtualHost *:80>
DocumentRoot /var/www/html/
ServerName bbs.westos.org
</VirtualHost>
<VirtualHost *:80>
DocumentRoot /www1
ServerName www.westos.org
</VirtualHost>
mkdir /www1
vim /www1/index.html(我在此写的发布内容为www.westos.org-server3)
/etc/init.d/httpd restart
2.在server3中验证配置文件是否正确:
3.在server1中配置varnish文件:
前提:注释上一个写入的函数,函数名相同
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = westos;
# return (pass);
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {
error 404 "westos cache";
}
}
/etc/init.d/varnish reload
当停掉server2时,并且server2在缓存中已经过期则由server3继续提供
/etc/init.d/httpd stop
现在的varnish已经很健壮。很多门户网站已经部署了varnish,并且反应都很好,甚至反应比squid还稳定,且效率更高,资源占用更少。相信在反向代理,web加速方面,varnish已经有足够能力代替squid。
CDN的推送
Cdn推送管理:
在server1上安装以下服务
Yum install unzip php httpd -y
更改http配置文件的端口为8080,(varnish的端口是80,以免发生冲突)
写php的配置文件
<?php
//可定义多个主机列表
$var_group1 = array(
'host' => array('172.25.11.1'),
'port' => '80',
);
//varnish群组定义
//对主机列表进行绑定
$VAR_CLUSTER = array(
'www.westos.org' => $var_group1,
);
//varnish版本
//2.x和3.x推送命令不一样
$VAR_VERSION = "3";
?>
写varnish的配置文件:
acl westos {
"127.0.0.1";
"172.25.11.0"/24;
}
if (req.request == "BAN") {
if (!client.ip ~ westos) {
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
打开http服务,重新加载varnish
/etc/init.d/httpd start
/etc/init.d/varnish reload
浏览器验证推送界面:
输入:172.25.11.1:8080
推送时选择http
输入推送界面:/index.html 或 http://www.westos.org/index.html
验证:在物理机上验证
输入:curl www.westos.org/index.html (清理的页面就去查看页面,就去访问其页面)
推送之后再次查看: