天天看點

varnish安裝及配置詳解

varnish系統架構:

varnish主要運作兩個程序:management程序和child程序(也叫cache程序)。

management程序主要實作應用新的配置、編譯vcl、監控varnish、初始化varnish以及提供一個指令行接口等。management程序會每隔幾秒鐘探測一下child程序以判斷其是否正常運作,如果在指定的時長内未得到child程序的回應,management将會重新開機此child程序。

child程序包含多種類型的線程,常見的如:

acceptor線程:接收新的連接配接請求并響應;

worker線程:child程序會為每個會話啟動一個worker線程,是以,在高并發的場景中可能會出現數百個worker線程甚至更多;

expiry線程:從緩存中清理過期内容;

varnish依賴“工作區(workspace)”以降低線程在申請或修改記憶體時出現競争的可能性。在varnish内部有多種不同的工作區,其中最關鍵的當屬用于管理會話資料的session工作區

拓撲圖如下:

varnish緩存代理伺服器配置:

一、/etc/sysconfig/varnish配置檔案修改如下兩項:

varnish的後端存儲

 varnish支援多種不同類型的後端存儲,這可以在varnishd啟動時使用-s選項指定。後端存儲的類型包括:

        (1)file:使用特定的檔案存儲全部的緩存資料,并通過作業系統的mmap()系統調用将整個緩存檔案映射至記憶體區域(如果條件允許);

        (2)malloc:使用malloc()庫調用在varnish啟動時向作業系統申請指定大小的記憶體空間以存儲緩存對象;

        (3)persistent(experimental):與file的功能相同,但可以持久存儲資料(即重新開機varnish資料時不會被清除);仍處于測試期;

varnish無法追蹤某緩存對象是否存入了緩存檔案,進而也就無從得知磁盤上的緩存檔案是否可用,是以,file存儲方法在varnish停止或重新開機時會清除資料。而persistent方法的出現對此有了一個彌補,但persistent仍處于測試階段,例如目前尚無法有效處理要緩存對象總體大小超出緩存空間的情況,是以,其僅适用于有着巨大緩存空間的場景。

選擇使用合适的存儲方式有助于提升系統性,從經驗的角度來看,建議在記憶體空間足以存儲所有的緩存對象時使用malloc的方法,反之,file存儲将有着更好的性能的表現。然而,需要注意的是,varnishd實際上使用的空間比使用-s選項指定的緩存空間更大,一般說來,其需要為每個緩存對象多使用差不多1k左右的存儲空間,這意味着,對于100萬個緩存對象的場景來說,其使用的緩存空間将超出指定大小1g左右。另外,為了儲存資料結構等,varnish自身也會占去不小的記憶體空間。

為varnishd指定使用的緩存類型時,-s選項可接受的參數格式如下:

 malloc[,size] 或

 file[,path[,size[,granularity]]] 或

 persistent,path,size {experimental}

file中的granularity用于設定緩存空間配置設定機關,預設機關是位元組,所有其它的大小都會被圓整。

二、使用vcl語言編寫varnish緩存代理伺服器的緩存政策

         varnish configuration language (vcl)是varnish配置緩存政策的工具,它是一種基于“域”(domain specific)的簡單程式設計語言,它支援有限的算術運算和邏輯運算操作、允許使用正規表達式進行字元串比對、允許使用者使用set自定義變量、支援if判斷語句,也有内置的函數和變量等。使用vcl編寫的緩存政策通常儲存至.vcl檔案中,其需要編譯成二進制的格式後才能由varnish調用。事實上,整個緩存政策就是由幾個特定的子例程如vcl_recv、vcl_fetch等組成,它們分别在不同的位置(或時間)執行,如果沒有事先為某個位置自定義子例程,varnish将會執行預設的定義。

        vcl政策在啟用前,會由management程序将其轉換為c代碼,而後再由gcc編譯器将c代碼編譯成二進制程式。編譯完成後,management負責将其連接配接至varnish執行個體,即child程序。正是由于編譯工作在child程序之外完成,它避免了裝載錯誤格式vcl的風險。是以,varnish修改配置的開銷非常小,其可以同時保有幾份尚在引用的舊版本配置,也能夠讓新的配置即刻生效。編譯後的舊版本配置通常在varnish重新開機時才會被丢棄,如果需要手動清理,則可以使用varnishadm的vcl.discard指令完成。

在/etc/varnish目錄下建立以.vcl結尾的mycache.vcl配置檔案

在指令行下使用varnishadm指令連接配接至varnish管理控制背景

測試結果不再給出,小夥伴們可以自己動手測試一下^-^

本文出自 “” 部落格,請務必保留此出處