搭建cdn的高性能HTTP加速器Varnish服務器

CND的簡單瞭解:

    內容分發網絡(CDN)是一種新型網絡構建方式,它是爲能在傳統的IP網發佈寬帶豐富媒體而特別優化的網絡覆蓋層;而從廣義的角度,CDN代表了一種基於質量與秩序的網絡服務模式。

        CDN是構建在網絡之上的內容分發網絡,依靠部署在各地的邊緣服務器,通過中心平臺的負載均衡、內容分發、調度等功能模塊,使用戶就近獲取所需內容,降低網絡擁塞,提高用戶訪問響應速度和命中率。CDN的關鍵技術主要有內容存儲和分發技術。

        CDN的基本原理是廣泛採用各種緩存服務器,將這些緩存服務器分佈到用戶訪問相對集中的地區或網絡中,在用戶訪問網站時,利用全局負載技術將用戶的訪問指向距離最近的工作正常的緩存服務器上,由緩存服務器直接響應用戶請求。

        總的來說,內容服務基於緩存服務器,也稱作代理緩存(Surrogate),它位於網絡的邊緣,距用戶僅有"一跳"(Single Hop)之遙。同時,代理緩存是內容提供商源服務器(通常位於CDN服務提供商的數據中心)的一個透明鏡像。這樣的架構使得CDN服務提供商能夠代表他們客戶,即內容供應商,向最終用戶提供儘可能好的體驗,而這些用戶是不能容忍請求響應時間有任何延遲的。


varnishi的基本介紹:

wKiom1eHXJThwCHjAAFzqly4mPc152.png


wKioL1eHXJSCA5-fAACoqVcr6WI951.png

處理過程大致分爲如下幾個步驟:

(1)Receive 狀態,也就是請求處理的入口狀態,根據 VCL 規則判斷該請求應該是 Pass

Pipe,或者進入 Lookup(本地查詢)

(2)Lookup 狀態,進入此狀態後,會在 hash 表中查找數據,若找到,則進入 Hit 狀態,否則進

miss 狀態。

(3)Pass 狀態,在此狀態下,會進入後端請求,即進入 fetch 狀態。

(4)Fetch 狀態, Fetch 狀態下,對請求進行後端的獲取,發送請求,獲得數據,並進行本地

的存儲。

(5)Deliver 狀態, 將獲取到的數據發送給客戶端,然後完成本次請求。



實驗環境:三臺redhat6.5主機

pt1.example.com:172.25.13.1

pt2.example.com172.25.13.2

pt3.example.com172.25.13.3

在這裏pt1.example.com作爲varnish服務器進行緩存

pt2.example.com和pt3.example.com作爲apache服務端



一、cdn高速緩存器varnish服務器的搭建以及配置

在pt1.example.com上面進行如下操作:

1、下載及安裝

Download 安裝包varnish-3.0.5-1.el6.x86_64.rpmvarnish-libs-3.0.5-1.el6.x86_64.rpm

安裝varnish軟件包;

[root@pt1 ~]#yum install -yvarnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm
編輯/etc/sysconfig/varnish文件,主要是爲了改變測試端口,其他參數根據需要改動
[root@pt1 ~]#vim /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80            #改變varnish服務端口
VARNISH_TTL=60              #緩存時間爲60s

2、修改配置文件

編輯/etc/varnish/default.vcl文件

[root@pt1 ~]#vim /etc/varnish/default.vcl
backend default {
 .host = "172.25.13.2";              #主機地址
 .port = "80";                    #服務端口
}

##查看緩存命中情況
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT fromwestos cache";
}
else {
set resp.http.X-Cache = "MISS fromwestos cache";
}
return (deliver);
}

此時訪問172.25.13.1即可看到默認進入的是pt2.example.com的默認發佈頁面

設置的緩存時間爲60s,在第一次訪問後,則一直返回的信息是HIT from westoscache

60s時間過去後,緩存清空,再次是MISS from westos cache信息。



3、手動清除緩存信息,通過varnishadm 手動清除緩存

# varnishadm ban.url .*$                     #清除所有
# varnishadm ban.url /index.html         #清除 index.html 頁面緩存
# varnishadm ban.url /admin/$             #清除 admin 目錄緩存

 

4、定義多個後端服務器(基於不同域名進行訪問)

