linux企業學習二——加速器Varnish的部署

一、Varnish簡介

Varnish 是一款高性能且開源的反向代理服務器HTTP加速器,其採用全新的軟件體系機構,和現在的硬件體系緊密配合,與傳統的squid 相比,varnish 具有性能更高、速度更快、管理更加方便等諸多優點,很多大型的網站都開始嘗試使用 varnish 來替換 squid,這些都促進varnish 迅速發展起來。

二、Varnish工作原理圖

http://ossi4.51cto.com/attachment/201409/25/8886857_1411663525qP7d.png

vcl_recv:是在Varnish完成對請求報文的解碼爲基本數據結構後第一個要執行的子例程

vcl_fetch:根據服務器端的響應作出緩存決策

vcl_pipe:用於將請求直接發往後端主機

vcl_hash:自定義hash生成時的數據來源

vcl_pass:用於將請求直接傳遞至後端主機

vcl_hit:從緩存中查找到緩存對象時要執行的操作

vcl_miss:從緩存中款查找到緩存對象時要執行的操作

vcl_deliver:將用戶請求的內容響應給客戶端時用到的方法

vcl_error:在varnish端合成錯誤響應而時

三、配置Varnish服務器

server2上

1.下載安裝Varnish軟件包

現在你的虛擬機可能連不上網,你可以在真機下載,然後scp過去,但是會出現下面問題

現在就需要在虛擬機一個openssl-clients這個軟件,然後就可以了

2.修改varnish的監聽端口

vim /etc/sysconfig/varnish 

3.修改配置文件

打開文件的最大數,有如下關係內核操作> 操作系統> 軟件
內核允許的打開文件最大數

但是varnisg軟件的打開文件最大數

因爲默認數量大於內核操作的文件數,所以要將默認數量改小一點

[root@server2 varnish]# vim /etc/sysconfig/varnish 
NFILES=65535

還要修改內存空間和線程數,文件數應該介於上述兩者之間

[root@server2 varnish]# vim /etc/sysconfig/varnish 
MEMLOCK=82000
NPROCS="unlimited"

可修改:

server3網絡服務器

安裝httpd服務,並開啓服務

[root@server2 ~]# yum install httpd -y
[root@server2 ~]# /etc/init.d/httpd start

在server3上vim /var/www/html/index.html

在sserver2上,修改varnish監聽網絡服務器的ip

vim /etc/vanish/default.val

刷新varnish

檢測:在瀏覽器中輸入172.25.66.3/index.html

手動清除緩存

### 通過 varnishadm 手動清除緩存
# varnishadm ban.url .*$
#清除所有
# varnishadm ban.url /index.html
#清除 index.html 頁面緩存
# varnishadm ban.url /admin/$
#清除 admin 目錄緩存

四、查看緩存命中情況

1、server2: 在varnish配置文件(/etc/varnish/default.vcl)中添加如下代碼:

vim /etc/varnish/default.vcl
backend default {
  .host = "172.25.1.2";      # 後端服務器的ip
  .port = "80";              # 後端服務器的端口
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";    #在varnish中命中HIT訪問的域名
}
else {
set resp.http.X-Cache = "MISS from westos cache";    #後端服務器中得到MISS訪問的域名
}
return (deliver);
}

2、重新加載默認文件

/etc/init.d/varnish reload 

3、在物理機中添加www.westos.org的解析

172.25.66.2    www.westos.org

4、在物理機中測試: curl -I www.westos.org

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

此實驗需要一臺varnish主機(server2),還有兩臺虛擬機(server3,server4)

1、在server4的httpd服務的默認發佈目錄下編輯文件(/var/www/html/index.html)

bbs.westos.com

2、將bbs解析到物理主機中

172.25.66.2    bbs.westos.org

3、配置varnish的配置文件(vim /etc/varnish/default.vcl)

backend web1 {     # 後端第一個服務器名web1
  .host = "172.25.1.2";   
  #將server2 www.westos.org作爲第一個服務器主機
  .port = "80";
}
backend web2 {     # 後端第二個服務器名web2
.host = "172.25.1.3"
#將server3 bbs.westos.org作爲第二個服務器主機
  .port = "80";
}

sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {     
# 解析域名是westos.com 或www.westos.com,均訪問172.25.1.2->server2
set req.http.host = "www.westos.org";
set req.backend = web1;
} elsif (req.http.host ~ "^bbs.westos.org") {   
# 解析域名爲bbs.westos.com,訪問172.25.1.3->server 3
set req.backend = web2;
} else {error 404 "westos cache";   
# 如果訪問的域名不是這三者,404的錯誤
}
}

4、重新加載varnish

5、在物理機中測試

六、基於多臺服務器的負載均衡

1、什麼是負載均衡

負載均衡(Load Balance,簡稱LB)是一種服務器或網絡設備的集羣技術。負載均衡將特定的業務(網絡服務、網絡流量等)分擔給多個服務器或網絡設備,從而提高了業務處理能力,保證了業務的高可用性。
負載均衡算法的種類有很多種,常見的負載均衡算法包括輪詢法、隨機法、源地址哈希法、加權輪詢法、加權隨機法、最小連接法等,應根據具體的使用場景選取對應的算法。在varnish中我們採用的是輪詢法,平衡對待麼一個後端服務器。

