Nginx 負載均衡 後端 監控檢測 nginx_upstream_check_module 模組的使用

丶小炒肉發表於2016-06-01

在使用nginx 的負載均衡 中,我們通常會使用到 Nginx 自帶的 ngx_http_proxy_module 健康檢測模組。

 

ngx_http_proxy_module 自帶的 健康檢測模組引數如下:

 

weight   : 輪詢權值也是可以用在ip_hash的,預設值為1


max_fails : 允許請求失敗的次數,預設為1。當超過最大次數時,返回proxy_next_upstream 模組定義的錯誤。


fail_timeout : 有兩層含義,一是在 30s 時間內最多容許 2 次失敗;二是在經歷了 2 次失敗以後,30s時間內不分配請求到這臺伺服器。


backup : 預留的備份機器。當其他所有的非backup機器出現故障的時候,才會請求backup機器,因此這臺機器的壓力最輕。


max_conns: 限制同時連線到某臺後端伺服器的連線數,預設為0即無限制。因為queue指令是commercial,所以還是保持預設吧。


proxy_next_upstream : 這個指令屬於 http_proxy 模組的,指定後端返回什麼樣的異常響應時,使用另一個realserver

 

例子如下:

 

upstream login {

      server 172.16.0.1:8081 max_fails=3 fail_timeout=30s;

 

 

 

nginx_upstream_check_module 是專門提供負載均衡器內節點的健康檢查的外部模組,由淘寶的姚偉斌大神開發。tengine 預設自帶了這個模組。

 

 

 

check 模組的引數只能出現在upstream中,引數如下:


interval : 向後端傳送的健康檢查包的間隔。


fall : 如果連續失敗次數達到fall_count,伺服器就被認為是down。


rise : 如果連續成功次數達到rise_count,伺服器就被認為是up。


timeout : 後端健康請求的超時時間。


default_down : 設定初始時伺服器的狀態,如果是true,就說明預設是down的,如果是false,就是up的。預設值是true,也就是一開始伺服器認為是不可用,要等健康檢查包達到一定成功次數以後才會被認為是健康的。


type:健康檢查包的型別,現在支援以下多種型別


tcp:簡單的tcp連線,如果連線成功,就說明後端正常。


http:傳送HTTP請求,通過後端的回覆包的狀態來判斷後端是否存活。


ajp:向後端傳送AJP協議的Cping包,通過接收Cpong包來判斷後端是否存活。


ssl_hello:傳送一個初始的SSL hello包並接受伺服器的SSL hello包。


mysql: 向mysql伺服器連線,通過接收伺服器的greeting包來判斷後端是否存活。


fastcgi:傳送一個fastcgi請求,通過接受解析fastcgi響應來判斷後端是否存活


port: 指定後端伺服器的檢查埠。你可以指定不同於真實服務的後端伺服器的埠,比如後端提供的是443埠的應用,你可以去檢查80埠的狀態來判斷後端健康狀況。預設是0,表示跟後端server提供真實服務的埠一樣。

 

check_http_expect_alive 指定HTTP回覆的成功狀態,預設認為 2XX 和 3XX 的狀態是健康的。

這裡我們也可以設定其他的。比如 404 403 等。

 

 

例子如下:(我們可以兩個模組一起使用)

 

upstream login {

      server 172.16.0.1:8081 max_fails=3 fail_timeout=30s;

 

      check interval=5000 rise=2 fall=3 timeout=1000 type=http;

      check_http_send "HEAD / HTTP/1.0\r\n\r\n";

      check_http_expect_alive http_2xx http_3xx http_4xx;

 }

 

 

 

 

設定好 upstream 以後我們可以在 server 裡面設定 status 來檢視狀態。

 

    location /status {

       check_status;

       access_log off;

       allow 172.16.0.0/16;

       deny all;

   }

 

相關文章