例子:当西安的用户,想要去访问远在深圳的腾讯服务器时。如果每次都直接访问深圳腾讯服务器那么,效率会及其底下。如果西安有一个腾讯的代理服务器,西安用户只需要去访问西安的代理服务器,第一次,西安代理服务器,也需要去深圳腾讯服务器访问,只要西安的腾讯代理服务器缓存以后,其余的用户或者之后再访问相同的内容,速度会很快。
CDN的全称是Content Delivery Network,即内容分发 络。CDN是构建在 络之上的内容分发 络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低 络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
Squid是一个高性能的代理缓存服务器,Squid支持FTP、gopher、HTTPS和HTTP协议。和一般的代理缓存软件不同,Squid用一个单独的、非模块化的、I/O驱动的进程来处理所有的客户端请求。
Varnish是一款高性能的开源HTTP加速器,挪威最大的在线 纸 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能比以前更好。
varnish的原理
varnish都是以模块进行处理,配置文件中的sub vcl-deliver等等 都是一个个的模块
处理过程大致分为如下几个步骤:
(1)Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或
Pipe,或者进入 Lookup(本地查询)。
(2)Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进
入 miss 状态。
(3)Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。
(4)Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地
的存储。
(5)Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。
lookup: 使用vcl-hash,将你的ip与后段服务器绑定
查看是否有缓存,有就miss,没有就hit
pass:请求给了fetch(查询)。动态数据不适合缓存的使用pass。
pipe:与pass类似,直接访问后端服务器。数据比较大,不适合缓存。
VCL:varnish configure language (varnish的专用配置语言)
一、实验环境:
1)安装6.5linux虚拟机:
1、修改主机名
vi /etc/sysconfig/network
server1
2、修改本地解析
vi /etc/hosts
172.25.85.1 server1
172.25.85.2 server2
172.25.85.3 server3
172.25.85.4 server4
172.25.85.5 server5
172.25.85.6 server6
3、修改ip地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/init.d/network restart
4、配置yum源
vi /etc/yum.repos.d/rhel-source.repo
yum clean all
yum repolist
5、安装vim,openssh 和 lftp
yum install vim openssh-clients lftp -y
6、删除70-persistent-net.rules文件 ##如果有这个文件,快照会 错,因为里面含有mac地址
18 cd /etc/udev/
19 ls
20 cd rules.d/
21 ls
22 rm -rf 70-persistent-net.rules
7、关闭selinux
vi /etc/sysconfig/selinux
SELINUX=disabled
8、关闭防火墙并开机不启动
13 /etc/init.d/iptables stop
14 /etc/init.d/ip6tables stop
15 chkconfig iptables off
16 chkconfig ip6tables off
9关闭
2)利用快照安装三太虚拟机:
cd /var/lib/libvirt/images/
qemu-img create -f qcow2 -b origin.qcow2 vm1.qcow2
qemu-img create -f qcow2 -b origin.qcow2 vm2.qcow2
qemu-img create -f qcow2 -b origin.qcow2 vm3.qcow2
1、复制三张虚拟机的vm1,vm2,vm3
2、安装三台虚拟机vm1,vm2,vm3
3、修改三台虚拟机的主机名和ip地址
vi /etc/sysconfig/network
vi /etc/sysconfig/network-scripts/ifcfg-eth0
/etc/init.d/network restart
二、varnish服务的安装
1)varnish的介绍
2)第一台服务器vm1安装varnish,并修改好配置文件
1、下载 安装包varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm,并安装
yum install varnish-* -y
2、修改配置文件
rpm -qc varnish- ##查看配置文件
配置文件一
vim /etc/sysconfig/varnish ##查看第一个配置文件
8 NFILES=131072 ##最大可以开启的数量
12 MEMLOCK=82000 ##占用的内存
15 NPROCS=”unlimited” ##线程数量不限制
———————————————————————————————————————————————————-
我们需要查看系统最多可以打开多少文件,要大于varnish的数量
sysctl -a | grep file ##查看系统可以开启的最大文件数量
配置文件二
vim /etc/sysconfig/varnish ##修改端口
66 VARNISH_LISTEN_PORT=80
修改系统内置的配置文件,使得达到varnish的要求。
vim /etc/security/limits.conf
51 varnish – nofile 131072 ##最大开启文件的数量
52 varnish – memlock 82000 ##占用的内存
53 varnish – nproc unlimited ##进程 是否限制
配置文件三:
[root@server1 ~]# vim /etc/varnish/default.vcl
7 backend default {
8 .host = “172.25.85.2”;
9 .port = “80”;
10 }
3)启动varnish
/etc/init.d//varnish start
4)第二台服务区vm2安装httpd服务
yum install httpd -y
reboot
cd /var/www/html/
ls
vim index.html ##编写默认发布目录
/etc/init.d/httpd start
测试:
在测试主机curl vm1的ip地址
5)实现varnish的缓存功能
在vim /etc/varnish/default.vcl编写如下
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);
}
测试结果
第一次没有缓存
清空缓存要在,varnish服务端进行。
清空缓存:varnishadm ban.url .*$
varnishadm ban.url /index.html 访问方式不同
要使用 curl -I 172.25.38.1/index.html
6)设置两个 页
在vim /etc/varnish/default.vcl编写如下
backend web1 {
.host = “172.25.85.2”;
.port = “80”;
}
backend web2 {
.host = “172.25.85.3”;
.port = “80”;
}
sub vcl_recv{
if (req.http.host ~ “^(www.)estos.org”){
set req.http.host = “www.westos.org”;
set req.backend = web1;
}elsif (req.http.host ~ “^bbs.westos.org”){
set req.backend = web2;
} else{
error 404 “westos cache”;
}
}
完成后,重新加载
/etc/init.d/varnish reload
在测试机,加入本地解析
vim /etc/hosts
172.25.85.1 server1 www.westos.org bbs.westos.org
测试结果
7)如何实现负载均衡(论寻访问web1和web2)
在vim /etc/varnish/default.vcl编写如下
director lb round-robin{ ##实现论寻
{ .backend = web1; }
{ .backend = web2; }
}
sub vcl_recv {
if (req.http.host ~ “^(www.)estos.org”){
set req.http.host = “www.westos.org”;
set req.backend = lb; ##访问www.westos.org 论寻
return (pass); ##不会缓存,否则看不到效果
}elsif ( req.http.host ~ “^bbs.westos.org” ){
set req.backend = web2;
}else{
error 404 “westos cache”;
}
}
实验结果
8)虚拟主机的安装
在server2或者server3实现
990 NameVirtualHost *:80
1004
1005 DocumentRoot /www
1006 ServerName www.westos.org
1007
1008
1009
1010 DocumentRoot /bbs
1011 ServerName bbs.westos.org
1012
2、创建目录
[root@server3 html]# mkdir /www
[root@server3 html]# mkdir /bbs
[root@server3 html]# cd /www
[root@server3 www]# vim index.html
[root@server3 www]# cd /bbs/
[root@server3 bbs]# vim index.html
重启服务
/etc/init.d/httpd restart
测试
测试机vim/etc/hosts
172.25.85.2 server2 www.westos.org bbs.westos.org
结果
9)cdn推送管理,清除缓存
1、安装相关软件
yum install unzip httpd php -y
2、解压unzip bansys.zip -d /var/www/html/
3、编写bansys配置文件
cd /var/www/html/bansys/
vim config.php
//varnish主机列表 //varnish群组定义 //varnish版本 ~ vim /etc/httpd/conf/httpd.conf mv * ../ 测试机 vim /etc/varnish/default.vcl 编写 sub vcl_recv { 重新加载varnish 测试机 访问 172.25.85.1:8080 在控制台 声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!
//可定义多个主机列表
$var_group1 = array(
‘host’ => array(‘172.25.85.1’),
‘port’ => ‘8080’,
);
//对主机列表进行绑定
$VAR_CLUSTER = array(
‘www.westos.org’ => $var_group1,
);
//2.x和3.x推送命令不一样
$VAR_VERSION = “3”;4、修改端口 为8080
136 Listen 8080
启动http服务
/etc/init.d/httpd start5、将所有bansys的配置文件移动到aphache目录下
测试:
vim /etc/hosts
172.25.85.1 server1 www.westos.org bbs.westos.org6、编写varnish的配置文件
acl westos{
“127.0.0.1”;
“172.25.85.0”/24; ##85段的IP允许
}
if (req.request == “BAN”){
if (!client.ip ~ westos){
error 405 “Not allowed.”;
}
ban(“req.url ~ ” + req.url);
error 200 “ban added”;
}
}
/etc/init.d/varnish reload测试:
发送模式:HTTP
cdn www.westos.org
推送内容: .* ##清空缓存