高性能緩存服務器Varnish深刻淺出部署

前言:html

一)什麼是反向代理?
python

反向代理(Reverse Proxy)方式是指以代理服務器來接受internet上的鏈接請求,而後將請求轉發給內部linux

網絡上的服務器,並將從服務器上獲得的結果返回給internet上請求鏈接的客戶端,此時代理服務器對外web

就表現爲一個反向代理服務器。算法

二)在網絡上常見的代理服務器有三種:vim

一、標準的代理緩衝服務器瀏覽器

一個標準的代理緩衝服務被用於緩存靜態的網頁(例如:html文件和圖片文件等)到本地網絡上的一臺主緩存

機上---即代理服務器(傳統代理)服務器

優勢:當被緩存的頁面被第二次訪問的時候,瀏覽器將直接從本地代理服務器那裏請求數據而再也不向原web網絡

站點請求數據。這樣就節省了寶貴的網絡帶寬,並且提升了訪問速度。

缺點:要想實現這種方式,必須在每個內部主機的瀏覽器上明確指明代理服務器的IP地址和端口號。

二、透明代理緩衝服務器

透明代理緩衝服務和標準代理服務器的功能徹底相同。可是,代理操做對客戶端的瀏覽器是透明的(即不

需指明代理服務器的IP和端口)。透明代理服務器阻斷網絡通訊,而且過濾出訪問外部的HTTP(80端口)

流量。若是客戶端的請求在本地有緩衝則將緩衝的數據直接發給用戶,若是在本地沒有緩衝則向遠程web服

務器發出請求,其他操做和標準的代理服務器徹底相同。對於Linux操做系統來講,透明代理使用Iptables

緩存及加速-03單-高性能緩存服務器Varnish.txt[2016/8/19 15:28:24]

或者Ipchains實現。由於不須要對瀏覽器做任何設置,因此,透明代理對於ISP(Internet服務器提供商)

特別有用。

三、反向代理緩衝服務器

反向代理是和前兩種代理徹底不一樣的一種代理服務。使用它能夠下降原始WEB服務器的負載。反向代理服務

器承擔了對原始WEB服務器的靜態頁面的請求,防止原始服務器過載。它位於本地WEB服務器和Internet之

間,處理全部對WEB服務器的請求,阻止了WEB服務器和Internet的直接通訊。若是互聯網用戶請求的頁面

在代理服務器上有緩衝的話,代理服務器直接將緩衝內容發送給用戶。若是沒有緩衝則先向WEB服務器發出

請求,取回數據,本地緩存後再發送給用戶。這種方式經過下降了向WEB服務器的請求數從而下降了WEB服

務器的負載。


1、構建Varnish反向代理

---------Client---------Varnish---------WEB---------

eth0:1.1.1.254     eth0:1.1.1.1     eth1:192.168.1.100

               eth1:192.168.1.1  


依舊採用Centos6系列最小化安裝系統。

二)搭建步驟:

一、關閉防火牆

二、關閉selinux

三、安裝相關插件   

[root@localhost ~]# yum -y install libtool ncurses-devel pcre-devel libxslt 

              pkgconfig groff  這幾個包本地yum源有

[root@localhost ~]# rpm -ivh libedit-2.11-4.20080712cvs.1.el6.x86_64.rpm

[root@localhost ~]# rpm -ivh python-imaging-1.1.6-19.el6.x86_64.rpm

[root@localhost ~]# rpm -ivh python-docutils-0.6-1.el6.noarch.rpm

上述三個包前兩個本地YUM源有,python-docutils須要安裝第三方yum源或者百度搜索這個包吧


[root@localhost ~]# tar -zxvf varnish-4.1.3.tar.gz -C /usr/src/

varnish官網:http://www.varnish-cache.org/


[root@localhost ~]# cd /usr/src/varnish-4.1.3/

[root@localhost varnish-4.1.3]# ./configure --prefix=/usr/local/varnish --enable-debuggingsymbols

[root@localhost varnish-4.1.3]# make && make install

[root@localhost varnish-4.1.3]# ls /usr/local/varnish/

[root@localhost ~]# ln -s /usr/local/varnish/sbin/* /usr/sbin/

[root@localhost ~]# ln -s /usr/local/varnish/bin/* /usr/local/bin/

[root@localhost ~]# cp /usr/local/varnish/share/doc/varnish/example.vcl

/usr/local/varnish/default.vcl

[root@localhost ~]# vim /usr/local/varnish/default.vcl

修改:

backend default {

.host = "192.168.1.100";

.port = "80";

}

[root@localhost ~]# varnishd -f /usr/local/varnish/default.vcl -a 0.0.0.0:80

[root@localhost ~]# netstat -anpt | grep varnish

注意:

中止varnish用下面的命令:

[root@localhost ~]# killall -9 varnishd

四、在WEB服務器

[root@localhost ~]# service httpd restart

[root@localhost ~]# echo "welcome to WEB server" > /var/www/html/index.html

五、綜合驗證:

一、在varnish代理服務器上

[root@localhost ~]# varnishlog

二、在WEB服務器上:

緩存及加速-03單-高性能緩存服務器Varnish.txt[2016/8/19 15:28:24]

[root@localhost ~]# tail -f /etc/httpd/logs/access_log

2、部署Varnish負載均衡高可用羣集

在上面的基礎之上來完成下Varnish負載均衡高可用羣集的部署

------Client---------Varnish-------------WEB1--------WEB2----------

  1.1.1.254     eth0:1.1.1.1 

             eth1:192.168.1.1 192.168.1.100 192.168.1.200

一)部署負載均衡

[root@localhost ~]# vim /usr/local/varnish/default.vcl

修改:

backend web1 {

.host = "192.168.1.100";

.port = "80";

}

backend web2 {

.host = "192.168.1.200";

.port = "80";

}

import directors; //加載directors模塊

緩存及加速-03單-高性能緩存服務器Varnish.txt[2016/8/19 15:28:24]

sub vcl_init {

new bar = directors.round_robin();

bar.add_backend(web1);

bar.add_backend(web2);

}

sub vcl_recv {

set req.backend_hint = bar.backend();

}

[root@localhost ~]# varnishd -C -f /usr/local/varnish/default.vcl //檢查語法

[root@localhost ~]# varnishd -f /usr/local/varnish/default.vcl //啓動

[root@localhost ~]# netstat -anpt | grep varnishd

驗證:

客戶端訪問http://1.1.1.1/,varnish服務器會根據算法分配流量。


二)在實際應用中,當其中一個節點出現故障,實際上varnish服務器沒法訪問故障節點,可是varnish服

務器中有緩存頁面內容,客戶端能夠訪問到相同的頁面內容。沒法實現自動切換,咱們要求實現無縫轉發

流量。

[root@localhost ~]# vim /usr/local/varnish/default.vcl

增長:

backend web1 {

.host = "192.168.1.100";

.port = "80";

.probe = { //開啓健康檢查

.url = "/"; //請求的URL路徑

.interval = 5s; //查詢間隔時間

.timeout = 1s; //超時時間

.window = 5; //滑動窗

緩存及加速-03單-高性能緩存服務器Varnish.txt[2016/8/19 15:28:24]

.threshold = 3; //上次檢查.window數量的多少,

}

}

backend web2 {

.host = "192.168.1.200";

.port = "80";

.probe = {

.url = "/";

.interval = 5s;

.timeout = 1s;

.window = 5;

.threshold = 3;

}

}

......略(其餘保持同樣)......

注意:可能會因爲緩存的緣由,切換會有延遲,我作的時候,延遲有點大,好長時間頁面才切換過來……

[root@localhost ~]# varnishd -C -f /usr/local/varnish/default.vcl //檢查語法

[root@localhost ~]# varnishd -f /usr/local/varnish/default.vcl //啓動

[root@localhost ~]# netstat -anpt | grep varnishd

驗證:

客戶端訪問http://1.1.1.1/,varnish服務器會根據故障實現切換。

相關文章
相關標籤/搜索