varnish


    varnish是一款高性能的開源HTTP加速器.

    varnish與一般服務器軟件類似,分爲master(management)進程和child(worker,主要做cache的工作)進程。master進程讀入命令,進行一些初始化,然後fork並監控child進程。child進程分配若干線程進行工作,主要包括一些管理線程和很多woker線程。

     針對文件緩存部分,master讀入存儲配置(-s file[,path[,size[,granularity]]] ),調用合適的存儲類型,然後創建/讀入相應大小的緩存大文件。接着,master初始化管理該存儲空間的結構體。這些變量都是全局變量,在fork以後會被child進程所繼承(包括文件描述符)。

     在child進程主線程初始化過程中,將前面打開的存儲大文件整個mmap到內存中(如果超出系統的虛擬內存,mmap失敗,進程會減少原來的配置mmap大小,然後繼續mmap),此時創建並初始化空閒存儲結構體,掛到存儲管理結構體,以待分配。

      接着,真正的工作開始,Varnish的某個負責接受新HTTP連接的線 程開始等待用戶,如果有新的HTTP連接過來,它總負責接收,然後叫醒某個等待中的線程,並把具體的處理過程交給它。Worker線程讀入HTTP請求的 URI,查找已有的object,如果命中則直接返回並回複用戶。如果沒有命中,則需要將所請求的內容,從後端服務器中取過來,存到緩存中,然後再回復。

1.server3:
   yum install varnish-3.0.5-1.el6.x86_64.rpm  varnish-libs-3.0.5-1.el6.x86_64.rpm  -y
   vim /etc/sysconfig/varnish

VARNISH_LISTEN_PORT=80

   vim /etc/varnish/default.vcl

backend default {
  .host = "127.0.0.1";
  .port = "8080";
}



  vim /etc/httpd/conf/httpd.conf

Listen 8080

   /etc/init.d/httpd start
   /etc/init.d/varnish start
   netstat -antlp
wKiom1ejUiTDh5A7AACq7OlZUOY290.png-wh_50 

  cd  /var/www/html
   vim index.html

server3.example.com
server3.example.com

   
    curl -I 172.25.85.3
wKiom1ejUQqhSLwqAABhYweP8w4372.png-wh_50

   

   curl -I 172.25.85.3/index.html


wKiom1ejUSeyYgGiAAByMHiCw9Y545.png-wh_50
  

在網頁中打開:172.25.85.3
wKioL1ejUUrgDapzAAAZqomoGto641.png-wh_50
 
  之後修改index.html:server2.server2.server2
  刷新網頁上的內容,等一段時間修改後的內容才顯示             ##會有緩存
wKiom1ejUZTA4Nm5AAATfQdCgi4902.png-wh_50 
 


   在index.html中的內容修改之後,網頁上的內容未被刷新之前:


   curl -I 172.25.85.3
wKioL1ejUe3SD_qQAABgnnBUgxE158.png-wh_50
   

    curl -I 172.25.85.3/index.html
wKioL1ejUgCwo_BlAABvMGbGCxk657.png-wh_50 
 

 修改成功之後Age=0


   curl -dump 172.25.85.3
   curl -dump 172.25.85.3/index.html
wKiom1ejUnrzDilRAAAlapalsq4630.png-wh_50



2. server3:
   cd  /etc/varnish
   vim  default.vcl
wKioL1ejU2nSe8mdAABH_WE_ht8557.png-wh_50

backend default {
  .host = "127.0.0.1";
  .port = "8080";
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
}

 

  /etc/init.d/varnish restart

  curl -I 172.25.85.3/index.html
wKiom1ejUtWC46woAAB9w2Y_k90129.png-wh_50


   修改:
  cd /var/www/html
  echo server2.server2 > index.html
 

  curl -I 172.25.85.3/index.html

wKioL1ejUxXQmKNiAAB_5B8TVjk856.png-wh_50

 

  curl  172.25.85.3/index.html

wKiom1ejU0PC4z8LAAAkoCNGml8156.png-wh_50

   ### 通過 varnishadm 手動清除緩存
  varnishadm ban.url .*$   #清除所有
  varnishadm ban.url /index.html    #清除 index.html 頁面緩存
  清除了緩存中的內容就可以很快更新index.html中修改的內容





3.定義多個不同域名站點的後端服務器:
  在真機上加上server3的域名解析:

172.25.85.3  server3.example.com   www.linux.org   www.unix.org  
             www.westos.org   westos.org bbs.westos.org

 
  server3:
 
  vim /etc/varnish/default.vcl
wKiom1ejU-eQJ-NXAACiDkG4A84195.png-wh_50

backend default {
  .host = "127.0.0.1";
  .port = "8080";
}
backend server4 {
  .host = "172.25.85.4";
  .port = "80";
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = default;
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = server4;
} else {error 404 "westos cache";
}
}
sub vcl_deliver {
if (obj.hits > 0) {
set resp.http.X-Cache = "HIT from westos cache";
}
else {
set resp.http.X-Cache = "MISS from westos cache";
}
return (deliver);
}

   /etc/init.d/varnish reload


  

 server3-www.westos.org   > /var/www/html/index.html

   server4:
 

  server4-bbs.westos.org   > /var/www/html/index.html


檢測:


http://www.westos.org/

wKiom1ejVFSikqkkAAAXrXRRhP0747.png-wh_50
http://bbs.westos.org/


wKiom1ejVC3gwqm6AAAphHdoTCE068.png-wh_50


4.  把多個後端聚合爲一個組,並檢測後端健康狀況
   server3:
   vim /etc/varnish/default.vcl
增加:wKioL1ejVKyjlzqrAAB_Fou83bU378.png-wh_50

backend default {
  .host = "127.0.0.1";
  .port = "8080";
}
backend server4 {
  .host = "172.25.85.4";
  .port = "80";
}
director westoslb round-robin {
{  .backend = default;  }
{   .backend = server4;  }
}
sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = westoslb;
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = server4;
} else {error 404 "westos cache";
}
}

   server4:
   vim /var/www/html/index.html

<VirtualHost *:80>
    DocumentRoot /var/www/html
    ServerName  www.westos.org
   alias westos.org
</VirtualHost>
<VirtualHost *:80>
    DocumentRoot /bbs
    ServerName  bbs.westos.org
</VirtualHost>

    /etc/init.d/httpd start
    
    mkdir /bbs
    vim /bbs/index.html

bbs.westos.org

   

   vim /var/www/html/index.html

server4-www.westos.org


   server3:
 
    /etc/init.d/varnish reload
wKioL1ejVO2glMp2AABoRHafAFo232.png-wh_50


   vim /etc/varnish/default.vcl

 wKiom1ejVTSTa4ElAAA3yhXfLuQ487.png-wh_50

  sub vcl_recv {
if (req.http.host ~ "^(www.)?westos.org") {
set req.http.host = "www.westos.org";
set req.backend = westoslb;
return (pass);
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = server4;
} else {error 404 "westos cache";
}
}


 /etc/init.d/varnish reload






http://www.westos.org/

server3-www.westos.org  he server4-www.westos.org  交替出現


關閉server3上的 httpd ,只出現server4-www.westos.org





5.banzip:

  server3:
  yum install unzip
  unzip bansys.zip -d /var/www/html/
  cd /var/www/html/bansys/
  yum install php -y

  mv *  ..
  cd ..
  rm -fr bansys/

  vim /var/www/html/config.php

註釋一部分

wKiom1ejVd6Tx42IAAB_WuMsRzY252.png-wh_50

wKioL1ejVfuB2qF7AAC5UR2OuwI626.png-wh_50

 //可定義多個主機列表
 $var_group1 = array(
                        'host' => array('172.25.85.3'),
                                                'port' => '6082',
                    );
 //這個使用了mysql讀取數據                                               
# $var_group3 = array(
 #                       'host' => $varnish_host,
#                                               'port' => '6082',                               
 #                   );                                          
 //varnish羣組定義
 //對主機列表進行綁定
 $VAR_CLUSTER = array(
                         'www.westos.org' => $var_group3,
                     );
 //varnish版本
 //2.x和3.x推送命令不一樣
 $VAR_VERSION = "3";
?>
~

    /etc/init.d/httpd restart


http://172.25.85.3:8080/
wKioL1ejVj7zngXBAAB7BKI9wLE642.png-wh_50 


   vim /etc/varnish/default.vcl 


wKiom1ejVqeBGGbbAAAeptv1PZ0480.png-wh_50

wKioL1ejVqeQc1c2AABe0UDQbM4902.png-wh_50

acl westos {
  "127.0.0.1";
   "172.25.85.0"/24;
}
backend default {
  .host = "127.0.0.1";
  .port = "8080";
}
   director westoslb round-robin {
{  .backend = default;  }
{   .backend = server4;  }
}
sub vcl_recv {
if (req.request == "BAN") {
if (!client.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 = westoslb;
#return (pass);
} elsif (req.http.host ~ "^bbs.westos.org") {
set req.backend = server4;
} else {error 404 "westos cache";
}
}


    /etc/init.d/varnish reload




http://www.westos.org/index.html
只出現server3-www.westos.org

http://172.25.85.3:8080/

wKiom1ejVtzxzhTsAABYP0iyU5s858.png-wh_50

wKioL1ejVt2TOeASAAA8OtImNjQ472.png-wh_50


                                 
 

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