WEB緩存系統之varnish代理以及健康狀態檢測配置

  前文咱們聊了下varnish的緩存項修剪配置,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/12666406.html;今天我來講一下varnish做爲代理服務器反向代理多主機的配置;前邊的全部操做都是針對後端主機只有一臺的狀況來講varnish的配置;在生產環境中,咱們的web站點服務器不該該只有一臺;默認狀況下才安裝好varnish的主機,在default.vcl中只能夠指定一臺後端主機的地址和端口;若是咱們後端主機是多臺的狀況下,咱們須要加載varnish的模塊directors;而後用backend+後端主機名稱(這個名稱是咱們自定義的,只要是一合法名稱便可),來分別把每一個主機的地址和端口配置好便可;html

  示例:node

   提示:以上每一個紅框中的內容表示一臺後端server;以上配置表示定義兩臺後端主機,其名稱分別爲webserver1和webserver2;web

  把主機定義好後,這裏還須要用在vcl_init狀態引擎中配置初始化一個組,而後把這兩臺主機加到對應的組中;算法

  示例:shell

   提示:以上配置表示用directors模塊中的round_robin()方法初始化一個組對象,取名叫webserver;而後把對應兩臺主機加入到這個初始化組對象中;這意味着這個組裏有兩個成員,一個是webserver1,一個是webserver2;directors.round_robin()用這個方法初始化組對象表示日後端調度的算法是輪詢,即沒有權重;要想有權重,須要用directors.random()方法;若是須要作會話保持,須要用到directors.hash()方法;後端

  示例:初始化組對象用randomf方法centos

   提示:用random方法就在後面加權重;緩存

  示例:初始化組對象用hash方法來保持會話bash

   提示:hash方法也是支持權重的;服務器

  到此咱們就把兩臺後端主機加入到webserver組中了;如今咱們能夠編譯加載咱們的配置文件,而後用varnishadm工具鏈接到控制管理shell中查看後端主機列表;

