Nginx - 健康檢查終極指南:探索Upstream Check模塊

文章目錄

  • 概述
  • upstream_check_module模塊安裝和配置指南
    • 模塊安裝步驟
    • 基本配置示例
    • 詳細配置說明
    • 檢查類型和參數
    • 常見問題及解決方案
  • SSL檢查和DNS解析功能
    • SSL檢查配置示例和說明
      • 配置示例
    • DNS解析配置示例和說明
        • 配置示例
    • 結合實際應用場景的高級配置示例
      • 綜合SSL檢查與DNS解析
    • 總結和常見問題解決
  • 動態權重調整和自定義健康檢查腳本
    • 動態權重調整
      • 配置示例
    • 自定義健康檢查腳本
      • 自定義健康檢查示例
    • 綜合配置示例
    • 總結和常見問題解決

在這里插入圖片描述


概述

nginx自帶的ngx_http_proxy_modulengx_http_upstream_module提供了基本的負載均衡功能,但確實缺少對后端節點健康狀態的主動檢測機制。

為了實現健康檢查并避免請求轉發到故障節點,可以考慮使用第三方模塊nginx_upstream_check_module,這個模塊可以有效地檢測后端服務的健康狀態,并在后端服務器不可用時暫停轉發請求。

ngx_http_upstream_module是淘寶技術團隊開發的nginx模快nginx_upstream_check_module來檢測后方服務的健康狀態,如果后端服務器不可用,則所有的請求不轉發到這臺服務器。

使用nginx_upstream_check_module可以實現以下步驟:

  1. 安裝nginx_upstream_check_module模塊。
  2. 配置nginx以使用該模塊,并設置健康檢查參數,如檢查間隔、超時等。
  3. 配置負載均衡器的upstream,使用ngx_http_upstream_module定義后端節點,并使用nginx_upstream_check_module進行健康檢查。
  4. 當后端節點被標記為不可用時,nginx將停止向該節點轉發請求,直到節點恢復正常。

簡單的示例配置:

