CDN加速的实现——varnish

CDN的全称——Content Delivery Network,即内容分发网络。
其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节,使内容传输的更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之上的一层智能虚拟网络,CDN系统能够实时地根据网络流量和各节点的连接、负载状况以及到用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务节点上。其目的是使用户可就近取得所需内容,解决
Internet网络拥挤的状况,提高用户访问网站的响应速度。 Varnish是一款高性能的开源HTTP加速器,具有反向代理,缓存的功能。

主机环境: rhel6 selinux and iptables disabled
实验主机: 
172.25.75.1			varnish
172.25.75.2			apache
172.25.75.3		    apache

一.部署单个后端服务器的varnish过程

1.在官网下载varnish-libs-3.0.5-1.el6.x86_64.rpm和varnish-3.0.5-1.el6.x86_64.rpm

yum install varnish-libs-3.0.5-1.el6.x86_64.rpm
yum install varnish-3.0.5-1.el6.x86_64.rpm

安装完成后,在系统的/etc/passwd中生成varnish用户,对varnish的访问控制实质上是对varnish用户的控制实现的。

在这里插入图片描述
2.编辑varnish文件

vim /etc/sysconfig/varnish

	VARNISH_LISTEN_PORT=80
  	#将66行改为:VARNISH_LISTEN_PORT=80
  
  # 以下不用修改,只是查看
  第8行 NFILES=131072         # 最多能打开的文件数,varnish会自动调整该值
  第12行 MEMLOCK=82000        # 最多能使用的内存空间,varnish会自动调整该值
  第15行 NPROCS="unlimited"   # 单个用户所能运行的最大线程数

3.修改varnish用户的限制文件
因为varnish这个程序运行在varnish这个用户的私有空间内,内核对普通用户限制的最大文件数为1024.对varnish用户限制的最大文件数为131072,我们需要满足131072这个最大值。

vim /etc/security/limits.conf
  varnish         -       nofile          131072   # 满足最多能打开的文件数
  varnish         -       memlock         82000
  varnish         -       nproc           unlimited
  # 将后边的数字和上边文件中对应项改为相等

在这里插入图片描述
4.打开varnish服务

  /etc/init.d/varnish start

5.在varnish默认文件中写上后端服务器的IP及端口

vim /etc/varnish/default.vcl
backend default {
  .host = "172.25.75.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);
}

在这里插入图片描述

5.编写配置文件后要重新加载默认文件

/etc/init.d/varnish reload   		##必须步骤

6.在物理机中的/etc/hosts中写www.westos.org的解析—>172.25.75.1(varnish主机)

172.25.75.1     server1 www.westos.org bbs.westos.org

在server2(后端服务器)中安装httpd服务并在Apach默认发布目录中写默认发布文件

在这里插入图片描述
7.在物理机中测试:

curl www.westos.org 

在这里插入图片描述
curl -I www.westos.org

第一次访问

在这里插入图片描述

第二次访问
在这里插入图片描述

此时间为缓存时间,可在配置文件中改变
在这里插入图片描述

二.具有多台后端服务器的varnish

1.配置vm3虚拟机并打开,配置ip和主机名为172.25.75.3->server3

vim /etc/sysconfig/network 

HOSTNAME=server3

2.安装httpd服务,在httpd的默认发布目录下编辑默认发布文件index.html

bbs.server3.com

3.将bbs解析到物理主机 bbs.westos.org 172.25.75.1

之前的实验已经做过了

4.配置varnish的server1default文件

vim /etc/varnish/default.vcl

backend web1 {     # 后端第一个服务器名web1
  .host = "172.25.1.2";   
  #将server2 www.westos.org作为第一个服务器主机
  .port = "80";
}
backend web2 {     # 后端第二个服务器名web2
.host = "172.25.1.3"
#将server3 bbs.westos.org作为第二个服务器主机
  .port = "80";
}

sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {     
# 解析域名是westos.com 或www.westos.com,均访问172.25.1.2->server2
set req.http.host = "www.westos.org";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.westos.org") {   
# 解析域名为bbs.westos.com,访问172.25.1.3->server 3
set req.backend = web2;
} else {error 404 "westos cache";   
# 如果访问的域名不是这三者,404的错误
}
}

default文件每次编写完后都要reload varnish

/etc/init.d/varnish reload

5.物理机中的访问测试:
在这里插入图片描述

三.varnish后端服务器的负载均衡

1.什么是负载均衡,为什么要负载均衡

