varnish

Varnish
工作原理
Varnish是一款高性能的開源HTTP加速器,Varnish的功能與Squid服務器相似,都可以用來做HTTP緩存。
Squid是從硬盤讀取緩存的數據,而Varnish把數據存放在內存中,直接從讀取內存,避免了頻繁在內存、磁盤中交換文件,所以Varnish要相對更高效,但也有缺點,內存中的緩存在服務器重啓後會丟失。
Varnish實驗環境
主機環境:rhel6.5 iptables andselinux are disabled
實驗主機: 172.25.40.1 server1.example.com varnish
172.25.40.2 server2.example.com apache
172.25.40.3 server3.example.com apache

varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm bansys.zip
Varnish工作流程:
varnish

VCL處理流程:
處理過程大致分爲如下幾個步驟:
(1)Receive 狀態,也就是請求處理的入口狀態,根據 VCL 規則判斷該請求應該是 Pass 或
Pipe,或者進入 Lookup(本地查詢)。
(2)Lookup 狀態,進入此狀態後,會在 hash 表中查找數據,若找到,則進入 Hit 狀態,否則進
入 miss 狀態。
(3)Pass 狀態,在此狀態下,會進入後端請求,即進入 fetch 狀態。
(4)Fetch 狀態,在 Fetch 狀態下,對請求進行後端的獲取,發送請求,獲得數據,並進行本地
的存儲。
(5)Deliver 狀態, 將獲取到的數據發送給客戶端,然後完成本次請求。
varnish
Varnish安裝配置:
Server1:
安裝:
yum install -y varnish-3.0.5-1.el6.x86_64.rpm varnish-libs-3.0.5-1.el6.x86_64.rpm
配置:
vim /etc/varnish/default.vcl
配置一個後端服務器

backend web1 {
  .host = "172.25.40.2";  
  .port = "80";
}

配置 varnish 服務端口

VARNISH_LISTEN_PORT=80  爲方便起見,這裏將監聽端口改爲80
開啓服務

/etc/init.d/varnish start
通過varnish手動清除緩存

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

定義多個不同域名站點的後端服務器

backend web1 {
  .host = "172.25.40.2";
  .port = "80";
}

backend web2 {
  .host = "172.25.40.3";
  .port = "80";
}

#當訪問 www.westos.org 域名時從 web1 上取數據,訪問 bbs.westos.org 域名時到 web2 取數據,訪問其他頁面報錯。

sub vcl_recv {

        if (req.http.host ~ "^(www.)?westos.org") {
                set req.http.host = "www.westos.org";
                set req.backend = web1;
                set req.backend = lb;
        } elsif (req.http.host ~ "^bbs.westos.org") {
                set req.backend = web2;
                } else {error 404 "westos cache";
        }
}

重新加載
/etc/init.d/varnish reload
注意:
測試時,需要開啓apache服務並且注意關閉iptables,在需要測試的瀏覽器所在主機添加本地解析(/etc/hosts),在瀏覽器訪問域名進行測試。

定義負載均衡

director lb round-robin {#把多個後端聚合爲一個組,並檢測後端健康狀況
{ .backend = web1; }
{ .backend = web2; }
}

sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = lb;
return (pass);    #爲了測試方便,不進行緩存。
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = web2;
} else {
error 404 "westos cache";
}
}
重新加載
/etc/init.d/varnish reload

varnish cdn 推送平臺
需要安裝 php 支持

yum install unzip httpd php -y
unzip bansys.zip -d /var/www/html
vim /var/www/html/config.php
$var_group1 = array(
                        'host' => array('172.25.40.1'),
                                                'port' => '80',                             );
$VAR_CLUSTER = array(
                         'www.westos.org' => $var_group1,
                                             'bbs.westos.org' => $var_group1,
                     );

varnish

bansys 有兩種工作模式,分別是:telnet 和 http 模式。
#telnet 模式需要關閉 varnish 服務管理端口的驗證,註釋/etc/sysconfig/varnish 文件中的“-S $ {VARNISH_SECRET_FILE}”這行,重啓 varnish 服務即可。
#如果是 http 模式需要對 varnish 做以下設置:

acl westos {
        "127.0.0.1";
        "172.25.40.0"/24;
}
sub vcl_recv {
if (req.request == "BAN") {
if (!client.ip ~ westos) {
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
}

重新加載
/etc/init.d/varnish reload
注意:在開啓httpd時,會出現衝突,在前面配置時,我們將varnish監聽端口改爲了80,和httpd服務開啓時默認監聽端口爲80因此會出現衝突,我們需將httpd配置文件(/etc/http/conf/httpd.conf)中監聽端口改爲8080.
測試頁面:
varnish

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