高性能緩存服務器Varnish


一、Varnish概述

  Varnish是一款高性能的、開源的反向代理服務器和緩存服務器,計算機系統的除了有內存外,還有CPU的L1、L2,甚至L3級別的緩存,Varnish的設計架構就是利用操作系統的緩存機制處理訪問;VCL,即Varnish Configuration Language,是Varnish的配置語言。在執行VCL時,Varnish把VCL轉換成二進制代碼執行。

  Varnish與Squid的對比:

  優點:Varnish具有更好的穩定性、更快的訪問速度、更多的並發連接支持數,可以通過管理端口管理緩存等優勢

  缺點:在高並發狀態下,Varnish消耗更多的CPU、I/O和內存資源。Varnish進程一旦掛起、崩潰或者重啟,緩存的數據會從內存中釋放,此時所有的請求都會轉發到后端服務器上,給后端服務器造成很大壓力。

二、Varnish的使用

(1)需要安裝的依賴包有libtool、ncurses-devel、pcre-devel、libxslt、groff、pkgconfig

  libedit-devel-2.11-4.20080712cvs.1.e16.x86_64.rpm

  python-docutils-0.6-1.e16.noarch.rpm

  python-imaging-1.1.6-19.e16.x86_64.rpm

  varnish-4.0.1.tar.gz

(2)安裝過程 

1 ~]# bash autogen.sh  #解壓后的源碼包內有一個腳本,我們需要執行以下它
2 ~]# ./configure --prefix=/usr/local/varnish --enable-debugging-symbols --enable-developer-warnings && make && make install
3 ~]# ln -s /usr/local/varnish/sbin/varnishd  /usr/lcoal/sbin
4 ~]# ln -s /usr/local/varnish/bin/*  /usr/local/bin
5 ~]# cp /usr/local/varnish/share/doc/varnish/example.vcl   /usr/local/varnish/default.vcl    #配置文件模板拷貝出來用

(3)配置反向代理

1 ~]# vim default.vcl                     
2 backend  default {
3   .host = "192.168.10.52";    #后端web服務器的地址
4   .port = "80";                    #web服務器端口
5 }
6 ~]# varnishd -f /usr/local/varnish/default.vcl -a 0.0.0.0:80   #指定監聽的ip和端口
7 ~]# varnishlog   #查看日志,實時滾動方式
8 測試方法:訪問varnishIP地址可以看到后端web服務器的默認首頁,就說明我們配置的反向代理沒有問題。

 三、Varnish負載均衡配置

 1 ~]# vim default.vcl 
 2 import   directors   #在vcl 4.0;行下面定義一個負載調度器變量
 3 backend  web1 {                         #把default修改為web1,就是后面的web服務器,有幾個web節點就復制幾個backend域
 4   .host = "192.168.10.52";       #后端web服務器的地址
 5   .port = "80";                         #web服務器端口
 6 }
 7 然后再添加下列函數
 8 sub  vcl_init {
 9   new  bar = directors.round_robin();   #讓新的 bar 等於之前定義的變量directors,后面接輪詢(rr)算法
10   bar.add_backend(web1);       #注意這里有幾個backend就添加幾個
11   bar.add_backend(web2);
12 }
13 在sub  vcl_recv {}函數中添加下列語句
14 set req.backend_hint = bar.backend();
15 ~]# varnishd -C -f /usr/local/varnishd/default.vcl >/root/varnish   #檢查語法是否有誤
16 ~]# pkill varnish
17 ~]# varnishd -f /usr/local/varnish/default.vcl    #加載配置文件並啟動varnish
18 測試方法:由於varnish緩存的原因,當我們訪問varnish的時候,並沒有像我們預期的那樣根據rr算法各自訪問后面兩台web服務器的不同頁面,這時我們讓一台web服務器網絡中斷,這時varnish就會訪問到另一台了。

四、Varnish高可用配置

  我所知道的Varnish高可用就是可以探測后端web節點的健康狀況,檢測到宕機后做記錄,不再傳遞訪問請求了。至於這種方法和負載均衡有什么不同,還需繼續研究

~]# vim default.vcl 、
backend  web1 {                         #把default修改為web1,就是后面的web服務器,有幾個web節點就復制幾個backend域
  .host = "192.168.10.52";       #后端web服務器的地址
  .port = "80";                         #web服務器端口
    .probe = {                           #添加健康檢查段,每個backend都要添加
    .url = "/" ;               
    .interval = 5s ;
    .timeout = 1s ;
    .window = 5 ;
    .threshold = 3 ;                  #檢測3次
}
}
~]# varnishd -f /usr/local/varnish/default.vcl    #加載配置文件並啟動varnish

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM