part_67:cdn---Varnish

CDN 基础知识

CDN (Content Delivery Network)主要是实现负载均衡和代理缓存,减少服务器压力。CDN是构建在网络之上的内容分发网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。
优点:CDN能几乎涵盖国内所有线路。而在可靠性上, CDN 在结构上实现了多点的冗余,即使某一个节点由于意外发生故障,对网站的访问能够被自动导向其他的健康节点进行响应。CDN能轻松实现网站的全国铺设,不必考虑服务器的投入与托管、不必考虑新增带宽的成本、不必考虑多台服务器的镜像同步、不必考虑更多的管理维护技术人员。
之前cdn方面接触过squid,但是与varnish相比,其还有很多缺点,现基本不再应用squid,所以我们本次实验用的是varnish
Varnish与Squid的对比 Squid是一个高性能的代理缓存服务器,它和varnish之间有诸多的异同点。

  • 相同点: 1. 都是一个反向代理服务器。 2. 都是开源软件。
  • 不同点:
    Varnish的优点:
  • Varnish的稳定性很高,两者在完成相同负荷的工作时,Squid服务器发生故障的几率要高于Varnish,因为使用Squid要经常重启。
  • Varnish访问速度更快,所有缓存数据都直接从内存读取,而squid是从硬盘读取
  • Varnish可以支持更多的并发连接,因为Varnish的TCP连接释放要比Squid快。因而在高并发连接情况下可以支持更多TCP连接。
  • Varnish可以通过管理端口,使用正则表达式批量的清除部分缓存,而Squid是做不到的。

Vaenish 工作原理

Varnish 是一款高性能的开源HTTP加速器,具有反响代理,高速缓存的功能
在这里插入图片描述
VCL(Vanish Configuration Language) 处理流程图
在这里插入图片描述
处理过程大致分为如下几个步骤:

  • Receive 状态,也就是请求处理的入口状态,根据 VCL 规则判断该请求应该是 Pass 或
    Pipe,或者进入 Lookup(本地查询)。
  • Lookup 状态,进入此状态后,会在 hash 表中查找数据,若找到,则进入 Hit 状态,否则进
    入 miss 状态。
  • Pass 状态,在此状态下,会进入后端请求,即进入 fetch 状态。
  • Fetch 状态,在 Fetch 状态下,对请求进行后端的获取,发送请求,获得数据,并进行本地
    的存储。
  • Deliver 状态, 将获取到的数据发送给客户端,然后完成本次请求。

实验环境

主机名 IP
server1 172.25.60.1
server2 172.25.60.2
server3 172.25.60.3

1、单个后端服务器

  • server1
  • 安装Varnish,并开启:
    在这里插入图片描述
    yum install varnish-libs-3.0.5-1.el6.x86_64.rpm
    yum install varnish-3.0.5-1.el6.x86_64.rpm
    /etc/init.d/varnish start
  • 查看已安装的varnish的配置文件 :rpm -qc varnish-3.0.5-1.el6.x86_64
    在这里插入图片描述
  • varnish配置文件信息:vim /etc/sysconfig/varnish
NFILES=131072     # 最多能打开的文件数,varnish会自动调整该值
MEMLOCK=82000   # 最多能使用的内存空间,varnish会自动调整该值
NPROCS="unlimited"  # 单个用户所能运行的最大线程数
VARNISH_LISTEN_PORT=80  #修稿端口
  • 查看能打开文件的系统参数: sysctl -a | grep file
    在这里插入图片描述
  • 查看系统能运行的线程数:ulimit -l
    在这里插入图片描述
    因为varnish这个程序运行在varnish这个用户的私有空间内,内核对普通用户限制的最大文件数为1024.对varnish用户限制的最大文件数为131072,我们需要满足131072这个最大值。
  • 更改系统内存大小:
    在这里插入图片描述
  • 修改varnish用户的限制文件:vim /etc/security/limits.conf
    在最后加入:
vanish          -       nofile          131072
vanish          -       memlock         82000
vanish          -       nproc           unlimited
  • 配置文件一个后端服务器和查看缓存命中情况 :vim /etc/sysconfig/varnish/default.vcl
  1. 在varnish中命中HIT访问的域名
  2. 后端服务器中得到MISS访问的域名
    在这里插入图片描述 - 开启服务,编写配置文件后要重新加载默认文件: /etc/init.d/varnish reload
[root@server1 ~]# /etc/init.d/varnish start
Starting Varnish Cache:                                    [  OK  ]
[root@server1 ~]# /etc/init.d/varnish reload 

在这里插入图片描述
ps ax | grep varnish
在这里插入图片描述
cat /proc/1060/status
在这里插入图片描述

  • server2
  • 安装apache
  • 编写前端文件:vim /var/www/html/index.html
hello,i am server_2
  • 开启httpd服务:/etc/init.d/httpd start
    在这里插入图片描述
  • 测试:在物理机上测试:curl -I 172.25.60.1curl -I 172.25.60.1/index.html
  • 第一次显示MISS:MISS from westos cache
    在这里插入图片描述
  • 第二次显示HIT:HIT from westos cache
    在这里插入图片描述
    在服务端清除缓存
varnishadm ban.url .*$
varnishadm ban.url /index.html
  • 又变为MISS
    在这里插入图片描述

2、多个后端服务器

  • server2的配置同上
  • server3配置:
  • - 安装apache
  • 编写前端文件:vim /var/www/html/index.html
hello,i am server_3
  • 开启httpd服务:/etc/init.d/httpd start
  • server1
  • 开启varnish:/etc/init.d/varnish start
  • 配置varnish的default文件
backend web1 {   ##后端第一个服务器名web1
  .host = "172.25.60.2";     ##将server2  作为第一个服务器主机
  .port = "80";
}
backend web2{    ##后端第二个服务器名web2
  .host = "172.25.60.3";  ##将server3  作为第二个服务器主机
  .port = "80";
}

sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") { 
set req.http.host = "www.westos.org";
set req.backend = web1; 
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache"; 
}   
}   
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
}
  • 编辑完配置文件后,要重新加载配置文件/etc/init.d/varnish reload
    在这里插入图片描述
  • 测试
  • 在测试端添加解析文件 vim /etc/hosts
172.25.60.1   server1 www.westos.org bbs.westos.org
172.25.60.3   server3

  • 物理机中访问测试
    在这里插入图片描述

3、Varnishi 实现负载均衡

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

  • 在server1 的 Varnish采用轮循法,平衡对待每一个后端服务器。
  • 配置varnish的default文件
backend web1 {
  .host = "172.25.60.2";
  .port = "80";
}
backend web2{
  .host = "172.25.60.3";
  .port = "80";
}
director lb round-robin {
{.backend = web1;}
{.backend = web2;}
}

sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = lb;   ###调用lb轮循函数
return(pass);    ##不进行缓存
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}
  • 编辑完配置文件后要重新加载
  • 测试端
    在这里插入图片描述

4、一台主机多个解析的情况

  • server3
  • 在server3的httpd默认发布目录中设置两个发布目录,并把80端口注释的打开
    在这里插入图片描述
  • 在设置的两个发布目录下,编辑两个测试页面
    在这里插入图片描述
  • 重启httpd服务
  • 测试端
    在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_42311209/article/details/89328330
今日推荐