天天看點

nginx upstream 健康檢查

嚴格來說,nginx是沒有針對負載均衡後端節點的健康檢查的,但是可以通過proxy_next_upstream來間接實作,但這個還是會把請求轉發給故障伺服器的,然後再轉發給别的伺服器,這樣就浪費了一次轉發。

nginx_upstream_check_module為淘寶技術團隊開發的nginx模快,用來檢測後方server的健康狀态,如果後端伺服器不可用,則是以的請求不轉發到這台伺服器。

1. 安裝nginx_upstream_check_module

  • 位址:​​https://github.com/yaoweibin/nginx_upstream_check_module,​​ 下載下傳完畢後解壓
  • 進入nginx源碼目錄,進行打該子產品的更新檔(這一步千萬不能遺漏)
patch -p1 < ../nginx_upstream_check_module-master/check_1.5.12+.patch      
  • 然後通過./configure --add-module來增加子產品
./configure –add-module=../ nginx_upstream_check_module-master/
注意:如果之前安裝過nginx,需要将之前的configure參數保留      
  • make
  • 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/      

2. 配置nginx upstream參數

  • 增加建議配置,後端有8181兩個節點
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;
        }      
  • 如果想檢視後端伺服器實時的健康狀态,可以在對應server中增加以下location配置
location /nstatus {
  check_status;
  access_log off;
  #allow SOME.IP.ADD.RESS;
  #deny all;
}      
  • 通過​​http://localhost:8080/nstatus​​ 檢視,如下圖所示,剛開始後端兩個節點都處于停止狀态,status為down
  • 此時,啟動其中一台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:

繼續閱讀