1. 程式人生 > >Varnish後端主機的健康狀態檢查

Varnish後端主機的健康狀態檢查

author:JevonWei

配置後端主機的Health Check

環境

Varnish      192.168.198.139
圖片服務端    192.168.198.120
程式服務端    192.168.198.128

程式伺服器

[[email protected] ~]# vim /var/www/html/.healthchk.html
ok

圖片伺服器

[[email protected] ~]# vim /data/web/image2/.healthchk.html
oK
[[email protected] ~]# vim /data/web/images/.healthchk.html
ok

Vernish

[[email protected] ~]# vim /etc/varnish/default.vcl
    匯入directors模組
    import directors;

    定義健康檢查的機制,自定義為healthchk
    probe healthchk {
        .url = "/.healthchk.html";\\檢查的url為.healthchk.html
        .timeout = 2s;  \\超時時間為2s
        .interval = 2s;\\檢查間隔時間
        .window = 8; \\基於最近8次的檢查判斷
        .threshold = 5; \\檢查最近8次若有5次成功即為健康狀態
    }

    定義一個app程式後端伺服器
    backend appsrv1 {
        .host = "192.168.198.128";
        .port = "80";
        .probe = healthchk; \\呼叫健康檢查的機制
    }

    定義兩個圖片服務端
    backend imgsrv1 {
        .host = "192.168.198.120";
        .port = "80";
        .probe = healthchk; \\呼叫健康檢查的機制
    }
    backend imgsrv2 {
        .host = "192.168.198.120";
        .port = "8080";
        .probe = healthchk; \\呼叫健康檢查的機制
    }

    定義一個圖片伺服器組imgsrvs,並將imgsrv1和imgsrv2兩個後端圖片伺服器新增進imgsrvs組中
    sub vcl_init {
        new imgsrvs =  directors.round_robin();  \\指定排程演算法為輪詢
        imgsrvs.add_backend(imgsrv1);
        imgsrvs.add_backend(imgsrv2);
    }
    
    sub vcl_recv {
        if (req.url ~ "(?i)\.(jpg|jpeg|png|gif|svg|txt)$") {
            set req.backend_hint = imgsrvs.backend();
        } else {
            set req.backend_hint = appsrv1;
        }
    }
[
[email protected]
~]# varnish_reload_vcl \\重新載入/etc/varnish/default.vcl引數檔案

Varnish檢視後端主機的健康狀態

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 
backend.list
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8 \\Healthy為健康狀態,檢測了8次,8次成功
imgsrv1(192.168.198.120,,80)   7      probe      Healthy 8/8
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8

圖片服務端故障了一臺伺服器

新增一條防火牆規則,禁止8080埠的連線,即等同於imgsrv2伺服器的故障
[[email protected] ~]# iptables -A INPUT -p tcp --dport 8080 -j REJECT  

Varnish檢視後端主機的健康狀態

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 
backend.list
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      probe      Healthy 8/8
imgsrv2(192.168.198.120,,8080) 6      probe      Sick 0/8  \\檢查80次,0次成功,即imgsrv2服務端故障,從而imgsrv2不可用

