Linux中如何用varnish實現web加速緩存

一.Varnish簡述html

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

二.varnish的特色算法

一、基於內存進行緩存,重啓後數據將消失。apache

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

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

四、VCL配置管理比較靈活。瀏覽器

五、具備強大的管理功能,例如top、stat、admin、list 等。緩存

六、狀態機設計巧妙、結構清晰。服務器

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

三.varnish處理緩存的過程

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

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

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

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

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

 

四.varnih的使用

實驗所需環境:三臺配置好網絡的虛擬機,分別設置主機名爲server一、server二、server3

1.安裝服務

在server1中打開官網,下載rpm包進行安裝,在這裏我使用的是3.05版本,最新版本下載地址:

http://varnish-cache.org/releases/

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

2.配置服務

(1)編輯系統資源配置文件,具體設定的參數須要根據內核及硬件設備狀況進行調整

vim /etc/security/limits.conf 寫入: varnish - nofile 6555       ##用戶能夠打開的最大文件描述符數量,默認爲1024,這裏的數值會限制tcp鏈接 varnish - memlock 82000 ##用戶最大可鎖定內存空間 varnish - nproc unlimited ##子線程數

注:-表示同時設置soft值和hard值,soft爲軟限制,超過該值會警告但依然能夠超過,hard爲硬限制,超過會直接報錯沒法超過

 

(2)編輯服務配置文件

複製代碼
vim /etc/sysconfig/varnish VARNISH_LISTEN_PORT=80     ##設定varnish的監聽端口爲80
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
相關文章
相關標籤/搜索