相識–Varnish

Varnish與一般服務器軟件類似,分為master(management)進程和child(worker,主要做cache的工作)進程。master進程讀入命令,進行一些初始化,然后fork并監控child進程。child進程分配若干線程進行工作,主要包括一些管理線程和很多woker線程。

VCL?”專有類型的配置語言

VCL有多個狀態引擎,狀態之間存在相關性,但狀態引擎彼此間互相隔離;

每個狀態引擎可使用return( )指明關聯至哪個下一級引擎;

每個狀態引擎對應于vcl文件中的一個配置段。

 

varnish中的內置變量

req.*:request,表示由客戶端發來的請求報文相關;
bereq.*:由varnish發往BE主機的httpd請求相關;
beresp.*:由BE主機響應給varnish的響應報文相關;
resp.*:由varnish響應給client相關;
obj.*:存儲在緩存空間中的緩存對象的屬性;只讀;
常用變量:
 bereq.*, req.*:
 ????bereq.http.HEADERS
 ????bereq.request:請求方法;
 ????bereq.url:請求的url;
 ????bereq.proto:請求的協議版本;
 ????bereq.backend:指明要調用的后端主機;
 ????req.http.Cookie:客戶端的請求報文中Cookie首部的值;
 ????req.http.User-Agent ~ “chrome”
 beresp.*, resp.*:
 ????beresp.http.HEADERS
 ????beresp.status:響應的狀態碼;
 ????reresp.proto:協議版本;
 ????beresp.backend.name:BE主機的主機名;
 ????beresp.ttl:BE主機響應的內容的余下的可緩存時長;
 obj.*
 ????obj.hits:此對象從緩存中命中的次數;
 ????obj.ttl:對象的ttl值
 server.*
 ????server.ip
 ????server.hostname
 client.*
 ????client.ip

[[ ?Varnish的基本配置 ?]]

1.交互式配置

varnishadm

登錄:

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

配置文件相關:

????vcl.list :狀態引擎列表;

????vcl.load <configname> <filename>:裝載那個文件為配置文件;

????vcl.use <configname>:使用哪個vcl文件

????vcl.discard:刪除;

????vcl.show [-v] <configname>:查看指定的配置文件的詳細信息,可看默認配置;
????param.show -l:顯示運行時參數列表;

????param.show <PARAM>:指定顯示哪個參數

????param.set <PARAM> <VALUE>:修改參數

????storage.list:顯示存儲列表

????backend.list:顯示后端服務器列表

2.強制對某類資源的請求不檢查緩存

示例:在請求報文中包含以/login|admin 為首的不查緩存,直接送到backend(后端服務器)

sub vcl_recv {

????if (req.url ~ "(?i)^/(login|admin)") {

????return(pass);

    }
}
(?i)---不區分大小寫

3.拒絕某種請求訪問

sub vcl_recv {

????if (req.http.User-Agent ~ “(?i)^/curl”) {

????return(synth(403));

? ? }

}

4.對特定類型的資源取消私有的Cookie標識,并設定其可在varnish緩存的時長

if (beresp.http.cache-control !~ “s-maxage”) {

    if (bereq.url ~ "(?i)\.(jpg|jpeg|png|gif)$") {

????    unset beresp.http.Set-Cookie;

????    set beresp.ttl = 3600s;

    }

}

5.設置后端服務器日志中記錄的真實的客戶端IP

if (req.restarts == 0) {

    if (req.http.X-Fowarded-For) {

????    set req.http.X-Forwarded-For = req.http.X-Forwarded-For + “,” + client.ip;

    } else {

???    ?set req.http.X-Forwarded-For = client.ip;

    }

}

并在后端服務器中設置日志格式:

# vim? /etc/httpd/conf/httpd.conf
?????LogFormat? "%{X-Forwarded-For}i"

6.對后端主機進行健康狀態檢測

.probe:定義健康狀態檢測方法;

.url:檢測時請求的URL,默認為”/”;

.request:發出的具體請求;

.window:基于最近的多少次檢查來判斷其健康狀態;

.threshhold:最近.window中定義的這么次檢查中至有.threshhold定義的次數是成功的;

.interval:檢測頻度;

.timeout:超時時長;

.expected_response:期望的響應碼,默認為200;

示例:

backend websrv1 {

????.host = "192.168.1.16";

????.port = "80";

????.probe = {

????      .url= "/.test.html";           需要先創建這個測試頁面
????}
}

7.varnish的性能優化

thread_pools:最好小于或等于CPU核心數量;

thread_pool_max:每線程池的最大線程數;

thread_pool_min:額外意義為“最大空閑線程數”;

thread_pool_timeout:線程超時時間

thread_pool_add_delay:創建新線程

thread_pool_destroy_delay:殺死空閑線程延遲時間

