高性能HTTP加速器Varnish搭建、配置及優化
經過一天的努力,終於將Varnish緩存服務器部署到線上服務器了。趁著熱乎勁兒,趕緊給大家分享一下。Varnish是一個輕量級的Cache和反向代理軟件。先進的設計理念和成熟的設計框架是Varnish的主要特點。下麵是Varnish的一些特點:
-
基於內存進行緩存,重啟後數據將消失;
-
利用虛擬內存方式,I/O性能好;
-
支持設置0~60秒精確緩存時間;
-
VCL 配置管理比較靈活;
-
32位機器上緩存文件大小為最大2GB;
-
具有強大的管理功能;
-
狀態機設計巧妙,結構清晰;
-
利用二叉堆管理緩存文件,可達到積極刪除目的;
在安裝Varnish之前,係統如果沒有安裝pcre,在編譯Varnish 2.X以上版本時,會提示找不到PCRE庫,而pcre庫是為了兼容正則表達式,所以必須先安裝pcre庫。下麵是pcre的安裝過程:
首先,下載pcre軟件包:
進行加壓縮軟件包,進行編譯安裝:
至此,pcre庫已經安裝完成。接著,建立Varnish用戶以及用戶組,並創建Varnish緩存目錄和日誌目錄。
現在可以進行安裝Varnish,這裏將Varnish安裝到/usr/local/目錄下,操作如下:
下載最新Varnish-3.0.3軟件包:
設置安裝參數,然後進行編譯安裝:
將varnish配置文件和服務寫入到係統:
至此,Varnish安裝完成。現在開始配置Varnish,在配置Varnish之前首先了解一下Varnish處理流程:
Varnish處理HTTP請求的過程大致分為如下幾個步驟:
1> Receive狀態:請求處理入口狀態,根據VCL規則判斷該請求應該Pass或Pipe,還是進入Lookup(本地查詢)。
2> Lookup狀態:進入此狀態後,會在hash表中查找數據,若找到,則進入Hit狀態,否則進入Miss狀態。
3> Fetch狀態:在Fetch狀態下,對請求進行後端獲取,發送請求,獲得數據,並進行本地存儲。
4> Deliver狀態:將獲取到的數據發送給客戶端,然後完成本次請求。
現在Varnish的處理原理現在大家都明白了,那麼下麵來進行配置一個實例。由於版本不同,Varnish配置文件的寫法也存在一定的差異,本配置文件以Varnish 3.x版本為基準。
Varnish安裝完成後,默認的配置文件為/usr/local/varnish/etc/varnish/default.vcl,此文件內容默認全部被注釋掉。這裏以這個文件為模板,創建一個新的文件vcl.conf,並且將其放到/usr/local/varnish/etc目錄下。配置完成的vcl.conf文件如下:
在安裝Varnish時,已經將Varnish的管理腳本複製到相應的目錄下,這裏稍作修改即可。首先修改/etc/sysconfig/varnish文件。配置好的文件如下:
這裏需要說明的是,在32位操作係統下,最大隻能支持2GB的緩存文件Varnish_cache.data,如果需要更大的緩存文件,則需要安裝64位的操作係統。
接下來修改的文件是/etc/init.d/varnish,找到如下機房,修改相應的路徑即可:
其中,exec用於指定Varnish的路徑,隻需要修改為Varnish安裝路徑下賭贏的Varnishd文件即可;config 用於指定Varnish守護進程配置文件路徑。
兩個文件修改完畢,就可以授權、運行/etc/init.d/varnish腳本了。執行過程如下:
最後啟動varnish,如下所示:
查看運行狀態:
如上圖,可得知Varnish已經成功啟動。現在可以測試是Varnish的作用了,可通過Curl進行測試:
通過上圖,可得知該URL鏈接已經被緩存,緩存命中率的高低直接說明了Varnish的運行狀態和效果,較高的緩存命中率說明Varnish運行狀態良好,Web服務器的性能也會提高很多;反之,過低的緩存命中率說明Varnish的配置可能存在問題,需要進行調整。因此,從整體上了解Varnish的命中率和緩存狀態,對於優化和調整Varnish至關重要。
Varnish提供了一個Varnishstat命令,通過它可以獲得很多重要的信息。下麵是一個Varnish係統的緩存狀態:
由於執行完varnishstat命令之後,會自動跳轉到一個畫麵,就無法看到執行命令。為方便大家理解,將命令放在執行結果最底部。這裏需要注意一下幾點:
- "Client connections accepted":表示客戶端向方向代理服務器成功發送HTTP請求的總數量。
- "Client requests received":表示到現在為止,瀏覽器向反向代理服務器發送HTTP請求累計次數。由於會使用長連接,因此這個值一般會大於"Client connections accepted"的值。
- "Cache hits":表示方向代理服務器在緩存區中查找並且命中緩存的次數。
- "Cache misses":表示直接訪問後端主機請求數量,也就是非命中數。
- "N struct object":表示當前被緩存的數量。
- "N expired objects":表示過期的緩存內容數量。
- "N LRU moved objects" :表示被淘汰的緩存內容個數。
Varnish的安裝和配置基本上完成了。安裝之後Varnish是否能穩定、快速地運行,與Linux本身的優化及Varnish自身參數的設置有很大關係。在安裝配置完Varnish後,還必須從操作係統和Varnish配置參數兩個方向對Varnish服務器進行性能優化,從而最大限度地發揮Varnish的性能優勢。
內核參數是用戶係統內核之間交互的一個接口,通過這個接口,用戶可以在係統運行的同時動態更新內核配置,而這些內核參數是通過Linux proc文件係統存在。因此,可以通過調整proc文件係統達到優化Linux性能的目的。
修改/etc/sysctl.conf文件進行優化,具體參數如下:
修改ulimit設置,默認情況下Ulimit設置完成之後會臨時生效。當下次重啟機器之後,Ulimit會失效。為了下次機器啟動之後,還會生效。將ulimit設置放到/etc/rc.d/rc.local文件下。具體參數如下:
至此,LINUX係統方麵優化就算完成了。現在還是優化Varnish。打開/etc/sysconfig/varnish啟動腳本,優化參數如下:
至此,Varnish的安裝、配置以及優化基本上完成了。希望David分享的內容對大家有用,如果有什麼問題,還望大家指正!今天就到此為止了!
最後更新:2017-04-03 22:15:39