负载均衡(Load Balance,简称LB)是一种服务器或网络设备的集群技术。负载均衡将特定的业务(网络服务、网络流量等)分担给多个服务器或网络设备,从而提高了业务处理能力,保证了业务的高可用性。
负载均衡算法的种类有很多种,常见的负载均衡算法包括轮询法、随机法、源地址哈希法、加权轮询法、加权随机法、最小连接法等,应根据具体的使用场景选取对应的算法。在varnish中我们采用的是轮询法,平衡对待每一个后端服务器。

2.在server3的httpd的默认发布目录中建立两个虚拟主机

vim /etc/httpd/conf/httpd.conf
****
990 NameVirtualHost *:80

1012 <VirtualHost *:80>
1013     DocumentRoot /www
1014     ServerName www.westos.org
1015 </VirtualHost>
1016 
1017 <VirtualHost *:80>
1018     DocumentRoot /bbs
1019     ServerName bbs.westos.org
1020 </VirtualHost>

****

/etc/init.d/httpd restart				##重启服务

在server3默认发布目录中书写

<h1>www.server3.com</h1>

在server2默认发布目录中书写

<h1>www.server2.com</h1>

4.4.在varnish主机server1中的defaults文件中写入负载均衡函数:

 director lb round-robin {   # 采用round-robin算法
{ .backend = web1; }
{ .backend = web2; }
}

Round Robin(中文翻译为轮询调度)是一种以轮询的方式依次将一个域名解析到多个IP地址的调度不同服务器的计算方法。

sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = lb;  # 调用平衡轮叫函数
#return (pass);    # 写pass表明不经过缓存直接去后端服务器拿数据
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}

##为了实验现象,需要return (pass)

5.在物理主机中的测试

curl www.westos.org

如果第一次出现server2(server3),那么120秒(默认)内都是server2(萨尔ver),因为server2(server3)将数据进行了缓存;
如果访问时间大于120s,它会出现server3(server2)(因为负载均衡采用的算法是平衡轮叫,server2和server3是公平地被访问的)
如果在默认函数中写上pass,那么它每次都直接从后端服务器中直接取,一次server2一次server3
如果server2或者server3其中一个损坏(关闭htpd服务),那么客户端只会访问健康的那一个,不会访问坏的哪一个,即负载均衡的健康检查。

正常情况下
在这里插入图片描述

当server3的http关掉之后测试
在这里插入图片描述

健康检查:

通过健康检查来确定服务器和应用的健康状况是负载均衡器器一个非常重要的功能。没有负载均衡器,客户端可能会将请求发送到已经停机的服务器上。网络管理员必须手动干预替换这台服务器,或者排除服务器的故障。有时服务器可能没有停机,但是因为某种原因,比如软件的漏洞,服务器上面运行的应用系统已经不能正常工作。比如Web应用可能正常运行,但它返回的页面却是错误的内容。负载均衡器能够检测这些情况并立即将客户请求导向到正常的服务器而不需要管理员的干预。

四.CDN推送

CDN推送:当后端服务器中的DNS有更新时,在varnish的缓存中应该及时同步后端服务中的内容
1.在server1中下载httpd服务并编辑配置文件,将136行的端口改为8080
(因为我们的varnish服务已经占用了80端口,避免冲突)

vim /etc/httpd/conf/httpd.conf

 136 Listen 8080

/etc/init.d/httpd restart

2.安装php(显示页面) ,unzip

yum install php -y
yum install unzip -y

3.从已知获取软件安装包bansys.zip,并解压到/var/www/html

在这里插入图片描述

4.编写配置文件

vim config.php
****
 //varnish主机列表
 //可定义多个主机列表
 $var_group1 = array(
                        'host' => array('172.25.12.1'),
                                                'port' => '8080',              
                    );


 //varnish群组定义
 //对主机列表进行绑定
 $VAR_CLUSTER = array(
                         'www.westos.org' => $var_group1,
                     );

****

5.在server1中打开httpd服务,在浏览器中输入172.25.12.1:8080

出现界面

在这里插入图片描述
6.在server1中编写varnish的默认文件

vim /etc/varnish/default.vcl

****
acl westos {
#设置访问控制,即白名单,允许本机和172.25.1网段和推送
        "127.0.0.1";
        "172.25.75.0"/24;
}

sub vcl_recv {
if (req.request == "BAN") {
if (!client.ip ~ westos) {
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
}

****


/etc/init.d/varnish reload

7.测试:
##将之前的pass注释掉

在已显示页面,选择http方式
输入

.*$

在缓存之后,没有清除前
在这里插入图片描述

在清除之后—>
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

完成手动更新

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值