嚴格來講,nginx是沒有針對負載均衡後端節點的健康檢查的,可是能夠經過proxy_next_upstream來間接實現,但這個仍是會把請求轉發給故障服務器的,而後再轉發給別的服務器,這樣就浪費了一次轉發。mysql
nginx_upstream_check_module爲淘寶技術團隊開發的nginx模快,用來檢測後方server的健康狀態,若是後端服務器不可用,則因此的請求不轉發到這臺服務器。nginx
進入nginx源碼目錄,進行打該模塊的補丁(這一步千萬不能遺漏)git
patch -p1 < ../nginx_upstream_check_module-master/check_1.5.12+.patch
而後經過./configure --add-module來增長模塊github
./configure –add-module=../ nginx_upstream_check_module-master/ 注意:若是以前安裝過nginx,須要將以前的configure參數保留
makesql
make以後的操做須要注意後端
若是nginx第一次安裝,直接執行make install便可服務器
make install
若是單純添加模塊,不須要install,而是執行如下操做,將打過補丁的nginx二進制文件覆蓋/usr/local/nginx/sbin/目錄中的文件便可負載均衡
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak cp /nginx源碼目錄/objs/nginx /usr/local/nginx/sbin/
增長建議配置,後端有8181兩個節點tcp
location /{ proxy_pass http://cluster; } upstream cluster { server 127.0.0.1:8181; server 127.0.0.1:8182; #http健康檢查相關配置 check interval=3000 rise=2 fall=3 timeout=3000 type=http; #/health/status爲後端健康檢查接口 check_http_send "HEAD /health/status HTTP/1.0\r\n\r\n"; check_http_expect_alive http_2xx http_3xx; }
interval: 向後端發送的健康檢查包的間隔,單位爲毫秒
rsie: 若是連續成功次數達到rise_count,服務器就被認爲是up
fall: 若是連續失敗次數達到fall_count,服務器就被認爲是down
timeout: 後端健康請求的超時時間,單位爲毫秒
type: 健康檢查包的類型,支持tcp、ssl_hello、http、mysql、ajpui
若是想查看後端服務器實時的健康狀態,能夠在對應server中增長如下location配置
location /nstatus { check_status; access_log off; #allow SOME.IP.ADD.RESS; #deny all; }
經過http://localhost:8080/nstatus 查看,以下圖所示,剛開始後端兩個節點都處於中止狀態,status爲down

server number爲後端服務器數量,generation爲nginx reload的次數
此時,啓動其中一臺8181,查看nginx的error.log日誌,出現以下日誌,說明8181這臺應用已經處於可檢查狀態
2018/09/07 14:07:48 [error] 85860#0: enable check peer: 127.0.0.1:8181
刷新nstatus頁面,以下圖所示,發現8181這臺狀態變爲了up,表示已鏈接成功

啓動8182,與8181過程相同,最終頁面狀態變爲以下,此時兩臺狀態均爲up: