企业CDN缓存系统—varnish构建实战(高性能http加速器)

说明:以下主机实验环境selinux状态为disaled,firewalld为关闭状态,处于同一网段(172.25.254.0/24)

1、varnish安装配置

(1)varnish安装
从官网上下载获取到varnish安装包和varnish所依赖的安装包后,直接yum安装
在这里插入图片描述
(2)varnish配置
相关文件

/usr/lib/systemd/system/varnish.service	##启动脚本文件
/etc/ld.so.conf.d/varnish-x86_64.conf	##配置文件
/etc/logrotate.d/varnish	##环境信息
/etc/varnish/default.vcl	##用来编写vcl语法的

在这里插入图片描述
启动脚本文件信息说明和配置更改
1.允许最大可以打开的文件数(系统允许打开的最大文件数是97766,用sysctl -a | grep file查看,和varnish不一致)
可以更改varnish里面的数或者增加内存
2.内存锁定,运行varnish时,需要82M内存空间(系统当前允许的是64,可用ulimit -a命令查看)
3.TasksMax=infinity不限制任务并行数
4.启动的执行脚本 -a开启的端口;-f指定的配置文件;-s做一个内存锁定
默认端口是6081,改为80;-T指定命令行接口的端口,varnish也可以用命令行去管理
在这里插入图片描述
编辑/etc/security/limits.conf文件
在文件末加上以下两行内容,系统允许的可以打开的最大文件数和内存

varnish         -       nofile          131702	##默认打开文件数
varnish         -       memlock         82000	##内存锁定82M

在这里插入图片描述
更改完之后开启varnish服务
在这里插入图片描述
测试:在浏览器上访问本机172.25.254.1,当前服务端上没有任何数据,所以会报503错误
在这里插入图片描述
varnish配置单后端
第一步:编辑/etc/varnish/default.vcl文件,将backend default语句块中内容改写为下图所示,表示在你访问varnish时把你的请求转交给172.25.254.2这台主机(server2)
在这里插入图片描述
在这里插入图片描述
第二步:在server2主机上装httpd服务,编写默认发布页面作为访问标识,启动httpd
在这里插入图片描述
第三步:
测试:当用户访问到varnish这台主机(cdn),它会把请求转交给server2,相当于做了一个反向代理
在这里插入图片描述
在这里插入图片描述

2、varnish查看和清除缓存

varnish查看缓存
编辑/etc/varnish/default.vcl文件,在vcl_deliver语句块中写入以下内容如下图所示,
在这里插入图片描述
代码释义:如果命中缓存了(大于0)返回"HIT from westos cache",表示这个数据是从缓存中读取的;否则,这个数据不是从缓存中读取的,返回"MISS from westos cache",是从后端源服务器中读取的(第一次访问都是这样)
在这里插入图片描述
测试:在物理机上进行
第一次访问时是没有命中缓存的,因为这个数据cdn也没有,当你再次访问,从第二次访问开始数据都是从varnish缓存中读取的
第一次是从源服务器中获取数据的,数据在server2上,server1发现你访问的页面server1上没有,它就去server2上获取,并把数据缓存到自己本机,然后再返回给用户,下次用户再访问时它就直接把自己的数据返回给用户
注意:
这个缓存有固定的清理时间,缓存是有时间限制的,默认是120s清理一次缓存
在这里插入图片描述
varnish清除缓存
手动清理缓存命令

[root@server1 ~]# varnishadm ban req.url "~" /	##清理所有

[root@server1 ~]# varnishadm ban req.url "~" /index.html	##清理index.html页面

[root@server1 ~]# 

清理缓存之后,当你再次访问时返回的就不是命中缓存,而是返回"MISS from westos cache"

3、varnish配置多后端

根据用户请求的不同域名,访问到不同的后端服务器上
在单后端实验基础上再定义一个后端服务器分摊访问请求,
在server3主机上装httpd服务,编写默认发布页面作为访问标识,启动httpd
在这里插入图片描述
编辑/etc/varnish/default.vcl文件,在backend和vcl_recv语句块中写入以下内容如下图所示,重启varnish
在这里插入图片描述
测试:在物理机上进行
curl www.westos.org所获取的数据是web1上的资源,curl bbs.westos.org所获取的数据是web2上的资源
在这里插入图片描述

4、varnish配置负载均衡

负载均衡简意:在上边实验的基础上让这两台服务器轮循的接受请求
编辑/etc/varnish/default.vcl文件,需要导入调度器模块,写入以下内容如下图所示,重启varnish

vcl 4.1;
import directors from "/usr/lib64/varnish/vmods/libvmod_directors.so";	##导入调度器模块
backend web1 {
    .host = "172.25.254.2";
    .port = "80";
}

backend web2 {
    .host = "172.25.254.3";
    .port = "80";
}

##在web1和web2之间实现负载均衡
sub vcl_init {	
        new lb = directors.round_robin();	##轮循的负载均衡模式
        lb.add_backend(web1);
        lb.add_backend(web2);
}

sub vcl_recv {
        if (req.http.host ~ "^(www.)?westos.org") {
        set req.http.host = "www.westos.org";
        set req.backend_hint = lb.backend();	##访问web1时去轮循web2
        return (pass);	##所有信息不缓存,也可以手动的去清理缓存
} elsif (req.http.host ~ "^bbs.westos.org"){
        set req.backend_hint = web2;	##访问web2时不负载均衡
        } else {
                return (synth(405));
        }
}

在这里插入图片描述
测试:
curl www.westos.org,访问此域名时,负载均衡(轮循)
curl bbs.westos.org,访问此域名时,没有负载均衡,只有web2(server3)提供资源
在这里插入图片描述

5、varnish统一推送平台构建

推送平台的配置(图形化界面清理缓存)
首先添加一个访问控制列表,然后再去添加一个缓存的清除策略
server1作varnish的节点,server2和server3作为apache服务的提供节点
推送平台是要在varnish节点配置,配置推送平台的目的是为了更方便的进行缓存的清除,批量对我们主机进行缓存清除
实验:
在server1主机上安装httpd、php和unzip安装包
在这里插入图片描述
获取推送页面的软件包
在这里插入图片描述
解压到apache目录下
在这里插入图片描述
统一平台推送的配置
vim /var/www/html/config.php,改ip为varnish主机ip,apache端口为8080(因为80端口被varnish占用)
域名改为www.westos.org(对此域名的数据进行缓存处理)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
varnish配置
设置代理服务器的权限列表:主机本身和172.25.254.0/24网段的主机都有权限清理代理服务器上的缓存
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

acl westos {
"127.0.0.1";
"172.25.254.0"/24;
}
sub vcl_recv {
        if (req.http.host ~ "^(www.)?westos.org") {
        set req.http.host = "www.westos.org";
        set req.backend_hint = lb.backend();
#       return (pass);	##注释掉,辞行代码会一直清除缓存,若生效,影响此试验效果
} elsif (req.http.host ~ "^bbs.westos.org"){
        set req.backend_hint = web2;
        } else {
                return (synth(405));
        }
        if (req.method == "BAN") {	##此语句块是用来和php进行通信的
                if (!client.ip ~ westos) {
                        return(synth(405,"Not allowed"));
                }
        ban("req.url ~ " + req.url);	##表示清除缓存,首先判断
                return(purge);
        }
}

在物理机上测试
.*清除所有缓存
/index.html指定清除哪个缓存
在这里插入图片描述
在这里插入图片描述
已经缓存,在推送成功后,用户再访问时,未命中,不是从缓存中获取的数据
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值