CDN(內容分發網絡)的搭建及功能的實現與bansys的推送

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的處理流程

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章