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即可
4、编辑varnish用户的限制文件
---> vim /etc/security/limits.conf # 只需要在末尾添加如下信息即可
5、打开virnish服务器
---> /etc/init.d/varnish start
6、在默认文件中添加访问后端服务器的ip、端口、是否命中执行的相关代码(varnish主机为172.25.2.1)
---> /etc/varnish/default.vcl
---> 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
---> /etc/init.d/varnish reload5、在物理主机中测试(此时,两个结果是不一样的)
---> 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行的注释打开
3、在server3中创建/www1目录,并添加index.html;填写内容为 www.xniu.com
4、在varnish主机的默认文件中进行如下添加:
---> /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服务损坏后,客户端依然可以访问号的哪个服务器。
健康检查:
通过健康检查来确定服务器和应用的健康状况是负载均衡器的一个非常重要的功能,没有负载负载均衡器,客户端可能会将请求发送到已经停机的服务器上。网络管理员必须手动干预替换掉这台服务器或者排除这台服务器的故障。有时服务器可能没有停机,由于某种原因,比如说软件的漏洞问题,导致服务器上运行的应用系统不能正常运行;此时,负载均衡器能够检测这些情况并立即将客户端的请求定向到正常的服务器而不需要管理员的手动干预。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步