準備工作
準備一臺本機作爲測試機,三臺虛擬機:
server1:172.25.24.1
server2:172.25.24.2
server3:172.25.24.3
作爲服務器
1.配置反向代理
VCL處理
處理過程大致分爲如下幾個步驟:
(1)Receive 狀態,也就是請求處理的入口狀態,根據 VCL 規則判斷該請求應該是 Pass 或
Pipe,或者進入 Lookup(本地查詢)。
(2)Lookup 狀態,進入此狀態後,會在 hash 表中查找數據,若找到,則進入 Hit 狀態,否則進
入 miss 狀態。
(3)Pass 狀態,在此狀態下,會進入後端請求,即進入 fetch 狀態。
(4)Fetch 狀態,在 Fetch 狀態下,對請求進行後端的獲取,發送請求,獲得數據,並進行本地
的存儲。
(5)Deliver 狀態, 將獲取到的數據發送給客戶端,然後完成本次請求。
在代理服務器server1上
##安裝varnish軟件包
yum install varnish-3.0.5-l.e16.x86_64.rpm varnish-libs-3.0.5-l.e16.x86_64.rpm
##查看varnish配置文件,查看其工作環境
vim /etc/sysconfig/varnish
##向系統聲明varnish所需的工作環境
vim /etc/security/limits.conf
varnish - nofile 131072
varnish - memlock 82000
varnish - nproc unlimited
##配置varnish服務
vim /etc/varnish/default.vcl
backend default {
.host = "172.25.24.2"; ##指定默認後臺服務器爲172.25.24.2
.port = "80"; ##指定連接端口爲80
}
##配置varnish服務端口
vim /etc/sysconfig/varnish
VARNISH_LISTEN_PORT=80 ##第66行,修改端口爲80
/etc/init.d/varnish restart ##重啓varnish服務
在默認後臺服務器server2上
##下載httpd服務並設置默認發佈頁內容爲server2
yum install httpd -y
vim /var/www/html/index.html
server2:www.westos.org
/etc/init.d/httpd start
在測試機上:
##當我們訪問172.25.24.1時,看到的是server2的網頁,說明實驗成功
[root@foundation24 ~]# curl 172.25.24.1
server2:www.westos.org
2.查看緩存命中的情況
在代理服務器server1上
vim /etc/varnish/default.vcl
sub vcl_deliver {
if (obj.hits>0){
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X0Cache = "MISS from westos cache";
}
return (deliver);
}
/etc/init.d/varnish reload
##緩存的刷新:
varnishadm ban.url .*$ ##清除所有
varnishadm ban.url /index.html ##清除index.html網頁緩存
varnishadm ban.url /admin/$ ##清除admin目錄緩存
測試:
在測試機上
##可以從X0Cache:欄看出緩存情況
##X0Cache: MISS from westos cache 說明沒有緩存
##X-Cache: HIT from westos cache 說明數據來源來自緩存
curl -I 172.25.24.1
##先在代理服務器上清楚緩存
curl -I 172.25.24.1/index.html
3.定義不同站點的後端服務器
通過域名反向代理會把你帶到不同的後端服務器
在代理服務器上
vim /etc/varnish/default.vcl
backend web1 {
.host = "172.25.24.2";
.port = "80";
}
backend web2 {
.host = "172.25.24.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;
}elsif (req.http.host ~"^bbs.westos.org"){
set req.backend = web2;
}else {
error 404 "error";
}
}
/etc/init.d/varnish reload
在後臺服務器server3上
yum install httpd -y
vim /var/www/html/index.html
server3:bbs.westos.com
在測試端:
##配置本地解析
[root@foundation24 ~]# vim /etc/hosts
172.25.24.1 server1 www.westos.org bbs.westos.org westos.org
##通過域名反向代理會把你帶到不同的後端服務器
[root@foundation24 ~]# curl westos.org
server2:www.westos.com
[root@foundation24 ~]# curl bbs.westos.org
server3:bbs.westos.com
4.負載均衡配置:
1)什麼是負載均衡:
負載均衡(Load Balance)其意思就是分攤到多個操作單元上進行執行,例如Web服務器、FTP服務器、企業關鍵應用服務器和其它關鍵任務服務器等,從而共同完成工作任務。
2)負載均衡的作用:
(1)解決併發壓力,提高應用處理性能(增加吞吐量,加強網絡處理能力);
(2)提供故障轉移,實現高可用;
(3)通過添加或減少服務器數量,提供網站伸縮性(擴展性);
(4)安全防護;(負載均衡設備上做一些過濾,黑白名單等處理)
3)負載均衡的搭建
在代理服務器上
[root@server1 varnish]# vim /etc/varnish/default.vcl
backend web1 {
.host = "172.25.24.2";
.port = "80";
}
backend web2 {
.host = "172.25.24.3";
.port = "80";
}
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 "error";
}
}
在server3服務器上
##配置兩臺httpd虛擬主機並分別設置兩臺虛擬主機默認發佈頁面信息
[root@server3 html]# mkdir /www
[root@server3 html]# cd
[root@server3 ~]# cd /www/
[root@server3 www]# vim index.html
server3:www.westos.org
[root@server3 www]# mkdir /bbs
[root@server3 www]# cd /bbs/
[root@server3 bbs]# vim index.html
server3:bbs.westos.org
##開啓httpd虛擬主機功能
[root@server3 bbs]# vim /etc/httpd/conf/httpd.conf
990 NameVirtualHost *:80 ##開啓虛擬主機
1003 <VirtualHost *:80>
1004 DocumentRoot /www
1005 ServerName www.westos.org
1006 </VirtualHost>
1007 <VirtualHost *:80>
1008 DocumentRoot /bbs
1009 ServerName bbs.westos.org
1010 </VirtualHost>
[root@server3 bbs]# /etc/init.d/httpd restart
在測試機上:
##訪問www.westos.org網頁可以看到訪問的服務器是在server2與server3循環輪換的
[root@foundation24 ~]# curl www.westos.org
server2:www.westos.org
[root@foundation24 ~]# curl www.westos.org
server3:www.westos.org
[root@foundation24 ~]# curl bbs.westos.org
server3:bbs.westos.org
5.varnish cdn 推送平臺
在代理服務器server1上:
##下載php,uzip,http服務並將推送平臺壓縮包解壓到http共享目錄下
[root@server1 ~]# yum install unzip php httpd -y
[root@server1 ~]# unzip bansys.zip -d /var/www/html/
[root@server1 ~]# cd /var/www/html/
[root@server1 html]# mv bansys/* .
##編輯php文件,只保留如下設置,其餘註釋掉
[root@server1 html]# vim config.php
<?php
//varnish主機列表
//可定義多個主機列表
$var_group1 = array(
'host' => array('172.25.24.1'),
'port' => '8080',
);
//varnish羣組定義
//對主機列表進行綁定
$VAR_CLUSTER = array(
'www.westos.org' => $var_group1,
);
//varnish版本
//2.x和3.x推送命令不一樣
$VAR_VERSION = "3";
?>
##bansys 有兩種工作模式,分別是:telnet 和 http 模式。
##telnet 模式需要關閉 varnish 服務管理端口的驗證,註釋掉/etc/sysconfig/varnish 文件中的 “ -S $
{VARNISH_SECRET_FILE}”這行,重啓 varnish 服務即可。
##如果是 http 模式需要對 varnish 做以下設置:
[root@server1 html]# vim /etc/varnish/default.vcl
acl westos {
#設置訪問控制
"127.0.0.1";
"172.25.24.0"/24;
}
backend web1 {
.host = "172.25.24.2";
.port = "80";
}
backend web2 {
.host = "172.25.24.3";
.port = "80";
}
director lb round-robin {
{ .backend = web1;}
{ .backend = web2;}
}
sub vcl_recv {
if (req.request == "BAN") {
if (!client.ip ~ westos) {
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
}
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 "error";
}
}
[root@server1 html]# /etc/init.d/varnish reload
進行推送:
(1)打開瀏覽器,訪問172.25.24.1:8080端口
firefox
172.25.24.1:8080
(2)選擇HTTP
(3)輸入推送內容,並提交,推送成功:
/index.html
測試:通過CDN推送手動刷新緩存
(1)在測試機上:
##由於緩存功能開啓所以在一定時間內訪問www.westos.org/index.html得到的內容都是來自緩存
[root@foundation24 varnish]# curl www.westos.org/index.html
server2:www.westos.org
(2)在服務器server1上重新推送/index.html
(3)再在測試機上訪問www.westos.org/index.html
##由於手動推送將緩存刷新,再次訪問進入了其他的後臺服務器
[root@foundation24 varnish]# curl www.westos.org/index.html
server3:www.westos.org