http {upstream backend {server backend1.example.com;server backend2.example.com;check interval=3000 rise=2 fall=5 timeout=1000 type=http;}server {location / {proxy_pass http://backend;}}
}

在這個示例中,我們定義了一個名為backend的負載均衡器,其中包含兩個后端節點。check指令啟用了健康檢查,并指定了檢查的參數,如間隔、成功次數、失敗次數和超時時間。

這樣,nginx將定期檢查后端節點的健康狀態,并根據檢查結果決定是否向該節點轉發請求。如果后端節點被標記為不可用,nginx將暫停將請求轉發到該節點,直到其恢復為可用狀態。


upstream_check_module模塊安裝和配置指南

upstream_check_module模塊用于Nginx的upstream節點(后端服務器)的健康檢查。它可以定期檢查每個節點的狀態,自動標記不可用的節點,從而實現負載均衡的高可用性。

模塊安裝步驟

  1. 下載Nginx源代碼

    wget http://nginx.org/download/nginx-1.24.0.tar.gz
    tar -xzvf nginx-1.24.0.tar.gz
    cd nginx-1.24.0
    
  2. 下載upstream_check_module源代碼

    git clone https://github.com/yaoweibin/nginx_upstream_check_module.git
    cd nginx_upstream_check_module
    
  3. 應用補丁

    patch -p1 < nginx_upstream_check_module/check_1.24.0+.patch
    cd ..
    
  4. 編譯Nginx

    ./configure --add-module=./nginx_upstream_check_module
    make
    sudo make install
    

基本配置示例

在Nginx配置文件中添加以下內容:

worker_processes 1;  # 設置Nginx工作進程的數量為1events {worker_connections 1024;  # 每個工作進程的最大連接數為1024
}http {include       mime.types;  # 包含MIME類型配置文件default_type  application/octet-stream;  # 默認MIME類型為application/octet-streamsendfile        on;  # 啟用sendfile系統調用傳輸文件keepalive_timeout  65;  # 客戶端與服務器之間的keep-alive連接超時時間為65秒upstream i4t.com {  # 定義名為i4t.com的負載均衡器server 10.4.81.41:900;  # 后端服務器1的IP地址和端口號server 10.4.81.42:900;  # 后端服務器2的IP地址和端口號check interval=3000 rise=2 fall=5 timeout=1000 type=http ;  # 啟用健康檢查功能,檢查間隔為3000毫秒,成功次數達到2次則標記為上線,失敗次數達到5次則標記為下線,超時時間為1000毫秒,檢查類型為http }server {listen       80;  # 監聽80端口,接收HTTP請求server_name  localhost;  # 服務器名為localhostlocation / {proxy_pass http://ip:port/xxxx;  # 請求代理}location /status1 {stub_status on;      # 啟用內置的狀態信息頁面access_log  off;  # 關閉對該位置的訪問日志記錄}location /status2 {     # 配置使用upstream_check_module模塊的健康檢查check_status;  # 啟用upstream_check_module的狀態信息頁面access_log off;  # 關閉對該位置的訪問日志記錄#allow SOME.IP.ADD.RESS; #可以設置允許網段訪問#deny all;}}
}  

在這里插入圖片描述

在這里插入圖片描述

詳細配置說明

  • interval:健康檢查的時間間隔(毫秒)。
  • rise:連續成功響應的次數。
  • fall:連續失敗響應的次數。
  • timeout:健康檢查的超時時間(毫秒)。
  • type:檢查類型(如httptcp等)。

檢查類型和參數

在這里插入圖片描述

  1. HTTP檢查

    check_http_send "GET /health_check HTTP/1.0\r\n\r\n";
    check_http_expect_alive http_2xx http_3xx;
    
  2. TCP檢查

    check interval=3000 rise=2 fall=5 timeout=1000 type=tcp;
    
  3. MySQL檢查

    check interval=3000 rise=2 fall=5 timeout=1000 type=mysql;
    check_mysql_send "select 1";
    check_mysql_expect_alive success;
    

常見問題及解決方案

  1. Nginx無法啟動

    • 檢查Nginx配置文件中的語法是否正確,使用命令nginx -t進行驗證。
  2. 健康檢查失敗

    • 確認后端服務器的健康檢查端點是否正確響應。
    • 檢查防火墻設置是否允許Nginx進行健康檢查。
  3. 補丁應用失敗

    • 確認所用的Nginx版本與補丁版本是否匹配。

SSL檢查和DNS解析功能

述如何使用upstream_check_module模塊實現SSL檢查和DNS解析功能。

SSL檢查配置示例和說明

要對后端節點進行SSL檢查,可以在配置中指定檢查類型為ssl_hello或者使用https進行更詳細的HTTP請求檢查。

配置示例

  1. SSL握手檢查

    upstream backend {server backend1.example.com:443;server backend2.example.com:443;# 添加SSL握手健康檢查check interval=3000 rise=2 fall=5 timeout=1000 type=ssl_hello;
    }
    
  2. HTTPS請求檢查

    upstream backend {server backend1.example.com:443;server backend2.example.com:443;# 添加HTTPS健康檢查check interval=3000 rise=2 fall=5 timeout=3000 type=https;check_http_send "GET /health_check HTTP/1.1\r\nHost: backend1.example.com\r\n\r\n";check_http_expect_alive http_2xx http_3xx;
    }
    

DNS解析配置示例和說明

對于動態解析upstream節點,可以使用resolver指令來配置DNS服務器。

配置示例
http {resolver 8.8.8.8 8.8.4.4 valid=300s;upstream backend {server backend1.example.com:80;server backend2.example.com:80;# 添加健康檢查check interval=3000 rise=2 fall=5 timeout=1000 type=http;}server {listen 80;location / {proxy_pass http://backend;}}
}

在上述配置中,resolver指令配置了DNS服務器地址,并設置了300秒的緩存時間。

結合實際應用場景的高級配置示例

綜合SSL檢查與DNS解析

http {resolver 8.8.8.8 8.8.4.4 valid=300s;upstream backend {server backend1.example.com:443;server backend2.example.com:443;# 添加SSL握手健康檢查check interval=3000 rise=2 fall=5 timeout=1000 type=ssl_hello;# 或者使用HTTPS請求檢查check interval=3000 rise=2 fall=5 timeout=3000 type=https;check_http_send "GET /health_check HTTP/1.1\r\nHost: backend1.example.com\r\n\r\n";check_http_expect_alive http_2xx http_3xx;}server {listen 80;location / {proxy_pass https://backend;proxy_ssl_server_name on;}}
}

在此配置中,我們結合了SSL檢查和DNS解析,確保后端節點既能夠通過DNS動態解析,又能通過SSL握手或HTTPS請求進行健康檢查。


總結和常見問題解決

  1. SSL證書問題

    • 確保后端服務器的SSL證書是有效的,可以使用工具(如openssl s_client)手動驗證證書。
    • 在使用https檢查時,確保check_http_send中的Host頭部信息正確。
  2. DNS解析問題

    • 確保Nginx能夠訪問配置的DNS服務器。
    • 確認解析的域名在DNS服務器上是可解析的,并且記錄是正確的。

在這里插入圖片描述

動態權重調整和自定義健康檢查腳本

如何在Nginx中實現動態權重調整和自定義健康檢查腳本。

動態權重調整

動態權重調整允許根據服務器的健康狀態或負載情況動態調整負載均衡的權重,從而更有效地分配請求。雖然Nginx本身不直接支持動態權重調整,但可以通過外部工具和腳本結合Nginx的API實現。

配置示例

假設我們使用一個外部工具來監控服務器負載,并通過Nginx的HTTP API來調整權重。

  1. 設置HTTP API模塊
    需要啟用Nginx的nginx-http-api-module模塊,該模塊通常需要自行編譯:

    ./configure --add-module=path/to/nginx-http-api-module
    make
    sudo make install
    
  2. 配置示例

    http {upstream backend {server backend1.example.com:80 weight=5;server backend2.example.com:80 weight=5;}server {listen 80;location / {proxy_pass http://backend;}location /upstream_conf {api;allow 127.0.0.1;  # 僅允許本地訪問APIdeny all;}}
    }
    
  3. 動態調整權重
    通過HTTP API來調整權重,示例如下:

    curl -X POST "http://localhost/upstream_conf?upstream=backend&server=backend1.example.com:80&weight=10"
    

自定義健康檢查腳本

Nginx的upstream_check_module支持自定義健康檢查腳本,這些腳本可以用來執行特定的檢查邏輯,并返回健康狀態。

自定義健康檢查示例

假設我們編寫一個自定義腳本,檢查后端服務器上一個特定的服務是否正常運行。

  1. 編寫自定義健康檢查腳本
    創建一個名為custom_check.sh的腳本:

    #!/bin/bash
    response=$(curl -s -o /dev/null -w "%{http_code}" http://backend1.example.com/health_check)if [ "$response" -eq 200 ]; thenecho "up"
    elseecho "down"
    fi
    
  2. 配置Nginx使用自定義腳本

    http {upstream backend {server backend1.example.com:80;server backend2.example.com:80;# 添加自定義健康檢查check interval=5000 rise=2 fall=5 timeout=1000 type=external;check_external_cmd /path/to/custom_check.sh;}server {listen 80;location / {proxy_pass http://backend;}}
    }
    

綜合配置示例

以下示例結合了動態權重調整和自定義健康檢查腳本:

http {resolver 8.8.8.8 8.8.4.4 valid=300s;upstream backend {server backend1.example.com:80 weight=5;server backend2.example.com:80 weight=5;# 添加自定義健康檢查check interval=5000 rise=2 fall=5 timeout=1000 type=external;check_external_cmd /path/to/custom_check.sh;}server {listen 80;location / {proxy_pass http://backend;}location /upstream_conf {api;allow 127.0.0.1;  # 僅允許本地訪問APIdeny all;}}
}

總結和常見問題解決

  1. 動態權重調整

    • 確保外部工具或腳本能夠正確監控和反饋服務器負載情況。
    • 使用HTTP API進行權重調整時,確保API的安全性,如限制訪問權限。
  2. 自定義健康檢查腳本

    • 腳本需要具有可執行權限,并確保路徑正確。
    • 確保腳本返回的狀態符合Nginx的預期,如"up"或"down"。

在這里插入圖片描述

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14115.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14115.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14115.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Doris【部署 03】Linux環境Doris數據庫部署異常問題收集解決(不斷更新)

Linux環境Doris數據庫部署異常問題 1.FE1.1 Unknown system variable character_set_database1.2 notify new FE type transfer: UNKNOWN1.3 mysql_load_server_secure_path1.4 Only unique table could be updated1.5 too many filtered rows 2.BE2.1 Have not get FE Master …

python:大文件分批/塊導入數據庫方式記錄

一、問題背景 對于數據文件比較大的數據&#xff0c;一次性串聯sql進行入庫&#xff0c;往往會受到數據庫本身對sql長度的限制&#xff0c;從而需要分塊或者分批次&#xff0c;將大數據文件一點一點的進行入庫。特針對這種入庫方式&#xff0c;進行一個簡單記錄&#xff0c;各…

spring的控制反轉(IoC)容器作用是什么?

控制反轉&#xff08;Inversion of Control&#xff0c;IoC&#xff09;容器是一種強大的設計模式&#xff0c;在現代軟件開發&#xff0c;特別是在使用Spring框架等企業級Java應用中至關重要。IoC容器主要作用是管理應用程序中對象的生命周期和依賴關系。我會逐步解釋它的作用…

YOLOv8改進 | 主干網絡 | 增加網絡結構增強小目標檢測能力【獨家創新——附結構圖】

??????本專欄所有程序均經過測試,可成功執行?????? 在目標檢測領域內,盡管YOLO系列的算法傲視群雄,但在某些方面仍然存在改進的空間。在YOLOv8提取特征的時候,由于卷積的緣故,會導致很多信息的丟失。對于小目標來說更是如此,這樣將大幅度降低小目標的檢測能…

pinpoint服務監控

Pinpoint是一個開源的APM&#xff08;應用性能管理&#xff09;系統&#xff0c;主要用于監控和管理Java應用程序的性能。它提供了實時的性能指標、分布式追蹤和診斷等功能&#xff0c;幫助開發和運維快速定位和解決應用程序中的性能問題。 pinpoint其他部分不變&#xff0c;H…

正確可用--Notepad++批量轉換文件編碼為UTF8

參考了:Notepad批量轉換文件編碼為UTF8_怎么批量把ansi轉成utf8-CSDN博客??????https://blog.csdn.net/wangmy1988/article/details/118698647我參考了它的教程,但是py腳本寫的不對. 只能改一個.不能實現批量更改. 他的操作步驟沒問題,就是把腳本代碼換成我這個. #-*-…

graspnet+Astra2相機實現部署

graspnetAstra2相機實現部署 &#x1f680; 環境配置 &#x1f680; ubuntu 20.04Astra2相機cuda 11.0.1cudnn v8.9.7python 3.8.19pytorch 1.7.0numpy 1.23.5 1. graspnet的復現 具體的復現流程可以參考這篇文章&#xff1a;Ubuntu20.04下GraspNet復現流程 這里就不再詳細…

數據庫系統概論(第5版)復習筆記

筆記的Github倉庫地址 &#x1f446;這是筆記的gihub倉庫&#xff0c;內容是PDF格式。 因為圖片和代碼塊太多&#xff0c;放到CSDN太麻煩了&#xff08;比較懶&#x1f923;&#xff09; 如果感覺對各位有幫助的話歡迎點一個?\^o^/

41-4 DDOS攻擊防護實戰

一、UDP FLOOD攻擊 # hping3 -q -n -a <攻擊IP> -S -s <源端口> --keep -p <目的端口> --flood <被攻擊IP> hping3 --udp -s 6666 -p 53 -a 192.168.1.6 --flood 192.168.1.13 這個命令是使用hping3工具進行UDP Flood攻擊的命令。下面是各個選項的作…

three.js能實現啥效果?看過來,這里都是它的菜(06)

這是第五期了&#xff0c;本期繼續分享three.js可以實現的3D動畫案例&#xff0c;有老鐵反饋再發案例的時候&#xff0c;是否可以順道分享一下three.js的知識點&#xff0c;好吧&#xff0c;安排。 材質動畫 材質動畫可以實現各種復雜的視覺效果&#xff0c;包括但不限于以下…

【css】引入背景圖時候,路徑寫入@會報錯

看報錯信息 我的寫法 解決辦法 在前面加個~

js解決數字小數計算出現的精度丟失問題(2024-05-24)

精度丟失的原因 js小數進行數值運算時出現精度丟失問題 JavaScript 的number類型在進行運算時都先將十進制轉二進制&#xff0c;此時&#xff0c;小數點后面的數字轉二進制時會出現無限循環的問題。 為了避免這一個情況&#xff0c;要舍0進1&#xff0c;此時就會導致精度丟失…

企業寬帶跑pcdn會被查嗎?

企業寬帶使用PCDN技術&#xff0c;本身并不違反相關規定&#xff0c;因此一般不會被查。PCDN是一種內容分發網絡技術&#xff0c;通過將內容緩存在離用戶更近的服務器上&#xff0c;減少數據傳輸的延遲&#xff0c;提高訪問速度。這種技術可以提高網頁加載速度和視頻播放流暢度…

Excel未響應時強關后,Excel插件消失

目錄 我們分析一下插件消失的原因&#xff1a; 針對上面表現出來的2個問題&#xff0c;進行針對性的解決 &#xff1a; 1、不被關進去&#xff0c;是不是就沒有后續的一系列的問題了&#xff0c;各自安好 2、保留住自動加載的行為 PS&#xff1a;配置受信任的位置注冊列表…

2024電工杯B題保姆級分析完整思路+代碼+數據教學

2024電工杯B題保姆級分析完整思路代碼數據教學 B題題目&#xff1a;大學生平衡膳食食譜的優化設計及評價 接下來我們將按照題目總體分析-背景分析-各小問分析的形式來 總體分析&#xff1a; 題目要求對兩份一日膳食食譜進行營養分析和調整&#xff0c;然后設計優化的平衡膳…

生成模型 | 從 VAE 到 Diffusion Model (上)

文章目錄 一&#xff0c;GAN(對抗式生成網絡&#xff09;二&#xff0c;Auto-Encoder(AE) 和 Denoising Auto-Encoder (DAE)三&#xff0c;VAE四&#xff0c;VQ-VAE (Vector Quantized Variational Autoencoder)VQ-VAE 2小總結&#xff1a; 五&#xff0c;DALL-E &#xff08;O…

硅谷裸機云服務器性能測評哪些內容

硅谷裸機云服務器&#xff0c;作為云計算領域的一股新興力量&#xff0c;近年來受到了廣泛關注。其強大的性能和靈活性為用戶提供了更高效、更穩定的云計算服務。那么&#xff0c;硅谷裸機云服務器的性能測評究竟包括哪些內容呢?接下來&#xff0c;我們就來科普一下。 首先&am…

如何讓大模型更聰明?

如何讓大模型更聰明&#xff1f; *隨著人工智能技術的飛速發展&#xff0c;大模型在多個領域展現出了前所未有的能力&#xff0c;但它們仍然面臨著理解力、泛化能力和適應性等方面的挑戰。那么&#xff0c;如何讓大模型變得更聰明呢&#xff1f; 方向一&#xff1a;算法創新 …

留學培訓行業PaaS應用系統架構的設計與實踐

隨著留學需求的增長和教育培訓市場的不斷擴大&#xff0c;留學培訓行業正面臨著越來越多的挑戰和機遇。在這個背景下&#xff0c;利用PaaS&#xff08;Platform as a Service&#xff09;平臺來構建留學培訓行業的應用系統架構&#xff0c;將成為提升服務質量和效率的重要手段。…

Nacos 2.x 系列【8】集成 Spring Cloud Gateway

文章目錄 1. 概述1.1 API 網關1.1 Spring Cloud Gateway 2. 集成案例2.1 入門案例2.2 動態路由 1. 概述 1.1 API 網關 API網關已經成為了微服務架構的一個標配組件&#xff0c;是系統對外的唯一入口。所有的客戶端都通過統一的網關接入微服務&#xff0c;在網關層處理所有非業…