前文我們聊了下varnish的快取項修剪配置,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/12666406.html;今天我來說一下varnish作為代理服務器反向代理多主機的配置;前邊的所有操作都是針對后端主機只有一臺的情況來說varnish的配置;在生產環境中,我們的web站點服務器不應該只有一臺;默認情況下才安裝好varnish的主機,在default.vcl中只可以指定一臺后端主機的地址和埠;如果我們后端主機是多臺的情況下,我們需要加載varnish的模塊directors;然后用backend+后端主機名稱(這個名稱是我們自定義的,只要是一合法名稱即可),來分別把每個主機的地址和埠配置好即可;
示例:

提示:以上每個紅框中的內容表示一臺后端server;以上配置表示定義兩臺后端主機,其名稱分別為webserver1和webserver2;
把主機定義好后,這里還需要用在vcl_init狀態引擎中配置初始化一個組,然后把這兩臺主機加到對應的組中;
示例:

提示:以上配置表示用directors模塊中的round_robin()方法初始化一個組物件,取名叫webserver;然后把對應兩臺主機加入到這個初始化組物件中;這意味著這個組里有兩個成員,一個是webserver1,一個是webserver2;directors.round_robin()用這個方法初始化組物件表示往后端調度的演算法是輪詢,即沒有權重;要想有權重,需要用directors.random()方法;如果需要做會話保持,需要用到directors.hash()方法;
示例:初始化組物件用randomf方法

提示:用random方法就在后面加權重;
示例:初始化組物件用hash方法來保持會話

提示: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;說明我們配置后端主機健康狀態監測是沒有問題的;
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/108855.html
標籤:Linux
