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

嚴格來講,nginx是沒有針對負載均衡後端節點的健康檢查的,可是能夠經過proxy_next_upstream來間接實現,但這個仍是會把請求轉發給故障服務器的,而後再轉發給別的服務器,這樣就浪費了一次轉發。mysql

nginx_upstream_check_module爲淘寶技術團隊開發的nginx模快,用來檢測後方server的健康狀態,若是後端服務器不可用,則因此的請求不轉發到這臺服務器。nginx

1. 安裝nginx_upstream_check_module

  • 地址:https://github.com/yaoweibin/nginx_upstream_check_module, 下載完畢後解壓
  • 進入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/ 

2. 配置nginx upstream參數

  • 增長建議配置,後端有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; }

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:

相關文章
相關標籤/搜索