[root@pt1 ~]#vim /etc/sysconfig/varnish
backend default {
 .host = "172.25.13.2";              #主機地址
 .port = "80";                    #服務端口
}
backend web2 {
 .host = "172.25.13.3";
 .port = "80";
}
 
sub vcl_recv {
       if (req.http.host ~ "^(www.)?pt.com") {                    #匹配請求的域名是否爲wwwNaN.com
                set req.http.host ="wwwNaN.com";
                set req.backend = default;                   
       }
       elsif (req.http.host ~ "^wwwNaN.org") {               #匹配請求的域名是否爲wwwNaN.org
                set req.backend = web2;
       }
       else {error 404 "westos cache";
       }
}

[root@pt1 ~]# /etc/init.d/varnish reload


5、健康檢查以及負載均衡

#健康檢查以及負載均衡
probe healthcheck {
 .url = "/index.html";         #那個url需要varnish請求
 .interval = 5s;                   #檢查間隔爲5s
 .timeout = 1s;                   #等待多長時間探針超時,這裏爲1s
 .window = 5;                           #檢測(維持)5個windows的結果
  .threshold= 3;                  #當windows其中3個成功,就宣佈健康
}
backend default {
 .host = "172.25.13.2";
 .port = "80";
 .probe = healthcheck;               #調用健康檢查
}
backend web2 {
 .host = "172.25.13.3";
 .port = "80";
 .probe = healthcheck;
}
director lb round-robin {
       { .backend = default;}
       { .backend = web2;}
}
sub vcl_recv {
       if (req.http.host ~ "^(www.)?pt.com") {
                set req.http.host ="wwwNaN.com";
                set req.backend = lb;
                return(pass);                 #此處爲了測試,不進行緩存
       }
       elsif (req.http.host ~ "^wwwNaN.org") {
                set req.backend = web2;
       }
       else {error 404 "westos cache";
       }
}

[root@pt1 ~]#/etc/init.d/varnish reload


pt3.example.com上面進行虛擬主機的配置:

[root@pt3 ~]#vim /etc/httpd/conf/httpd.conf
<VirtualHost *:80>
   DocumentRoot /www1
   Serveralias pt.com
   ServerName wwwNaN.com
</VirtualHost>
<VirtualHost *:80>
   DocumentRoot /www2
   ServerName wwwNaN.org
</VirtualHost>


6、測試發現,訪問wwwNaN.compt.com在兩個服務器上進行輪詢

wKiom1eHX4-Cnuk0AAAtMWG_L7A833.png

wKiom1eHX4_QLaCPAAAwa8EQrjM301.png



訪問wwwNaN.org則值訪問pt3.example.om這個服務器;

wKioL1eHX4-yfJB2AAAvqi3_DWc661.png



二、CDN推送平臺的搭建:

修改httpd服務的監聽端口爲:8080  (PS:80端口已經被varnish佔用)

unzip bansys.zip -d /var/www/html/
mv  /var/www/html/bansys/*/var/www/html/
編輯config.php配置文件:
vim config.php
$var_group1 = array(
                        'host' =>array('172.25.13.2'),
                                               'port' => '6082',               
                    );
 //varnish羣組定義
 //對主機列表進行綁定
 $VAR_CLUSTER = array(
                         'wwwNaN.com' =>$var_group1,
                     );
 
 //varnish版本
 //2.x和3.x推送命令不一樣
 $VAR_VERSION = "3";
?>
 
service httpd restart


修改varnish配置文件如下:

bansys 有兩種工作模式,分別是:telnet http 模式。

#telnet模式需要關閉varnish服務管理端口的驗證,註釋掉/etc/sysconfig/varnish文件中的

-S ${VARNISH_SECRET_FILE}”這行,重啓 varnish 服務即可。

#如果是 http 模式需要對 varnish 做以下設置:

# vim /etc/varnish/default.vcl
acl pt {                         #設置訪問控制
"127.0.0.1";
"172.25.13.0"/24;
}
sub vcl_recv {
if (req.request == "BAN") {
if (!client.ip ~ pt) {
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
}
service varnish restart

訪問172.25.13.1:8080界面如下:

wKioL1eHYE3h037wAACLEuCkcbU395.png


以上就是cdn高速緩存器varnish的基本搭建、配置以及測試結果,具體結合實際進行自己的開發以及配置即可以提高速率。

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