2、在server2上配置varnish

backend web1 {
  .host = "172.25.66.3";
  .port = "80";
}
backend web2 {
  .host = "172.25.66.4";
  .port = "80";
}
director lb round-robin {    #採用round-robn算法:一種以輪詢的方式依次將一個域名解析到多個IP地址的調度不同服務器的計算方法
{.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";
        }
}

2、在serveer3的httpd服務的默認發佈目錄中寫入www.westos.org-server3

在server4的httpd服務的默認分佈目錄中寫入www.westos.org-server4

3、後臺服務器的配置(server4)

vim /etc/httpd/conf/httpd.conf
#打開80端口
NameVirtualHost *:80
#在默認文件最後添加
<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName bbs.westos.org
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /www
    ServerName www.westos.org
</VirtualHost>

/etc/init.d/httpd restart
mkdir /www
vim /www/index/html

添加本地解析(vim /etc/hosts)

4、server3這臺後臺服務器的配置

5、在主機中測試

curl www.westos.org    #交替出現server2和server3中默認發佈內容,將其中一個用戶關閉,則另一個用戶繼續抓取信息的工作,實現負載均衡,使其關閉的方法是關閉http服務,清除緩存即可

 在網頁上測試:

刷新網頁

如果第一次出現server2(server3),那麼120秒內都是server2(薩爾ver),因爲server2(server3)將數據進行了緩存;
如果訪問時間大於120s,它會出現server3(server2)(因爲負載均衡採用的算法是平衡輪叫,server2和server3是公平地被訪問的)
如果在默認函數中寫上return(pass),那麼它每次都直接從後端服務器中直接取,一次server2一次server3
如果server2或者server3其中一個損壞(關閉htpd服務),那麼客戶端只會訪問健康的那一個,不會訪問壞的哪一個,即負載均衡的健康檢查。

 當server4的後臺網絡服務器掛掉之後,就自動server3這臺服務器

七、搭建CDN推送平臺

1、CDN 的概念

CDN是構建在網絡之上的內容分發網絡,依靠部署在各地的邊緣服務器,通過中心平臺的負載均衡、內容分發、調度等功能模塊,使用戶就近獲取所需內容,降低網絡擁塞,提高用戶訪問響應速度和命中率。CDN的關鍵技術主要是內容存儲分發技術

2、CDN推送的步驟

1.在server1安裝httpd服務並編輯httpd配置文件,將136行的端口號修改8080(因爲我們的varnish服務已經佔用了80端口,避免衝突)
2.安裝php(顯示頁面)
3.將banzip從物理機發送到server1,並在server1解壓到/var/www/html(指定目錄解壓 -d)
5.將/var/www/html中的所有東西移到/var/www/html中
6.編輯config.php

1)將httpd服務的端口號改成8080,以防和varnish衝突

[root@server2 ~]# vim /etc/httpd/conf/httpd.conf

2)下載bansys安裝包:http://code.google.com/p/varnish-php-bansys/

安裝解壓軟件:yum install unzip  -y

開始解壓:unzip bansys.zip

將解壓後的文件放到apache的默認發佈目錄中(/var/www/html/)

3)修改配置文件

[root@server2 html]# vim config.php

<?php

 $var_group1 = array(
                        'host' => array('172.25.66.2'),
                                                'port' => '80',                                 
                    );
                                                

 //varnish羣組定義
 //對主機列表進行綁定
 $VAR_CLUSTER = array(
                         'www.westos.org' => $var_group1,
                     );


 //varnish版本
 //2.x和3.x推送命令不一樣
 $VAR_VERSION = "3";

?>

4)開啓httpd服務

[root@server2 html]# /etc/init.d/httpd start

5)瀏覽器訪問

6)編寫varnish的默認文件vim /etc/varnish/default.vcl

acl westos {
#設置訪問控制,即就是白名單,允許本機和172.25.66網段和推送
"127.0.0.1";    #本機的IP
"172.25.66.0"/24;    #24是子網掩碼
}
backend web1 {
  .host = "172.25.66.3";
  .port = "80";
}
backend web2 {
  .host = "172.25.66.4";
  .port = "80";
}
director lb round-robin {
{.backend = web1;}
{.backend = web2;}
}
sub vcl_recv {
if (req.request == "BAN") {    #如果採用的推送方式是BAN
if (!client.ip ~ westos) {    #如果客戶端的IP不是westos
error 405 "Not allowed.";
}
ban("req.url ~ " + req.url);
error 200 "ban added";
}
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";
        }
}

重新加載varnish:/etc/init.d/varnish reload

重啓httpd服務:/etc/init.d/httpd restaart

測試:在瀏覽器中訪問172.25.66.2:8080,在推送內容中輸入想要更新的頁面,選擇HTTP

 

 

 

 

 

 

 

 

 

 

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