經過一天的努力,終於將Varnish快取服務器部署到線上伺服器了。趁著熱乎勁兒,趕緊給大家分享一下。Varnish是一個輕量級的Cache和反向 Proxy軟體。先進的設計理念和成熟的設計架構是Varnish的主要特點。下面是Varnish的一些特點:
基於記憶體進行緩衝,重啟後資料將消失;
利用虛擬記憶體方式,I/O效能好;
支援設定0~60秒精確緩衝時間;
VCL 組態管理比較靈活;
32位機器上快取檔案大小為最大2GB;
具有強大的管理功能;
狀態機器設計巧妙,結構清晰;
利用二元堆積管理快取檔案,可達到積極刪除目的;
在安裝Varnish之前,系統如果沒有安裝pcre,在編譯Varnish 2.X以上版本時,會提示找不到PCRE庫,而pcre庫是為了相容Regex,所以必須先安裝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":表示用戶端向方向Proxy 伺服器成功發送HTTP請求的總數量。"Client requests received":表示到現在為止,瀏覽器向反向 Proxy伺服器發送HTTP請求累計次數。由於會使用長串連,因此這個值一般會大於"Client connections accepted"的值。"Cache hits":表示方向Proxy 伺服器在緩衝區中尋找並且命中緩衝的次數。"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分享的內容對大家有用,如果有什麼問題,還望大家指正!今天就到此為止了!