修復使imgsrv2上線後,imgsrv2恢復正常狀態 
[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082 
backend.list
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      probe      Healthy 8/8
imgsrv2(192.168.198.120,,8080) 6      probe      Sick 4/8  \\Sick為失敗狀態
backend.list
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      probe      Healthy 8/8
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 5/8 \\當檢查次數大於等於5次時,即表示該服務端可以正常使用

Varnish手動使某後臺服務端下線,即修改伺服器健康狀態為sick

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082
backend.set_health imgsrv1 sick
200 \\將imgsrv1伺服器的狀態手動修改為sick故障狀態      

backend.set_healtlist
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      sick       Healthy 8/8 \\imgsrv1狀態為sick故障狀態
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8

將手動修改為sick狀態的後臺伺服器端上線,即將狀態修改為health

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

backend.set_health imgsrv1 healthy
200 \\將imgsrv1伺服器的狀態手動修改為healthy健康狀態,即不管物理後臺伺服器端是否正常,varnish檢測結果都為正常

backend.set_healtlist
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      sick       Healthy 8/8 \\imgsrv1狀態為sick故障狀態
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8

backend.set_healtlist
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      healthy    Healthy 8/8
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8

imgsrv1後臺伺服器端故障,不能正常使用

[[email protected] ~]# iptables -A INPUT -p tcp --dport 80 -j REJECT 

Varnish檢測後端伺服器的健康狀態

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

backend.list
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      healthy    Sick 0/8
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8

將手動修改為sick狀態的後臺伺服器端上線,即將狀態修改為health

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T

backend.set_healtlist
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      sick       Healthy 8/8 \\imgsrv1狀態為sick故障狀態
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8

backend.set_health imgsrv1 auto
200        

backend.set_healtlist
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      probe      Healthy 8/8
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8  

imgsrv1後臺伺服器端故障,不能正常使用

[[email protected] ~]# iptables -A INPUT -p tcp --dport 80 -j REJECT 

Varnish檢測後端伺服器的健康狀態

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

backend.set_healtlist
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      probe      Sick 0/8
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8

修復imgsrv1,使imgsrv1上線1

[[email protected] ~]# varnishadm -S /etc/varnish/secret -T 127.0.0.1:6082

backend.set_healtlist
200        
Backend name                   Refs   Admin      Probe
appsrv1(192.168.198.128,,80)   7      probe      Healthy 8/8
imgsrv1(192.168.198.120,,80)   7      probe      Healthy 8/8
imgsrv2(192.168.198.120,,8080) 6      probe      Healthy 8/8

相關推薦

Varnish主機健康狀態檢查

author:JevonWei 配置後端主機的Health Check 環境 Varnish 192.168.198.139 圖片服務端 192.168.198.120 程式服務端 192.168.198.128 程式伺服器 [[email 

Nginx1.11.10使用upstream_check_module模組實現節點健康檢查功能

Nginx1.11.10使用upstream_check_module模組實現後端節點健康檢查功能   1. 安裝nginx的依賴包(pcre和zlib) 1.1安裝pcre 1.2安裝zlib 2. 安裝nginx 2.1上傳安裝包(可以使用winscp、xf

nginx節點健康檢查

一、nginx健康檢查的三種方式 1、ngx_http_proxy_module 模組和ngx_http_upstream_module模組(自帶) 官網地址:http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_next

haprox動態下線主機

nbsp 最好 sock 主機 建議 apr 而不是 redis 好的 haproxy可以很好的支持主機下線,不需要編輯配置文件,也不需要重新reload服務,通過本身的socket發送指令即可; 當你的應用程序是高可用狀態,一般部署的是>2的,這個時候就可以通過ha

Kubernetes 健康狀態檢查(九)

強大的自愈能力是 Kubernetes 這類容器編排引擎的一個重要特性。自愈的預設實現方式是自動重啟發生故障的容器。除此之外,使用者還可以利用 Liveness 和 Readiness 探測機制設定更精細的健康檢查,進而實現如下需求: 零停機部署。 避免部署無效的映象。 更加安全的滾動升級。

---深入理解雙重檢查鎖定

Java中的雙重檢查鎖定 雙重檢查鎖定又稱雙重效驗鎖,以前常常用於Java中的單例模式,在併發程式設計中的執行緒池中常常用到該模式,並且在Spring中DI(依賴注入)也用到該模式的思想,當Spring執行的時候將我們加入註解的bean(Java物件)遍歷出來,並建立其相關的一個例項,在程式的執

容器的健康狀態檢查

docker 1.12新加了不少命令,而健康檢查相關的命令,讓容器的健康檢查變得十分的簡單。 可以通過 docker run --help 找到和健康檢查相關的命令以及介紹: --health-cmd string Command to run to check heal

系統開發之檢查意識

klist 深度 系統 問題 男人 很好 car child 發現 生活中要有常識意識,行走在外要有交通安全意識,競技遊戲中要有參戰和逃命意識。軟件開發作為一項極易踩坑而且犯錯成本很高的工作,一定要有強烈的檢查意識。我在工作中發現,檢查意識能帶來很多明顯的好處:

叢集故障處理之處理思路以及健康狀態檢查(三十二)

前言                按照筆者的教程,大家應該都能夠比較順暢的完成k8s叢集的部署,不過由於環境、配置以及對Linux、k8s的不瞭解會導致很多問題、異常和故障,這裡筆者分享一些處理技巧和思路,以及部分常見的問題,

nginx對節點的健康檢查

nginx 檢查最近梳理了下手頭的業務,發現nginx層配有幾種健康檢查方式,在這裏做個總結,記錄下nginx做負載均衡時對後端節點的健康檢查方式:1、ngx_http_proxy_module 模塊中的下面三個指令(nginx自帶模塊) proxy_connect_timeout 60s

nginx反代+varnish緩存+LAMP平臺集群實現

nginxvarnishlamp較為完善的集群實現方式,前端兩臺LVS主機進行調度轉發到前端的兩臺nginx反代服務器,由nginx反代服務器將請求資源轉發到後端的varnish主機中,若varnish緩存服務器中存在所請求資源的緩存,則由varnish主機向nginx反代服務器進行響應,再有nginx服務器

高可用haproxy調度varnish服務器緩存動靜分離集群架構

haproxy varnish(1) 動靜分離部署wordpress,動靜都要能實現負載均衡,要註意會話的問題;(2) 在haproxy和後端主機之間添加varnish進行緩存;(3) 給出設計拓撲,寫成博客;(4) haproxy的設定要求: (a) stats page,要求僅能通過本地訪問使用管理接口;

nginx反代varnish緩存服務器實現amp動靜分離架構

varnish1.前端nginx做調度器及反代服務器,將用戶的請求調度至後端的兩臺varnish,緩存調度算法使用一致性hash算法保證緩存命中率;2.兩臺varnish反向代理用戶請求至三個(組)後端主機,分別為存儲靜態資源(htm,html,css,js),應用程序服務器(可以部署wordpress或Di

處理高並發狀態的多次重復請求

由於 build 無限循環 目前 檢索 沒有 調用 body 通過   相信做Web的,都有可能遇到有多次重復請求發送到後端的情況。而這些重復請求,可能大都是由於在網絡較差的情況下,用戶多次連續點擊。最後導致後端面臨處理大量重復請求的境地。阻止這些情況發生的方法有很多。  

axios在返回401時,獲取不到error.response和返回的狀態碼問題

在axios中爬過的坑 專案是後端採用的grails + spring cloud + gorm + es等外掛做的, 前端採用的是element + axios + vue等,身份認證採用的是spring cloud oauth2.0 . 開發採用的是gradle搭建,語言使用的是gr

Keepalived實現LVS(DR模式)+自動健康檢測

上一篇部落格《Keepalived實現NAT+LVS+後端健康檢測》簡單介紹了NAT模式的LVS搭建步驟,下面介紹一下使用更普遍、網路結構更簡單的DR模式搭建方法。 不同與NAT模式,DR模式不需要跨兩個網段,負載均衡伺服器和真實Web伺服器還有客戶端都可以放在同一個網段裡

使用varnish的緩存功能實現服務器的負載均衡及資源的定向分發

else cluster 圖片格式 服務器組 調度 模塊 dfa pipe host 結構拓撲圖:使用varnish軟件實現後端兩臺web服務器的負載均衡並實現客戶端請求內容的定向分發。準備基礎環境: 在三臺後端服務器上安裝httpd服務,其中一臺作為圖片服務器提供服務,另

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

  前文我們聊了下varnish的快取項修剪配置,回顧請參考https://www.cnblogs.com/qiuhom-1874/p/12666406.html;今天我來說一下varnish作為代理伺服器反向代理多主機的配置;前邊的所有操作都是針對後端主機只有一臺的情況來說varnish的配置;在生產環境中

進行獨立於後臺的前端開發——學習Mockjs

lis 返回值 大於等於 con 函數 ddl -m sca 註意 Mockjs實現的功能 1.讓前端攻城師獨立於後端進行開發。 2.通過隨機數據,模擬各種場景。增加單元測試的真實性 3.不需要修改既有代碼,就可以攔截 Ajax 請求,返回模擬的響應數據。 4.用法簡單 5

nginx對的目錄進行反向代理

plonenginx主配置文件worker_processes 1; error_log /home/data/logs/nginx/error.log; #error_log logs/error.log; #error_log logs/error.log notice; #error_log