CDN加速的实现 --- varnish
一、什么是CDN
cdn全称为内容分发网络(Content Delivery Network)。基本思想是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,是内容传输地更快、更稳定。通过在互联网各处放置节点服务器来构成在现有的互联网基础上的一层只能虚拟网络,cdn系统能够实时地根据网络流量和个节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。目的是为了是用户就近取所需内容,解决了网络拥挤问题,提高用户的响应速度。
varnish是一款具有高性能的开源HTTP加速器,具有方向代理、缓存的功能。
二、部署单个后端服务器的varnish过程
1、在官网下载软件包:varnish-libs-3.0.5-1.el6.x86_64.rpm和 varnish-3.0.5-1.el6.x86_64.rpm
2、安装varnish:(安装完成后,可以在/etc/passwd中查看已经生成的varnish用户;所以对varnish的访问控制也相当于通过对varnish用户控制来实现)
---> yum install varnish-3.0.5-1.el6.x86_64.rpm -y
3、编辑varnish文件
---> /etc/sysconfig/varnish # 只修改文件的接听端口为80即可
第66行修改:VARNISH_LISTEN_PORT=80
第8行查看:NFILES=131072 # 表示能打开的最大文件数(varnish用户可自动调整)
第12行查看:MEMLOCK=82000 # 表示最多可使用的内容空间(varnish用户可自动调整)
第15行查看:NPROCS=‘unlimited’ # 表示单个用户可运行的最大线程数
4、编辑varnish用户的限制文件
---> vim /etc/security/limits.conf # 只需要在末尾添加如下信息即可
varnish - memlock 82000
varnish - nproc unlimited
# 注意:此时的最后一列信息与3文件中的内容想对应
5、打开virnish服务器
---> /etc/init.d/varnish start
6、在默认文件中添加访问后端服务器的ip、端口、是否命中执行的相关代码(varnish主机为172.25.2.1)
---> /etc/varnish/default.vcl
.host = "172.25.2.2"
.port = "80"
}
sub val_deliver {
if (obj.hits > 0){
set resp.http.X-Cache = "HIT from westos cache";
# 在vainish中命中HTT访问的域名
}
else{
set resp.http.X-Cache = "MISS from westos cache";
# 在后端服务器中得到访问的域名
}
return (deliver)
}
7、默认配置文件修改之后,要进行文件的加载
---> vim /etc/init.d/varnish reload
8、在后端服务器中安装并开启httpd服务,关闭火墙
---> yum install httpd -y
---> /etc/init.d/httpd start
---> iptables -L # 查看火墙是关闭状态
9、在后端服务器添加一个默认发布目录
---> vim /var/www/html/index.html
<h1>server2 --- www.xniu.com<h1>
---> /etc/init.d/httpd restart
10、此时可以在物理主机中进行测试
---> curl -I 172.25.2.1 # 第一次,显示从后端服务器获取。第二次显示从varnish缓存中获取
注释:### 通过 varnishadm 手动清除缓存,清除之后的结果再测试。此时显示结果时从后端获取。###
varnishadm ban.url /index.html #清除 index.html 页面缓存
varnishadm ban.url /admin/$ #清除 admin 目录缓存
三、具有多台后端服务器的varnish
1、打开vm3主机;并设置ip为172.25.2.3,主机名为server3
---> vim /etc/sysconfig/network # 修改主机名
hostname=server3
---> vim /etc/sysconfig/network-scripts/ifcfg-eth0
IPADDR=172.25.2.3
2、在server3中安装httpd服务、并编辑默认发布目录
---> vim /var/www/html/index.html
<h1>server3 --- www.linux.com </h1>
---> /etc/init.d/httpd restart
3、在物理主机中添加解析
---> vim /etc/hosts
172.25.2.1 www.linux.com www.xniu.com xniu.com
4、配置varnish的默认文件
---> vim /etc/varnish/default.vcl
backend web1 { # 后端的第一个服务器web1
.port = "80";
}
backend web2 { # 后端的第二个服务器web2
.host = "172.25.2.3"; # 当www.linux.com访问跳转server3
.port = "80";
}
#当访问 www.xniu.com或xniu.com 域名时从 web1 上取数据,访问 www.linux.com 域名时到 web2 取数据。访问其他页面报错。
sub vcl_recv {
if (req.http.host ~ "^(www.)?xniu.com") {
set req.http.host = "www.xniu.com";
set req.backend = web1;
} elsif (req.http.host ~ "^www.linux.com") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
---> /etc/init.d/varnish reload
5、在物理主机中测试(此时,两个结果是不一样的)
---> curl www.linux.com
---> curl www.xniu.com
---> curl xniu.com
注释:使用curl -I xniu.com 与curl -I www.xniu.com查看的缓存信息是一样的。
四、varnish后端服务器的负载均衡
1、负载均衡(Load Balace,简称LB):是一种服务器或网络设备的集群技术。负载均衡将特定的业务(网络服务、网络流量等)分担给多个 服务器或网络设备,从而提高了业务处理能力,保证了业务的高可用性。负载均衡的算法种类很多,常见的包含:轮询法、随机法、源地址哈希法、加权轮询法、加权随机法、最小连接法等,应根据实际情况选取。在varnish中我们常用的是轮询法,平衡对待每一个服务器。
2、在server3中httpd默认发布目录进行如下操作
---> vim /etc/httpd/conf/httpd.conf # 将990行的注释打开
<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName www.linux.com
</VirtualHost>
DocumentRoot /www1
ServerName www.xniu.com
</VirtualHost>
3、在server3中创建/www1目录,并添加index.html;填写内容为 www.xniu.com
4、在varnish主机的默认文件中进行如下添加:
{ .backend = web1;}
{ .backend = web2;}
#把多个后端聚合为一个组,并检测后端健康状况
}
if (req.http.host ~ "^(www.)?xniu.com") {
set req.http.host = "www.xniu.com";
set req.backend = lb;
return (pass); # 表示不经过缓存,直接取服务器取拿东西
} elsif (req.http.host ~ "^www.linux.com") {
set req.backend = web2;
} else {
error 404 "westos cache";
}
}
---> /etc/init.d/varnish reload
5、在物理主机中测试:
---> cutl -I www.xniu.com
分析:会出现轮询现象。若第一次出现server2 --- www.xniu.com(server2),则在120s内均为该结果(由于varnish对数据进行了缓存);经过120s后,显示结果变为www.xniu.con(server3);出现这样的结果,是由于轮询算法,server2和server3平均被访问。如果默认写上pass之后,则每次测试www.xniu.com界面,会出现上述两个结果交替出现的现象。若server2或者server3中有一个httpd服务损坏后,客户端依然可以访问号的哪个服务器。
健康检查:
通过健康检查来确定服务器和应用的健康状况是负载均衡器的一个非常重要的功能,没有负载负载均衡器,客户端可能会将请求发送到已经停机的服务器上。网络管理员必须手动干预替换掉这台服务器或者排除这台服务器的故障。有时服务器可能没有停机,由于某种原因,比如说软件的漏洞问题,导致服务器上运行的应用系统不能正常运行;此时,负载均衡器能够检测这些情况并立即将客户端的请求定向到正常的服务器而不需要管理员的手动干预。
CDN加速的实现 --- varnish的更多相关文章
- 高并发大流量专题---5、CDN加速
高并发大流量专题---5.CDN加速 一.总结 一句话总结: CDN就是多整几台节点服务器,选距离用户最近的服务器来给用户服务,实现的话可以用阿里云.腾讯云他们提供的功能,简单方便,妈妈再也不用担心我 ...
- 【初码干货】使用阿里云对Web开发中的资源文件进行CDN加速的深入研究和实践
提示:阅读本文需提前了解的相关知识 1.阿里云(https://www.aliyun.com) 2.阿里云CDN(https://www.aliyun.com/product/cdn) 3.阿里云OS ...
- 阿里云系列——6.给你的域名使用CDN加速(详细步骤+简单配置)
网站部署之~阿里云系列汇总 http://www.cnblogs.com/dunitian/p/4958462.html 进入管理页面:https://home.console.aliyun.com/ ...
- Signalr系列之虚拟目录详解与应用中的CDN加速实战
目录 对SignalR不了解的人可以直接移步下面的目录 SignalR系列目录 前言 前段时间一直有人问我 在用SignalR 2.0开发客服系统[系列1:实现群发通讯]这篇文章中的"/Si ...
- 利用免费cdn加速webpack单页应用
回顾现状 在之前的学习过程中,react单页应用经过webpack打包之后会输出大概如下的目录结构,它就是站点的所有前端组成了: 1 2 3 4 5 6 MacBook-Pro:output ba ...
- c#获取ip的方法cdn加速获取真实ip方法
服务端://方法一HttpContext.Current.Request.UserHostAddress; //方法二HttpContext.Current.Request.ServerVariabl ...
- 怎么看网站是否开启CDN加速?测试网站全国访问速度方法详解
注意域名,动静分离的网站,只对静态文件的域名做了cdn 怎么看网站有没开启CDN? 要看一个网站是否开启CDN,方法很简单,只要在不同的地区ping网址就可以,比如在山东济南ping www.jb51 ...
- 2014年十个优秀的免费CDN加速服务-国内和国外免费CDN
这是一篇总结近几年来网络上出现了各类免费CDN服务的文章,文章本来应该早就发出来的,但是因为近期的各种原因一直拖到现在.之前部落已经总结了近几年来的优秀免费空间,新手朋友不必在茫茫“网”海中寻找免费空 ...
- jquery cdn加速点
新浪jquery cdn加速点: <script src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.js">< ...
随机推荐
- PHP 实现归并排序算法
算法原理 原理: 利用递归,先拆分.后合并.再排序. 步骤: 均分数列为两个子数列 递归重复上一步骤,直到子数列只有一个元素 父数列合并两个子数列并排序,递归返回数列 代码实现 // 归并排序主程序 ...
- BZOJ3150: [Ctsc2013]猴子
传送门 这题好神啊..好神啊.. 首先得到简单的DP方程: $f_{\{ i \}}=\frac{\sum_{i \ne j} f_ {\{ i,j \}} \times P_{(i,j)}}{N-1 ...
- Jenkins FreeStyle or Pipeline Job
FreeStyle Job: 1. 需要在页面添加模块配置项与参数完成配置 2. 每个Job仅能实现一个开发功能 3. 无法将配置代码化,不利于Job配置迁移与版本控制 4. 逻辑相对简单,无额外学习 ...
- 4.9版本的linux内核中温度传感器adt7461的驱动源码在哪里
答:drivers/hwmon/lm90.c,这个文件中支持了好多芯片,内核配置项为CONFIG_SENSORS_LM90 Location: -> Device Drivers -> H ...
- 安装配置mariadb-10.1.19
本文参考:http://chenzehe.iteye.com/blog/1266260 感谢原作者的分享! 首先安装/更新一些编译时会用到的基础包 [root@localhost local]# y ...
- ThreadLocal 从源码角度简单分析
目录 ThreadLcoal源码浅析 ThreadLocal的垃圾回收 Java引用 ThreadLocal的回收 各线程中threadLocalMap的回收 内存泄露问题 总结 参考 ThreadL ...
- 爬虫bs4
CSS 选择器:BeautifulSoup4 和 lxml 一样,Beautiful Soup 也是一个HTML/XML的解析器,主要的功能也是如何解析和提取 HTML/XML 数据. lxml 只会 ...
- 7.scala:继承
版权申明:转载请注明出处. 文章来源:http://bigdataer.net/?p=315 排版乱?请移步原文获得更好的阅读体验 类似于java中的继承,在scala中同样有继承一说,而且在很多方面 ...
- RMQ问题 - ST表的简单应用
2017-08-26 22:25:57 writer:pprp 题意很简单,给你一串数字,问你给定区间中最大值减去给定区间中的最小值是多少? 用ST表即可实现 一开始无脑套模板,找了最大值,找了最小值 ...
- nodejs中mysql断线重连
之前写了个小程序Node News,用到了MySQL数据库,在本地测试均没神马问题.放上服务器运行一段时间后,偶然发现打开页面的时候页面一直处于等待状态,直到Nginx返回超时错误.于是上服务器检查了 ...