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+MySQL数据库编程的步骤
第一步:PHP连接MySQL服务器 第二步:选择当前要操作的数据库 第三步:设置请求或返回的数据的字符集 第四步:执行各种SQL语句. PHP连接MySQL服务器 1.mysql_connect() ...
- 如何用纯 CSS 创作一个跳动的字母 i
效果预览 在线演示 按下右侧的"点击预览"按钮可以在当前页面预览,点击链接可以全屏预览. https://codepen.io/comehope/pen/pZbrpJ 可交互视频 ...
- spi nor flash使用汇总
Overview SPI flash, 分为spi flash, DUAL spi flash, QUAD spi flash, 3-wire spi, 4-wire spi, 6-wire spi. ...
- optind变量
1.这个变量是在什么地方定义的? 答:系统定义的 2.这个变量在什么场景下使用? 答:在解析命令行参数时会用到 3.这个变量存在的意义? 在每调用一次getopt()或getopt_long()类似函 ...
- IDEA 逆向工程
今天要写一个导入功能,需要把数据库的一个表映射成一个pojo,但是这表字段不是一般的多啊...想了想能不能自动生成???在IDEA中点了半天发现还是可以的 下面介绍一下步骤: 第一步:找到这个图标,建 ...
- Hive中的数据倾斜
Hive中的数据倾斜 hive 1. 什么是数据倾斜 mapreduce中,相同key的value都给一个reduce,如果个别key的数据过多,而其他key的较少,就会出现数据倾斜.通俗的说,就是我 ...
- 数据库还原,System.Data.SqlClient.SqlError: 因为数据库正在使用,所以无法获得对数据库的独占访问权。 (Microsoft.SqlServer.SmoExtended)
数据库还原问题: System.Data.SqlClient.SqlError: 因为数据库正在使用,所以无法获得对数据库的独占访问权. (Microsoft.SqlServer.SmoExtende ...
- python正则表达式 Python Re模块
最近在学python 练习的时候随手写的,方便以后自己参考~如果能对其他同学有所帮助就再好不过了 希望大家指正哦~ 我会随时整理的,先这样~ 正则表达式 1.元字符([ ]),它用来指定一个char ...
- bootstrap自定义——栅格列数修改
从下载的bootstrap文件中找到less文件夹里面的variables.less,然后可以找到栅格列数进行修改 然后执行一下bootstrap.less,通过命令行,切换到其所在的目录D:\03 ...
- apollo stomp client 代码示例
0.环境准备 0.1.linux 0.2.java 0.3.下载apollo二进制包,解压 0.4.创建broker,名字为 userlog {APOLLO_HOME}/bin/apollo crea ...