設置方式:

/etc/varnish/varnish.params (永久有效)

param.set



[[ ?VCL配置的實例 ?]]

1.負載均衡

import directors;?       導入模塊

backend websrv1 {

????.host = "192.168.1.16";

????.port = "80";

}

backend aebsrv2 {

????.host = "192.168.1.47";

????.port = "80";
}

sub vcl_init {                    定義集群

????new webcluster = directors.round_robin();     調度方法

????     webcluster.add_backend(websrv1);

????     webcluster.add_backend(websrv2);

}

sub vcl_recv {              

     set req.backend_hint = webcluster.backend();

}

2.varnish動靜分離

backend websrv1 {

????.host = "192.168.1.16";

????.port = "80";

}

backend aebsrv2 {

????.host = "192.168.1.47";

????.port = "80";
}

sub vcl_recv {

     if (req.url ~ "(?i)\.(jpg|png|gif)$") {

????     set req.backend_hint = websrv1;

     } else {

???     ?set req.backend_hint = websrv2;

    }

}

 

 

掌握 varnishstat、varnishtop

1、varnishstat?– Varnish Cache statistics ? ? 各種計數器

-f FILED_NAME

-l: 可用于-f選項指定的字段名稱列表;

-x: xml輸出格式

示例:

varnishstat ?-f MAIN.cache_hit -f MAIN.cache_miss

2、varnishtop?– Varnish log entry ranking ? ?將日志文件中相關數據排序

-i taglist,可以同時使用多個-i選項,也可以一個選項跟上多個標簽;

-I <[taglist:]regex>:僅顯示被模式匹配到的條目

-x taglist:排除列表

-X <[taglist:]regex>:僅顯示不被模式匹配到的條目

-C:忽略字符大小寫

3、varnishlog?– Display Varnish logs ? ? ? ?查看實時日志

4、varnishncsa?– Display Varnish logs in Apache / NCSA combined log format ? ? ?標準日志格式

原創文章,作者:nene,如若轉載,請注明出處:http://www.www58058.com/88357

(0)
nenenene
上一篇 2017-11-13 19:38
下一篇 2017-11-13 20:18

相關推薦

  • Keepalive高可用Nginx服務測試

    環境   系統版本:CentOS 7.2  節點1地址:10.1.8.81  節點2地址:10.1.8.83  虛擬IP地址:10.1.8.248 安裝軟件     yum -y install nginx     yum -y …

    Linux干貨 2017-02-16
  • 菜鳥教你如何磁盤分區與創建文件系統以及掛載(2)

    一、文件系統簡介與創建 1、什么是文件系統?    文件系統是操作系統用于明確存儲設備或分區上的文件的方法和數據結構;即在存儲設備上組織文件的方法。操作系統中負責管理和存儲文件信息的軟件結構稱為文件管理系統,簡稱文件系統。 2、文件系統的作用    從系統角度來看,文件系統是對文件存儲設備的空間進行組織和分配,負責文件…

    Linux干貨 2016-08-29
  • 實驗:配置靜態路由1

    實驗:配置靜態路由1 IP地址規劃如下: 注意,環境準備: 1、MAC地址不要有沖突,如果是復制的虛擬機,對于centos6需刪除網卡定義文件rm -f /etc/udev/rules.d/70-persistent-net.rules 2、清空防火墻iptables -F(查看:iptables -vnL) 3、啟用IP轉發功能:echo 1 > /…

    2017-03-26
  • 第五周練習

    1、顯示當前系統上root、fedora或user1用戶的默認shell 2、找出/etc/rc.d/init.d/functions文件中某單詞后面跟一小組括號的行,刑如:hello() 3、使用echo命令輸出一個絕對路徑,使用grep取出基名 4、找出ifconfig命令結果中的1-255之間的數字 5、查找/var目錄下屬主為root,且屬組為mai…

    2017-10-29
  • 0804練習與作業

    0804練習與作業 練習  1 、找出ifconfig 命令結果中本機的所有IPv4 地址 答: 使用cut將電腦的IP地址提取出來。   經過觀察,這些信息極為不規則,沒有明顯的分隔符。這時們需要首先提取出IP地址所在的行,然后去定義一個合適的分隔符,再利用cut進行提取即可。(思路:化繁為簡,化不規則為規則,這樣才能更好的套用我們的命…

    Linux干貨 2016-08-08
  • keepalived實現前端負載均衡器的高可用

    概述:     在之前的內容中,我們了解了當一個網站并發量大時,可以利用前端負載均衡器將用戶請求調度到后端的多個real server上,實現分散服務壓力,橫向擴展的方式,形成LB集群,但是試想一下,作為前端負載均衡器:     如果是LVS,萬一作為前端調度器的Director…

    Linux干貨 2016-11-01
欧美性久久久久