在使用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;
}