Nginx 負載均衡 upstream_module health check被動監測

在Nginx負載均衡中,我們很難保證說每一臺應用服務器都能一直正常的運行下去。但是我們可以通過設置Nginx來檢測這些應用服務器,檢測這些服務器當中不能訪問的。

Nginx的檢測方式分爲兩種,一種是被動監測,另一種是主動監測。下面我們分別看一下被動監測。

 

被動監測


當Nginx認爲一臺應用服務器不能被訪問的時候,它會暫時停止向這臺應用上面分發請求。直到Nginx認爲該應用服務器可以再次被訪問的時候纔會再向這臺應用服務器上面分發請求。要實現對應用服務器的監測,需要通過兩個參數來幫助。

fail_timeout——該參數表示停止分發請求至該應用服務器的時間。也就是說,如果Nginx認爲一臺應用服務器不能被訪問了,則Nginx就會停止向這臺應用服務器上分發請求。那需要多長時間Nginx纔會認爲該服務器可以被訪問從而向其分發請求呢。這就需要通過該參數來設置這個時間了。

max_fails——設置訪問失敗的最大次數。當Nginx向一臺服務器分發請求,如果失敗的次數達到該參數設置的數量,則Nginx認爲該應用服務器不能訪問。在接下來的請求就不會再發給該應用服務器。直到達到fail_timeout設置的時間纔會再次向這臺應用分發請求。

 

使用nginx的好處是它自帶有健康檢查模塊:ngx_http_upstream_module,可以做到基本的健康檢查,配置如下:

upstream backend{
    server 127.0.0.1:8020  max_fails=3 fail_timeout=40s;
    server 127.0.0.1:8021  max_fails=2;
}

server {
    listen 80;
    server_name test.cn; 
    location / {
      proxy_pass         http://backend;
    }
}

對於fail_timeout和max_fails的默認值分別爲10s和1次。也就是說,當Nginx向一臺應用服務器發送請求,如果失敗則認爲該應用服務器不可訪問。接下來的10s中請求不再分發給該應用服務器。直到10s以後會再次將請求分發給該應用服務器。

對於上面示例,我們看到對於8020應用,當請求失敗次數達到3次。Nginx會在40s內不再向該應用分發請求。直到40s以後會再次分發新的請求到該應用服務器上。對於8021應用,當請求次數達到2次,Nginx就會在10s內(因爲沒有設置fail_timeout,所以默認爲10s)不再向這臺應用發送請求。

這種方式需要我們在每臺應用服務器對應的信息後面設置,所以稱其爲被動監測。

 

nginx的ngx_http_upstream_module實現了一個基礎的健康檢查功能。這樣有一個缺點是,nginx是被動地進行健康檢查,也就是當有請求過來時,且請求打到A服務上時才能得知A服務的狀態,如果A服務異常還要轉發一次,效率受到影響。所以我們要進行主動地健康檢查,nignx定時主動地去ping後端的服務列表,當發現某服務出現異常時,把該服務從健康列表中移除,當發現某服務恢復時,又能夠將該服務加回健康列表中。淘寶有一個開源的實現(https://github.com/yaoweibin/nginx_upstream_check_module)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章