1. 程式人生 > >varnish實現web加速緩存

varnish實現web加速緩存

def 最大 squid rpm包 輸入 sysconfig rand receive 技術

一.Varnish簡述

varnish是一款高性能且開源的方向代理服務器和HTTP加速器,它的開發者poul-Henning kamp是FreeBSD 核心的開發人員之一。varnish采用全新的軟件體系機構,和現在的硬件體系配合緊密,varnish是一個輕量級的cache和反向代理軟件。先進的設計理念和成熟的設計框架是varnish的主要特點。挪威最大的在線報紙 Verdens Gang 使用3臺Varnish服務器 代替了原來的12臺Squid服務器,結果性能比以前更好。

二.varnish的特點

1、基於內存進行緩存,重啟後數據將消失。

2、利用虛擬內存方式,I\O性能好。

3、支持設置0~60秒的精確緩存時間。

4、VCL配置管理比較靈活。

5、具有強大的管理功能,例如top、stat、admin、list 等。

6、狀態機設計巧妙、結構清晰。

7、利用二叉堆管理緩存文件,可達到積極刪除目的。

三.varnish處理緩存的過程

(1)Receive 狀態,也就是請求處理的入口狀態,根據 VCL 規則判斷該請求應該是 Pass 或 Pipe,或者進入 Lookup(本地查詢)。

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

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

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

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

四.varnih的使用

實驗所需環境:三臺配置好網絡的虛擬機,分別設置主機名為server1、server2、server3

1.安裝服務

在server1中打開官網,下載rpm包進行安裝

yum install varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm -y

2.配置服務

編輯系統配置文件,文件的參數需要根據實際的系統內核及系統還有相關硬件設定

vim /etc/security/limits.conf
寫入:
varnish          -     nofile      6555       ##最大文件數
varnish          -     memlock     82000      ##最大內存空間
varnish          -     nproc       unlimited  ##子線程數

編輯服務配置文件

技術分享圖片
vim /etc/sysconfig/varnish      ##varnish的配置文件,配置 varnish 服務端口
VARNISH_LISTEN_PORT=80       ##varnish監聽端口
vim /etc/varnish/default.vcl ##配置一個後端服務器,緩存配置 backend default { .host = "172.25.3.2";      ##host指定要緩存的後端服務器地址 .port = "80"; }
技術分享圖片

3.啟動服務

/etc/init.d/varnish start

4.測試

在server2中配置好http服務,並編寫一個網頁文件index.html,內容任意

在真機中打開瀏覽器輸入server1的IP地址,可以看到server2中的發布頁面內容

5.查看緩存命中情況

在varnish服務器上

技術分享圖片
vim default.vcl 
12 sub vcl_deliver {
13 if (obj.hits > 0) {
14 set resp.http.X-Cache = "HIT from westos cache";    #命中顯示
15 }
16 else {
17 set resp.http.X-Cache = "MISS from westos cache";    ##沒命中顯示
18 }
19 return (deliver);
20 }
/etc/init.d/varnish reload   #varnish支持熱插拔
技術分享圖片

6.清除緩存

varnishadm ban.url .*$       ##清除所有

varnishadm ban.url /index.html   ##清除 index.html 頁面緩存

varnishadm ban.url /admin/$   清除 admin 目錄緩存

五.varnish的擴展使用

1多個不同域名對應後端服務器

在varnish服務器上

技術分享圖片
vim default.vc 
backend web1 {
.host = "172.25.3.2";
.port = "80";
}

backend web2 {
.host = "172.25.3.3";
.port = "80";
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") { #當域名為以www.westso.org開頭或westos.org時去web1主機緩存
set req.http.host = "www.westos.org";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.westos.org") { #當域名以bbs.westos.org開頭 時去web2主機緩存
set req.backend = web2;
} else {error 404 "westos cache";
}
}
/etc/init.d/varnish reload   ###重新加載
技術分享圖片

2負載均衡

VCL文件中可以把多個 backends 聚合成一個組,這些組被叫做 director,當組裏一個 backend 掛掉後,可以選擇另一個健康的 backend。VCL 有多種 director,不同的 director 采用不同的算法選擇 backend,主要有以下幾種: ..Random director 會根據所設置的權值(weight)來選擇 backend,.retries 參數表示嘗試找到一個 backend 的最大次數,.weight 參數表示權值 ..Round-robin director 在選擇 backend 時,會采用循環的方式依次選擇。

在server3中配置好http服務器,並建立兩個apache虛擬主機,註意不同的虛擬機的發布目錄不能設置為同一個目錄

技術分享圖片
vim /etc/httpd/conf/httpd.conf #配置虛擬主機
NameVirtualHost *:80       ##去掉該行的註釋

<VirtualHost *:80>
DocumentRoot /var/www/html
ServerName www.westos.org
</VirtualHost>

<VirtualHost *:80>
DocumentRoot /www
ServerName bbs.westos.org
</VirtualHost>
技術分享圖片

在server1中

技術分享圖片
vim default.vc #這裏用round-robin做實驗
backend web1 {
.host = "172.25.3.2";
.port = "80";
}

backend web2 {
.host = "172.25.3.3";
.port = "80";
}
director westos round-robin { #建立一個名為lb的組,實現web1和web2之間的輪詢
{ .backend = web1; }
{ .backend = web2; }
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") { #當客戶端搜索符合條件的域名時,用westos組實現輪詢
set req.http.host = "www.westos.org";
set req.backend = westos;
return (pass);  
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {error 404 "westos cache";
}
}

/etc.init.d/varnish reload

varnish實現web加速緩存