Nginx實戰-后端應用健康檢查


嚴格來說,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; } 

    interval: 向后端發送的健康檢查包的間隔,單位為毫秒
    rsie: 如果連續成功次數達到rise_count,服務器就被認為是up
    fall: 如果連續失敗次數達到fall_count,服務器就被認為是down
    timeout: 后端健康請求的超時時間,單位為毫秒
    type: 健康檢查包的類型,支持tcp、ssl_hello、http、mysql、ajp

  • 如果想查看后端服務器實時的健康狀態,可以在對應server中增加以下location配置

    location /nstatus { check_status; access_log off; #allow SOME.IP.ADD.RESS; #deny all; }

3. 查看健康檢查狀態

  • 通過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:

     


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM