經過一天的努力,終于將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分享的內容對大家有用,如果有什么問題,還望大家指正!今天就到此為止了!