天天看點

Varnish 安裝及配置jemalloc 以來包倉庫位址

1、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工作區。

2、varnish日志

為了與系統的其它部分進行互動,Child程序使用了可以通過檔案系統接口進行通路的共享記憶體日志(shared memory log),是以,如果某線程需要記錄資訊,其僅需要持有一個鎖,而後向共享記憶體中的某記憶體區域寫入資料,再釋放持有的鎖即可。而為了減少競争,每個worker線程都使用了日志資料緩存。

共享記憶體日志大小一般為90M,其分為兩部分,前一部分為計數器,後半部分為用戶端請求的資料。varnish提供了多個不同的工具如varnishlog、varnishncsa或varnishstat等來分析共享記憶體日志中的資訊并能夠以指定的方式進行顯示。

3、VCL

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指令完成。

4、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用于設定緩存空間配置設定機關,預設機關是位元組,所有其它的大小都會被圓整。

環境:

centos7.2

varnish server: 192.168.250.128

web server:  192.168.250.131

一、安裝varnish(版本5.1.2-1.el7)

curl -s https://packagecloud.io/install/repositories/varnishcache/varnish5/script.rpm.sh | bash #######varnish 倉庫

yum install jemalloc varnish -y

systemctl restart varnish

systemctl enable varnish

二、配置

yum install httpd -y

systemctl restart httpd; systemctl enable httpd

建立測試頁

for i in {1..10};do echo "page $i on web1" > /var/www//html/test$i.html;done

vim /etc/varnish/default.vcl

backend default {        ###   後端主機

    .host = "192.168.250.131";  ######  後端主機位址(web server)

    .port = "80";       ############   後端主機端口

}

測試通路:

<a href="https://s1.51cto.com/wyfs02/M02/95/41/wKiom1kTLYzgKD0SAAAd1XYwwsw785.png" target="_blank"></a>

三、varnishadm 介紹

-S:指定安全認證檔案

-T :127.0.0.1:6082   指定varnish 主機與管理端口

一般使用:varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 進入控制台

ping  檢測主機存活

status 伺服器狀态資訊

vcl.list 顯示vcl 加載的檔案

200        狀态碼

active auto/warm  0 boot 已激活  自動熱加載  編号0(可以了解為版本号,配置檔案改了以後,編号也會發生改變) 啟動時加載的一個名字

例如:

vcl.load test default.vcl    

200        

VCL compiled.

vcl.list

active      auto/warm  0 boot

available    auto/warm  0 test    可用的

vcl.use test    使用這個政策

VCL 'test' now active

available   auto/warm           0 boot

active      auto/warm          0 test  發現這個政策已被激活使用

vcl.use boot    應用這個政策

VCL 'boot' now active

vcl.discard test   删除政策

200

vcl.list   檢視

active      auto/warm          0 boot

vcl.show boot   顯示編譯前的配置資訊

param.show  運作時參數

param.set thread_pools 4   設定參數值為4,建議有幾個cpu,設定為幾個線程池數

param.show -l thread_pools  單獨檢視一個 運作參數的詳細資訊,也可以不加-l 參數

panic.show   顯示子程序挂掉後的日志資訊

panic.clear  清除日志資訊

storage.list   顯示存儲類型(記憶體,檔案,持久化)

backend.list  顯示後端主機

ban.list  顯示 緩存模式及緩存次數(可以指定删除緩存中的一些資訊)

bans (預設模式):緩存過期後自動清零

四、varnish工具介紹(都是通過共享記憶體空間狀态擷取的)

log:

varnishlog:顯示緩存在記憶體中的日志資訊。

varnishncsa:顯示類似與web伺服器中的日志資訊。

狀态:

varnishtop:排序顯示緩存時的詳細資訊

varnishstat:顯示varnish狀态  

本文轉自silence部落格51CTO部落格,原文連結http://blog.51cto.com/silencezone/1874793如需轉載請自行聯系原作者

a120518129