CDN系统的Varnish部署

CDN

CDN的全称是Content Delivery Network,即内容分发网络。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。CDN的关键技术主要有内容存储和分发技术。

搭建CDN系统可以选择3种主流方案:
1. squid 2. varnish 3. Nginx+memcache
………………………………………………………………………………………………………..

Varnish

Varnish是一款高性能的开源HTTP加速器,Varnish的功能与Squid服务器相似,都可以用来做HTTP缓存。 Verdens Gang 使用3台Varnish代替了原来的12台Squid,性能优越于Squid。

Varnish工作原理图
这里写图片描述
工作流程大致如下:
当varnish上没有缓存时:
这里写图片描述
当varnish上有缓存数据的时候:
这里写图片描述

实验环境

三台虚拟机+一台真实主机
这里写图片描述

配置varnish服务器

server1:
*安装varnish软件包
lftp 在172.25.254.250主机获取varnish-3.0.5-1.el6.x86_64.rpm软件
yum install * -y
*修改varnish的监听端口
[root@server1 ~]vim /etc/sysconfig/varnish
66 VARNISH_LISTEN_PORT=80 # 设置为监听80端口
*修改配置文件(修改安全限制文件,保证流量大时,服务正常运行)
内核允许的打开文件最大数:
[root@server1 ~]# sysctl -a |grep file
fs.file-nr = 416 0 98866
fs.file-max = 98866
varnish软件的打开文件最大数:
# Maximum number of open files (for ulimit -n)
NFILES=90000
*修改内存空间和线程数:
[root@server1 ~]# vim /etc/sysconfig/varnish
#Default log size is 82MB + header
MEMLOCK=82000
#Maximum number or threads (for ulimit -u)
NPROCS=’unlimited’
[root@server1 ~]# vim /etc/security/limits.conf
varnish - nofile 96667
varnish - memlock 82000
varnish - nproc unlimited
*启动varnish服务
[root@server1 ~]# /etc/init.d/varnish start
[root@server1 ~]# netstat -antlp
server2
下载apache并开启服务
[root@server2 ~]# yum install httpd -y
[root@server2 ~]# /etc/init.d/httpd start
编辑发布页面内容
[root@server2 ~]# vim /var/www/html/index.html

查看缓存命中情况

server1
[root@server1 ~]# 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
[root@server1 ~]# /etc/init.d/varnish reload
真机测试
添加本地解析:
[root@foundation31 images]# vim /etc/hosts
172.25.31.1 www.westos.org
测试:
[root@foundation31 images]#curl -I www.westos.org
第一次未命中 后续全部命中
varnish默认缓存时间120s,超过120s自动清除缓存

清除缓存

varnishadm ban.url .* ##清除所有  varnishadm ban.url /index.html ##清除 index.html 页面缓存  varnishadm ban.url /admin/ ##清除 admin 目录缓存
server1清除缓存
[root@server1 ~]# varnishadm ban.url /index.html
真机测试
[root@foundation31 images]#curl -I www.westos.org

定义不同IP的web服务

server1
[root@server1 ~]# vim /etc/varnish/default.vcl
backend web1 {
.host = “172.25.31.2”;
.port = “80”;
}
backend web2 {
.host = “172.25.31.3”;
.port = “80”;
}
sub vcl_recv {
if (req.http.host ~ “^(www.)?westos.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”;
}
}
[root@server1 ~]# /etc/init.d/varnish reload ##重读配置文件
真机测试
[root@foundation31 images]#curl -I www.westos.org

负载均衡

server1
[root@server1 ~]# vim /etc/varnish/default.vcl
backend web1 {
.host = “172.25.7.2”;
.port = “80”;
}
backend web2 {
.host = “172.25.7.3”;
.port = “80”;
}
# # 把多个后端聚合为一个组,并检测后端健康状况
# # Round Robin(中文翻译为轮询调度)是一种以轮询的方式依次将一个域名
## 解析到多个IP地址的调度不同服务器的计算方法。
director lb 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 = lb; ##调用轮询方法,将访问分发至后端轮询组
return (pass); ##为了测试方便,不进行缓存
} elsif (req.http.host ~ “^bbs.westos.org”) {
set req.backend = web2;
} else {error 404 “westos cache”;
}
server3:设定虚拟主机
[root@server3 ~]# mkdir /www1
[root@server3 ~]# cd /www1/
[root@server3 www1]# vim index.html
NameVirtualHost *:80
[root@server3 ~]# vim /etc/httpd/conf/httpd.conf
这里写图片描述
[root@server3 ~]# /etc/init.d/httpd restart
真机测试
[root@foundation31 images]#curl -I www.westos.org

猜你喜欢

转载自blog.csdn.net/weixin_42915309/article/details/82696449
今日推荐