CDN(内容分发网络)的搭建及功能的实现与bansys的推送

本文介绍了CDN的工作原理,并详细阐述了如何使用varnish搭建CDN,包括varnish的安装、系统配置、配置文件编辑和命令行管理。同时,文章还讲解了CDN的反向代理、缓存、负载均衡功能的实现,以及通过bansys进行CDN内容推送的方法。

1. CDN的介绍

CDN的全称是Content Delivery Network,即内容分发网络。CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。CDN的关键技术主要有内容存储和分发技术。

CDN网络中包含的功能实体包括内容缓存设备、内容交换机、内容路由器、CDN内容管理系统等组成。内容服务基于缓存服务器,也称作代理缓存。包括分布式存储、负载均衡、网络请求的重定向和内容管理4个要件。


2. CDN的实现

实验环境:

在servera作为CDN
在所有试验机中需要关闭火墙,selinux,NetworkManager 避免影响

[root@serverc ~]# systemctl stop NetworkManager
[root@serverc ~]# systemctl disable NetworkManager

[root@serverc ~]# systemctl stop firewalld.service 
[root@serverc ~]# systemctl disable firewalld.service 

[root@serverc ~]#  vim /etc/sysconfig/selinux ##关闭selinux

在serverb上作为CDN转交请求的对象
安装httpd
在这里插入图片描述


在serverc上作为CDN转交请求的对象
安装httpd
在这里插入图片描述


在rhel7主机充当用户访问
在这里插入图片描述


2.1 varnish的安装

Varnish是一款高性能的开源HTTP加速器
在这里插入图片描述


2.2 使系统与varnish匹配

1.修改varnish的启动脚本中的端口号

vim /usr/lib/systemd/system/varnish.service
在这里插入图片描述
在这里插入图片描述

2.检查系统允许的最大文件数和内存

注意:检查系统允许打开的最大文件数和内存需要大于varnish中允许端最大文件数。
sysctl -a | grep file
在这里插入图片描述
如果系统允许的最大文件数少于varnish中的最大文件数可以通过给系统增加内存的方式。


ulimit -a
在这里插入图片描述


3.使系统允许varnish需要的运行内存和最大文件数

vim /etc/security/limits.conf
在这里插入图片描述


4.varnish的启动

systemctl start varnish 启动varnish
netstat -ntlp 检查端口是否打开
在这里插入图片描述
在这里插入图片描述


2.3 varnish的配置文件

varnish的配置文件——/etc/varnish/default.vcl

[root@servera ~]# rpm -qa | grep vanish
[root@servera ~]# rpm -qa | grep varnish
varnish-6.4.0-1.el7.x86_64
[root@servera ~]# rpm -qc varnish-6.4.0-1.el7.x86_64
/etc/ld.so.conf.d/varnish-x86_64.conf
/etc/logrotate.d/varnish
/etc/varnish/default.vcl

在这里插入图片描述


2.4 varnish的命令行管理

varnishadm
在这里插入图片描述


3.CDN的功能

3.1实现CDN的反向代理功能(内容转发)

vim /etc/varnish/default.vcl修改CDN配置文件

# 4.0 or 4.1 syntax.
vcl 4.1;

# Default backend definition. Set this to point to your content server.
backend default {
    .host = "192.168.43.20";
    .port = "80";
}

systemctl restart varnish
在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述
反向代理服务器位于用户与目标服务器之间,但是对于用户而言,反向代理服务器就相当于目标服务器,即用户直接访问反向代理服务器就可以获得目标服务器的资源。同时,用户不需要知道目标服务器的地址,也无须在用户端作任何设定。反向代理服务器通常可用来作为Web加速,即使用反向代理作为Web服务器的前置机来降低网络和服务器的负载,提高访问效率。

注意:开启varnish后有两个进程
在这里插入图片描述


3.2实现CDN缓存内容

1.实现缓存功能

vim /etc/varnish/default.vcl修改CDN配置文件

vcl 4.1;

# Default backend definition. Set this to point to your content server.
backend default {
    .host = "192.168.43.20";
    .port = "80";
}

sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from CDN cache";
}
else {
set resp.http.X-Cache = "MISS from CDN cache";
}
return (deliver);
}

在这里插入图片描述


2.手动清理缓存

