CDN
什么是cdn?
CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
CDN的基本原理:
CDN的基本原理是广泛采用各种缓存服务器,将这些缓存服务器分布到用户访问相对集中的地区或网络中,在用户访问网站时,利用全局负载技术将用户的访问指向距离最近的工作正常的缓存服务器上,由缓存服务器直接响应用户请求。
CDN的基本思路:
基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决 Internet网络拥挤的状况,提高用户访问网站的响应速度。
varnish部署
在之前我们用过squid代理缓存服务器,那么我们今天来学习部署在市场上完全替代了squid的varnish来部署CDN
实验环境:共三台虚拟机
在这次实验中我们将server1作为cdn缓存服务器
1.在官网下载varnish安装包
2.安装
3.编辑varnish配置文件
vim /etc/sysconfig/varnish
将66行改为:VARNISH_LISTEN_PORT=80 #因为我们需要时使用varnish访问http,所以将其监听端口改为80
# 以下不用修改,只是查看
第8行 NFILES=131072 # 最多能打开的文件数,varnish会自动调整该值
第12行 MEMLOCK=82000 # 最多能使用的内存空间,varnish会自动调整该值
第15行 NPROCS="unlimited" # 单个用户所能运行的最大线程数
![在这里插入图片描述](https://img-blog.csdnimg.cn/20190416193946942.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MjQ0NjAzMQ==,size_16,color_FFFFFF,t_70)
4.修改虚拟机内存空间
因为varnish所需的最大内存空间为82000,然而我们给虚拟机分配的内存空间只有64MB,所以最大值是不够的,我们则需要给你添加内存空间
5.修改varnish用户的限制文件
因为varnish这个程序运行在varnish这个用户的私有空间内,内核对普通用户限制的最大文件数为1024,所以我们需要对varnish用户的限制进行修改,满足varnish配置文件的要求
vim /etc/security/limits.conf
6.开启varnish
varnish实现高速缓存(反向代理)
1.配置varnish默认文件,添加后短服务器(目标服务器)
vim /etc/varnish/default.vcl
backend default {
.host = "172.25.77.2"; # 后端服务器的ip
.port = "80"; # 后端服务器的端口
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
# 在varnish中命中HIT访问的域名
}
else {
set resp.http.X-Cache = "MISS from westos cache";
# 后端服务器中得到MISS访问的域名
}
return (deliver);
}
2.重启varnish服务
3.在后短服务器server2中安装httpd,并且书写默认发布目录
4.在真机中多次访问缓存服务器server1,产看命中情况
我们共访问了三次server1,只有第一次显示的是MISS,其余两次均是HIT,这代表我们第一次是真实访问到了server2,实现反向代理,二后面的两次我们则是访问的server1的缓存内容,所以是HIT
具有多个不同后端的varnish
1.手动清空server1的缓存
varnishadm ban.url .*$ #清除所有
varnishadm ban.url /index.html #清除index.html页面缓存
varnishadm ban.url /admin/$ #清除admin目录缓存
2.在server3上安装httpd,并书写默认发布文件
3.编辑varnish默认文件
backend web1 { # 后端第一个服务器名web1
.host = "172.25.77.2";
#将server2 www.ljz.org作为第一个服务器主机
.port = "80";
}
backend web2 { # 后端第二个服务器名web2
.host = "172.25.77.3"
#将server3 bbs.ljz.org作为第二个服务器主机
.port = "80";
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?ljz.org") {
# 解析域名是ljz.org 或www.ljz.org,均访问172.25.77.2->server2
set req.http.host = "www.ljz.org";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.ljz.org") {
# 解析域名为bbs.ljz.com,访问172.25.77.3->server 3
set req.backend = web2;
} else {error 404 "westos cache";
# 如果访问的域名不是这三者,404的错误
}
}
4.真机中添加域名解析
vim /etc/hosts
5.在真机中测试
varnish做调度器,实现负载均衡
1.负载均衡:
负载均衡(Load Balance,简称LB)是一种服务器或网络设备的集群技术。负载均衡将特定的业务(网络服务、网络流量等)分担给多个服务器或网络设备,从而提高了业务处理能力,保证了业务的高可用性。
负载均衡算法的种类有很多种,常见的负载均衡算法包括轮询法、随机法、源地址哈希法、加权轮询法、加权随机法、最小连接法等,应根据具体的使用场景选取对应的算法。在varnish中我们采用的是轮询法,平衡对待么一个后端服务器。
2.在varnish主机server1的defaults文件中写入负载均衡函数
director ljz round-robin { # 采用round-robin算法
{ .backend = web1; }
{ .backend = web2; }
}
Round Robin(中文翻译为轮询调度)是一种以轮询的方式依次将一个域名解析到多个IP地址的调度不同服务器的计算方法。
sub vcl_recv {
if (req.http.host ~ "^(www.)?ljz.org") {
set req.http.host = "www.ljz.org";
set req.backend = ljz; # 调用平衡轮叫函数
#return (pass); # 写pass表明不经过缓存直接去后端服务器拿数据
} elsif (req.http.host ~ "^bbs.ljz.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
3.在server3上添加虚拟主机
4.真机测试:
我们会发现并没有赵我们预期那样轮询调度,这是因为它访问的仍然是缓存信息,那么我们只要不让他在每次访问后访问缓存即可,即修改配置文件中的return(pass)
5.重启varnish再次测试
轮询调度成功!