首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 綜合教學

Nginx 整合 nginx_upstream_check_module 實現後端服務健康檢查

     編輯:Java 綜合教學

前言

在 Nginx 反向代理 Tomcat 叢集的架構中,當後端 Tomcat 服務掛掉時,Nginx 內建的 ngx_http_upstream_module 透過 proxy_next_upstream 機制能自動踢除故障節點。但若整台實體機器宕機(如網路中斷、作業系統死機),預設的輪詢機制無法偵測到,導致請求持續轉發至失效節點,造成大量超時錯誤。為解決此問題,引入 nginx_upstream_check_module 模組可實現主動健康檢查,精準剔除異常節點。

常見健康檢查方案對比

方案特點官方連結
ngx_http_proxy_module + ngx_http_upstream_module Nginx 內建,被動式檢查(請求失敗才切換) 官方文檔
nginx_upstream_check_module 第三方模組,主動式健康檢查,支援 TCP/HTTP/MySQL/AJP 等多種協議 GitHub 專案
ngx_http_healthcheck_module 早期第三方模組,功能較簡單,維護較少 Wiki 頁面

生產環境推薦使用 nginx_upstream_check_module,功能最完善且社群活躍。

步驟一:編譯安裝模組

  1. 下載模組原始碼
    從百度網盤或 GitHub 獲取 nginx_upstream_check_module-master,解壓至 /home/software/。
  2. 查看現有編譯參數
    ./nginx -V
    # 輸出範例:--prefix=/opt/nginx-new --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-pcre
  3. 打補丁
    進入 Nginx 原始碼目錄,套用對應版本的補丁:
    patch -p0 < ../nginx_upstream_check_module-master/check_1.5.12+.patch

    若提示 patch: command not found,先執行 yum -y install patch。補丁版本必須與 Nginx 版本匹配,否則會失敗。

  4. 重新配置並編譯
    在原有參數後追加 --add-module:
    ./configure --prefix=/opt/nginx-new --with-http_ssl_module --with-http_v2_module --with-http_stub_status_module --with-pcre --add-module=/home/software/nginx_upstream_check_module-master
    執行 make(不要執行 make install,以免覆蓋現有執行檔),然後用新編譯的 objs/nginx 替換舊二進制檔並平滑重啟。

步驟二:配置 Upstream 健康檢查

upstream backend_cluster {
    server 10.144.48.157:8205;
    server 119.29.204.12:8889;
    check interval=3000 rise=2 fall=3 timeout=3000 type=tcp;
}

參數詳解:

  • interval=3000:每 3 秒發送一次檢查封包
  • rise=2:連續 2 次成功視為 UP
  • fall=3:連續 3 次失敗視為 DOWN
  • timeout=3000:檢查超時 3 秒
  • type=tcp:使用 TCP 連線檢查(可選 http、mysql、ajp、ssl_hello 等)
  • default_down=true|false:初始狀態(預設 true,即一開始視為 DOWN,需通過檢查才標記 UP)
  • port:指定檢查埠口,預設 0 表示與服務埠口相同

步驟三:啟用狀態監控頁面

location /nstatus {
    check_status;
    access_log off;
}

瀏覽器訪問 https://nginx-ip/nstatus 即可看到各節點即時狀態:

健康檢查狀態頁面 - 正常

當節點異常時會標記為 DOWN:

健康檢查狀態頁面 - 異常

支援參數過濾,如 /nstatus?status=up 僅顯示正常節點。

總結

透過 nginx_upstream_check_module 實現主動健康檢查,能有效解決實體機器故障時 Nginx 仍持續轉發請求的問題,顯著提升服務可用性。配合狀態頁面,運維人員可即時掌握叢集健康狀態,做到心中有數。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved