一、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