varnish

下面介紹的是varnish緩存

一、緩存基礎
1、緩存的時效性
緩存有三種時效性機制,分別是過期清理(purge)、溢出清理(lru)、修改清理。
2、緩存的命中率
頁面命中率(頁面數量)、字節命中率(頁面體積)。
3、數據的緩存位置
私有數據:【瀏覽器】完成緩存;
公有數據:【反代】上緩存。
4、緩存步驟(6步):

  1. 緩存服務器接收請求;
  2. 緩存服務器解析請求;緩存服務器從http協議首部中提取URL等首部信息;
  3. 查找緩存;
  4. 檢查緩存是否有效,若是有效就構建相應的響應報文,併發送給客戶端;
  5. 若是緩存無效,就調度到後端server,並返回請求數據,緩存服務器進行緩存後,再發送相應數據給客戶端;
  6. 記錄日誌

二、varnish
1、varnish緩存組織架構:主進程/子進程。
manage進程:主進程,管理子進程,初始化緩存;
cache進程:子進程,多種線程模型。

varnish的配置接口爲:vcl。

2、varnish程序環境
配置文件作用:
/etc/varnish/varnish.params:運行參數
/etc/varnish/default.vcl:子線程屬性

主要命令:/usr/bin/
varnishd:varnish主程序
varnishadm:命令行接口
varnishtest:測試
varnish_reload_vcl:重載vcl配置文件
varnish.service:管理主進程

3、/usr/bin/varnishd --------------主程序
-a:服務地址(端口),默認127.0.0.1:6081;
-T:管理地址和接口,默認127.0.0.1:6082;
-s:緩存機制,malloc/file/persistent/path/size;
-f:指明vcl配置文件;
-p param=value:運行時參數及其值;
-r:運行時參數爲可讀。

4、/etc/varnish/varnish.params ----------運行時參數文件
DAEMON_OPTS = '-p param1=value1 -p ...'
thread_pool_min=
thread_pool_max=
thread_pool_timeout= //線程銷燬的等待時間

 線程模型:
 cache-worker:處理請求
 cache-main:啓動cache功能
 ban lurker:修剪
 acceptor:新連接請求
 epool/kqueue:線程池管理
 expire:清理過期緩存
 backend poll:後端服務器健康檢測

5、varnishadm命令
常用選項:
-S:命令行工具
-T:管理地址和管理端口

varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

varnish>
vcl.list
vcl.load conf1 default.vcl //裝載並編譯acl文件
vcl.use conf1 //激活配置文件
vcl.list
vcl.discard //刪除配置文件
param.show //顯示運行時參數
param.set //設置運行時參數
storage.list //緩存存儲相關
backend.list //後端服務器列表

6、vcl引擎(vcl不支持循環)
vcl_recv
vcl_hash
vcl_hit
vcl_deliver
vcl_pass
vcl_miss
vcl_backend_fetch
vcl_backend_error
vcl_backend_response
vcl_purge //修剪
vcl_pipe
vcl_synth

特殊引擎:
vcl_init:處理請求前執行的vcl代碼,初始化vmods;
vcl_fini:結束時使用,清理vmods。

vcl內建變量:req., bereq., resp., beresp., obj.*
req.url <--> bereq.url
req.request <--> bereq.request
req.proto <--> bereq.proto
resp.status <--> beresp.status

7、緩存特定類型的資源,長時間不變的資源。
varnish調度到特定的資源上時,由於資源比較穩定,可以在varnish緩存調度器上進行緩存資源,以便其他客戶端進行訪問。對於匹配的bereq.url,進行unset beresp.http.Set-Cookie,並設置beresp.ttl。

8、purge
對於緩存修剪,在vcl_recv裏面進行修剪匹配操作,使用大量的if語句進行修剪條件,其中可以使用req.method、client.ip等,可以使用return(synth(...))進行修改執行。

9、backend
對於varnish後端主機,我用backend {...}來進行設置,其中需要設置IP和端口號,也要設置probe{...}檢測機制,對於檢測機制來說,可以是動態的,也可以是靜態的,還可以是圖片等特殊資源,還可以進行健康狀態檢查,具體看怎麼設置url。

10、varnish日誌

  1. varnishstat命令
    功能:varnish緩存狀態
    常用選項:
    -1:批量顯示所有信息
    -1 -f filed_name:特定屬性信息
  2. varnishstop命令
    功能:
    -1:批量顯示
    -i:顯示指定的標籤的信息
    -I:顯示指定字段的信息
    -x:排除在外(指定的標籤)
    -X:排除所有匹配到的內容
  3. varnishlog命令
    功能:顯示相關日誌
  4. varnishncsa命令
    功能:顯示相關日誌,易讀格式

11、varnish的內建函數
regsub:替換匹配到的第一個
regsuball:替換所有匹配的
ban:修剪所有匹配值
hash_data:指明做哈希的數據
synthetic:執行修剪

12、varnish配置總結

  1. 在varnish配置段中,需要先導入directors,類似Python語言的模塊調用需要導入一樣,後端配置都是在此基礎上進行的。
  2. 然後是使用probe{...}定義檢測機制,以便在後面定義backend時進行調用,其中可以設置URL、時間相關、次數相關內容。
  3. 接下來就是寫後端backend{...},在backend字段中,需要定義後端主機和檢測機制。
  4. 然後使用vcl_init{...}創建後端主機組,在主機組中設置具體的調度算法,具體怎麼調度。
  5. 然後就是定義訪問規則和引擎的使用,利用vcl_recv{...}來定義,在裏面我們利用不同的if語句來進行不同的後端server匹配,並根據引擎進行相關服務器調度。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章