前言: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服務器會根據故障實現切換。