如果访问目标更新,可以手动清除缓存
varnishadm ban req.url "~" /清空所有缓存
在这里插入图片描述
在这里插入图片描述


varnishadm ban req.url "~" /index.html清空发布页面的缓存
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


3.3实现CDN负载均衡的功能

1.请求不同域名(同一IP),分配不同后端

CDN(servera)把请求均分到后端(serverb和serverc)

vcl 4.1;

    .host = "192.168.43.20";
    .port = "80";
}
backend serverc {
    .host = "192.168.43.30";
    .port = "80";
}

ub vcl_recv {
        if (req.http.hosts ~ "^(www.)?red.com"){
                set req.http.host = "www.red.com";
                set req.backend_hint = web1;
        }
        elsif (req.http.host ~ "^bbs.red.com"){
                set req.backend_hint = web2;
        }
        else {
                return (synth(405));
        }
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试:在这里插入图片描述


2.负载均衡,轮循请求

serverb与serverc轮循被访问,实现负载均衡
实现负载均衡需要导入vmod_directors模块
man vcl 可查看vcl的语法
man vmod_directors 查看模块的导入
在这里插入图片描述

调度器的模块:/usr/lib64/varnish/vmods/libvmod_directors.so
在这里插入图片描述

vcl 4.1;
import directors from "/usr/lib64/varnish/vmods/libvmod_directors.so";

backend web1 {
    .host = "192.168.43.20";
    .port = "80";
}
backend web2 {
    .host = "192.168.43.30";
    .port = "80";
}

sub vcl_init {
     new lb = directors.round_robin();
     lb.add_backend(web1);
     lb.add_backend(web2);
}

sub vcl_recv {
        if (req.http.host ~ "^(www.)?red.com"){
                set req.http.host = "www.red.com";
                set req.backend_hint = lb.backend();
                #return (pass);
        }
        elsif (req.http.host ~ "^bbs.red.com"){
                set req.backend_hint = web2;
        }
        else {
                return (synth(405));
        }
}

sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from CDN cache";
}
else {
set resp.http.X-Cache = "MISS from CDN cache";
}
return (deliver);
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
测试:
在这里插入图片描述
在这里插入图片描述


3.4 bansys实现CDN推送

我们在实现CDN高速缓存时有些时候通过命令等对CDN的管理有些麻烦,我们就可以使用CDN推送的方法同步后端服务内容

1.在CDN服务器安装httpd、php

在这里插入图片描述

2.在bansys配置文件中设定主机并绑定

在这里插入图片描述
在这里插入图片描述
vim config.php

<?php

 //varnish主机列表
 //可定义多个主机列表
 $var_group1 = array(
                        'host' => array('192.168.43.10'),
                                                'port' => '8080',
                    );
                    
 //varnish群组定义
 //对主机列表进行绑定
 $VAR_CLUSTER = array(
                         'www.red.com' => $var_group1,
                     );
                     
 //varnish版本
 //2.x和3.x推送命令不一样
 $VAR_VERSION = "3";
 
?>

在这里插入图片描述


vim /etc/httpd/conf/httpd.conf
在这里插入图片描述


vim /etc/varnish/default.vcl

vcl 4.1;
import directors from "/usr/lib64/varnish/vmods/libvmod_directors.so";

acl red {
    "127.0.0.1";##本机IP
    "192.168.43.0"/24; ##允许访问的IP
}

backend web1 {
    .host = "192.168.43.20";
    .port = "80";
}
backend web2 {
    .host = "192.168.43.30";
    .port = "80";
}

sub vcl_init {
     new lb = directors.round_robin();
     lb.add_backend(web1);
     lb.add_backend(web2);
}

sub vcl_recv {
        if (req.method == "BAN"){ ##清除缓存
                if(!client.ip ~ red){
                        return (synth(405,"Not allow"));
                }
                ban("req.url ~"+ req.url);
                return (purge)
}
        if (req.http.host ~ "^(www.)?red.com"){
                set req.http.host = "www.red.com";
                set req.backend_hint = lb.backend();               
        }
        elsif (req.http.host ~ "^bbs.red.com"){
                set req.backend_hint = web2;
        }
        else {
                return (synth(405));
        }
}

sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from CDN cache";
}
else {
set resp.http.X-Cache = "MISS from CDN cache";
}
return (deliver);
}

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


测试:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


3.5 varnish的处理流程

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值