nginx自帶的針對(duì)后端節(jié)點(diǎn)健康檢查的功能比較簡(jiǎn)單竞慢,通過(guò)默認(rèn)自帶的ngx_http_proxy_module 模塊和ngx_http_upstream_module模塊中的相關(guān)指令來(lái)完成當(dāng)后端節(jié)點(diǎn)出現(xiàn)故障時(shí)处铛,自動(dòng)切換到健康節(jié)點(diǎn)來(lái)提供訪問(wèn)。
舉例
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;
}
參數(shù)說(shuō)明:
max_fails=number # 設(shè)定Nginx與服務(wù)器通信的嘗試失敗的次數(shù)。在fail_timeout參數(shù)定義的時(shí)間段內(nèi)河泳,如果失敗的次數(shù)達(dá)到此值阴挣,Nginx就認(rèn)為服務(wù)器不可用。在下一個(gè)fail_timeout時(shí)間段登钥,服務(wù)器不會(huì)再被嘗試畔师。 失敗的嘗試次數(shù)默認(rèn)是1。設(shè)為0就會(huì)停止統(tǒng)計(jì)嘗試次數(shù)牧牢,認(rèn)為服務(wù)器是一直可用的看锉。 你可以通過(guò)指令proxy_next_upstream姿锭、fastcgi_next_upstream和 memcached_next_upstream來(lái)配置什么是失敗的嘗試。 默認(rèn)配置時(shí)伯铣,http_404狀態(tài)不被認(rèn)為是失敗的嘗試呻此。
fail_timeout=time # 設(shè)定服務(wù)器被認(rèn)為不可用的時(shí)間段以及統(tǒng)計(jì)失敗嘗試次數(shù)的時(shí)間段。在這段時(shí)間中腔寡,服務(wù)器失敗次數(shù)達(dá)到指定的嘗試次數(shù)焚鲜,服務(wù)器就被認(rèn)為不可用。默認(rèn)情況下放前,該超時(shí)時(shí)間是10秒忿磅。
這種情況Nginx無(wú)法主動(dòng)識(shí)別后端節(jié)點(diǎn)狀態(tài),后端即使有不健康節(jié)點(diǎn)凭语, 負(fù)載均衡器依然會(huì)先把該請(qǐng)求轉(zhuǎn)發(fā)給該不健康節(jié)點(diǎn)葱她,然后再轉(zhuǎn)發(fā)給別的節(jié)點(diǎn),這樣就會(huì)浪費(fèi)一次轉(zhuǎn)發(fā)似扔,而且自帶模塊無(wú)法做到預(yù)警吨些。So 此時(shí)使用第三方模塊 nginx_upstream_check_module模塊
nginx_upstream_check_module模塊由淘寶團(tuán)隊(duì)開(kāi)發(fā) 淘寶自己的 tengine 上是自帶了該模塊的,大家可以訪問(wèn)淘寶tengine的官網(wǎng)來(lái)獲取該版本的nginx炒辉,官方地址:http://tengine.taobao.org/锤灿。我們使用的是原生Nginx,采用添加模塊的方式
部署流程
1辆脸、下載nginx_upstream_check_module模塊
#進(jìn)入nginx安裝目錄
cd /usr/lcoal/nginx
#下載nginx_upstream_check_module模塊
wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master
#解壓
unzip master
2但校、為nginx打補(bǔ)丁
cd nginx-1.11.5 # 進(jìn)入nginx的源碼目錄
# -p0,是“當(dāng)前路徑” -p1啡氢,是“上一級(jí)路徑”
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 # 檢查下是否有問(wèn)題
注意 check版本和Nginx版本要求有限制 1.12以上版本的nginx状囱,補(bǔ)丁為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;
}
參數(shù)解釋
1. #添加了nginx_upstream_check_module模塊之后倘是,該項(xiàng)生效
2. #用于檢測(cè)后方realserver的健康狀態(tài)亭枷,如果后端服務(wù)器不可用,則請(qǐng)求不轉(zhuǎn)發(fā)到這臺(tái)服務(wù)器搀崭。
3. #interval:每隔3s檢測(cè)一次
4. #rise:檢測(cè)次數(shù)叨粘,如果連續(xù)檢測(cè)2次都成功,那就證明該后端節(jié)點(diǎn)正常
5. #fall:檢測(cè)次數(shù)瘤睹,如果連續(xù)檢測(cè)5次都失敗升敲,那就證明該后端節(jié)點(diǎn)不健康
6. #timeout:超時(shí)時(shí)間為1s
啟動(dòng)或者重載nginx
輸入 /nstatus
從上圖可以看出 現(xiàn)在有兩個(gè)節(jié)點(diǎn) 我們?nèi)藶榘哑渲?7.85節(jié)點(diǎn)API關(guān)閉,此時(shí)狀態(tài)為down 節(jié)點(diǎn)正常時(shí)會(huì)恢復(fù)為正常狀態(tài)