nginx自帶的針對後端節點健康檢查的功能比較簡單,通過默認自帶的ngx_http_proxy_module 模塊和ngx_http_upstream_module模塊中的相關指令來完成當後端節點出現故障時,自動切換到健康節點來提供訪問。
舉例
upstream name {
server 192.168.57.110:8080 max_fails=1 fail_timeout=10s;
server 192.168.57.101:8080 max_fails=1 fail_timeout=10s;
}
參數說明:
max_fails=number # 設定Nginx與伺服器通信的嘗試失敗的次數。在fail_timeout參數定義的時間段內,如果失敗的次數達到此值,Nginx就認為伺服器不可用。在下一個fail_timeout時間段,伺服器不會再被嘗試。 失敗的嘗試次數默認是1。設為0就會停止統計嘗試次數,認為伺服器是一直可用的。 你可以通過指令proxy_next_upstream、fastcgi_next_upstream和 memcached_next_upstream來配置什麼是失敗的嘗試。 默認配置時,http_404狀態不被認為是失敗的嘗試。
fail_timeout=time # 設定伺服器被認為不可用的時間段以及統計失敗嘗試次數的時間段。在這段時間中,伺服器失敗次數達到指定的嘗試次數,伺服器就被認為不可用。默認情況下,該超時時間是10秒。
這種情況Nginx無法主動識別後端節點狀態,後端即使有不健康節點, 負載均衡器依然會先把該請求轉發給該不健康節點,然後再轉發給別的節點,這樣就會浪費一次轉發,而且自帶模塊無法做到預警。So 此時使用第三方模塊 nginx_upstream_check_module模塊
nginx_upstream_check_module模塊由淘寶團隊開發 淘寶自己的 tengine 上是自帶了該模塊的,大家可以訪問淘寶tengine的官網來獲取該版本的nginx,官方地址:http://tengine.taobao.org/。我們使用的是原生Nginx,採用添加模塊的方式
部署流程
1、下載nginx_upstream_check_module模塊
#進入nginx安裝目錄
cd /usr/lcoal/nginx
#下載nginx_upstream_check_module模塊
wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master
#解壓
unzip master
cd nginx-1.11.5 # 進入nginx的源碼目錄
# -p0,是「當前路徑」 -p1,是「上一級路徑」
patch -p0 < ../nginx_upstream_check_module-master/check_1.11.5+.patch
#nginx -V 可以查看原有配置 輸出 ./configure --prefix=/usr/local/nginx
#增加upstream_check模塊
./configure --prefix=/usr/local/nginx --add-module=../nginx_upstream_check_module-master
make
/usr/local/nginx/sbin/nginx -t # 檢查下是否有問題
注意 check版本和Nginx版本要求有限制 1.12以上版本的nginx,補丁為check_1.11.5+.patch 具體參考github https://github.com/yaoweibin/nginx_upstream_check_module
3.修改配置文件,讓nginx_upstream_check_module模塊生效
upstream name {
server 192.168.57.207:8090;
server 192.168.57.85:80;
check interval=3000 rise=2 fall=5 timeout=1000 type=http;
}
參數解釋
啟動或者重載nginx
輸入 /nstatus
從上圖可以看出 現在有兩個節點 我們人為把其中57.85節點API關閉,此時狀態為down 節點正常時會恢復為正常狀態