[root@test_node1-centos7 ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
200        
-----------------------------
Varnish Cache CLI 1.0
-----------------------------
Linux,3.10.0-693.el7.x86_64,x86_64,-sfile,-smalloc,-hcritbit
varnish-4.0.5 revision 07eff4c29

Type 'help' for command list.
Type 'quit' to close CLI session.


varnish> vcl.list 
200        
active          0 boot


varnish> vcl.load test default.vcl
200        
VCL compiled.

varnish> vcl.list 
200        
active          0 boot
available       0 test


varnish> vcl.use test
200        
VCL 'test' now active

varnish> backend.list 
200        
Backend name                   Refs   Admin      Probe
webserver1(192.168.0.10,,80)   2      probe      Healthy (no probe)
webserver2(192.168.0.99,,80)   2      probe      Healthy (no probe)

varnish> quit
500        
Closing CLI connection
[root@test_node1-centos7 ~]# 

  提示:能夠看到咱們編寫的vcl把多臺主機加入到webserver組的配置生效了;從上面的配置看,後端主機有兩臺,一臺是webserver1,一臺是webserver2;

  測試:用curl命令訪問192.168.0.99:8000 看看是否把用戶請求分別調度到後端個server上去了?

   提示:從上面的結果看,好像沒有把用戶的請求調度到server1上去;緣由是咱們沒有配置說明把全部未命中緩存的請求發送到後端主機上去,它默認是把第一次匹配backend 關鍵字+名稱的配置看成默認主機;因此這裏咱們怎麼訪問都調度到192.168.0.10這臺主機上去;

  示例:在vcl_recv中調用咱們以前定義的組,明確說明把未命中緩存的請求發送到該組上;

   提示:以上紅框中的內容表示把用戶請求發送到咱們定義好的組上的主機;

  測試:

   提示:從上面的結果看,咱們定義的主機上基於輪詢的方式在日後端調度;這裏測試須要把varnish上的緩存項給修剪掉,而後再次請求才能夠看到把請求調度到不一樣主機上;

以上就是varnish代理多主機的配置方法,總結以下:

  1)首先咱們要導入directors模塊;

  2)用backend關鍵字來定義後端主機,起一名稱,用花括號引入一段上下文,裏面用.host指定後端主機的IP地址,用.port指定後端主機端口;

  3)在vcl_init狀態引擎中初始化一個組對象,而後用組對象的add_backend(server)把對應主機加入到該組;

  4)在vcl_recv狀態引擎中使用咱們初始化好的組對象;用set req.backend_hint = 組對象中的backend();表示把爲能命中的用戶請求發送到該組上,至於用輪詢仍是加權輪詢仍是hash,取決於咱們初始化組對象用到的方法;

  瞭解了varnish代理多臺主機的配置後,接下來咱們再來講說varnish對後端主機作健康狀態監測的配置;對於varnish來說,對後端主機作健康狀態監測的原理是請求後端主機特定的資源,若是可以在指定的超時時長內正確響應咱們就認爲後端主機上健康狀態的,若是不能正確的響應咱們就認爲該後端主機上不健康的;在varnish中對後端主機作健康狀態監測須要用.probe 來引入一段上下文配置,明確的說明怎麼對後端作健康狀態監測(或者用probe關鍵字+名稱來引入一段公有的健康狀態監測機制,後端多臺主機能夠用.probe +名稱引用);好比請求後端主機的那個url或者用.request來指定向後端主機發送的請求的報文;對後端主機的響應多少次咱們認爲是健康的,監測頻度,超時時長等等信息;

  示例:

   提示:以上紅框中的配置就表示對webserver1這臺主機作健康狀態監測;其中.window表示基於最近的多少次檢查來判讀其健康狀態;.threshold表示最近.window中定義的檢查次數至少有多少次是成功的,咱們就認爲後端主機上健康的;.interval表示檢查的頻度,多久檢查一次;.timeout表示超長時長;綜上所述,該配置就表示對webserver1這臺主機作健康狀態監測,若是每隔2秒,超時時長爲1秒,請求該主機上的/index.html資源,在最近5次中有4次是成功的,咱們就認爲後端主機上健康的;

  固然以上是對一臺主機作健康狀態檢查的配置。若是是多臺主機,監測的方式都是同樣的,咱們能夠把對健康狀態監測的配置單獨用probe + 名稱來定義監測機制;而後在個server中用.probe +名稱來應用咱們定義的健康狀態監測的配置;

  示例:

   提示:以上配置就表示定義了一個健康狀態監測的配置其名稱爲webserver_check,而後在個後端server的配置中用.probe來對webserver_check調用;意思就表示兩臺主機都用一樣的監測配置;

  固然除了以上對rul請求外,咱們也可以使用向後端主機發送指定一的請求報文的形式來定義健康狀態監測機制;

  示例:

   提示:以上配置表示對於server1的健康狀態監測是向server1發送特定的請求首部,若是每隔2秒超時時長爲1秒,在5次請求中有4次是200的響應碼,咱們就認爲該主機上健康的,不然不健康;對於server2主機的健康狀態監測是經過項該主機上的特定資源/index.html發起請求,若是每一個2秒超時1秒的狀況下,5次請求中有4次都是200的響應碼,咱們就認爲該主機上健康的,不然不健康;若是不指定.expected_response默認值就是200;

  測試:編譯加載default.vcl 看看咱們配置的健康狀態監測是否正確

[root@test_node1-centos7 ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
200        
-----------------------------
Varnish Cache CLI 1.0
-----------------------------
Linux,3.10.0-693.el7.x86_64,x86_64,-sfile,-smalloc,-hcritbit
varnish-4.0.5 revision 07eff4c29

Type 'help' for command list.
Type 'quit' to close CLI session.


varnish> vcl.load check_cfg default.vcl
200        
VCL compiled.

varnish> vcl.use check_cfg
200        
VCL 'check_cfg' now active

varnish> 

  提示:上面load過程沒有保存,說明咱們配置後端服務器健康狀體檢查的配置沒有問題;接下來測試把後端主機服務宕機,在管理shell中使用backend.list查看對應主機是否會變爲sick?

   提示:經過上面的測試結果看,咱們把後端主機192.168.0.10這臺主機的httpd服務給停了,而後在看後端主機狀況,馬上webserver1的狀態就變爲了sick,咱們接着又把服務給啓動起來,再看後端服務器狀態,可看到當檢查到第四次是正常的響應後,狀態就變成health;說明咱們配置後端主機健康狀態監測是沒有問題的;

相關文章
相關標籤/搜索