Nginx使用upstream_check_module模塊實現後端節點健康檢查功能

2021-01-10 愛笑的小碼農

nginx自帶的針對後端節點健康檢查的功能比較簡單,通過默認自帶的ngx_http_proxy_module 模塊和ngx_http_upstream_module模塊中的相關指令來完成當後端節點出現故障時,自動切換到健康節點來提供訪問。

舉例

upstream name {

server 192.168.57.110:8080 max_fails=1 fail_timeout=10s;

server 192.168.57.101:8080 max_fails=1 fail_timeout=10s;

}

參數說明:

max_fails=number # 設定Nginx與伺服器通信的嘗試失敗的次數。在fail_timeout參數定義的時間段內,如果失敗的次數達到此值,Nginx就認為伺服器不可用。在下一個fail_timeout時間段,伺服器不會再被嘗試。 失敗的嘗試次數默認是1。設為0就會停止統計嘗試次數,認為伺服器是一直可用的。 你可以通過指令proxy_next_upstream、fastcgi_next_upstream和 memcached_next_upstream來配置什麼是失敗的嘗試。 默認配置時,http_404狀態不被認為是失敗的嘗試。

fail_timeout=time # 設定伺服器被認為不可用的時間段以及統計失敗嘗試次數的時間段。在這段時間中,伺服器失敗次數達到指定的嘗試次數,伺服器就被認為不可用。默認情況下,該超時時間是10秒。

這種情況Nginx無法主動識別後端節點狀態,後端即使有不健康節點, 負載均衡器依然會先把該請求轉發給該不健康節點,然後再轉發給別的節點,這樣就會浪費一次轉發,而且自帶模塊無法做到預警。So 此時使用第三方模塊 nginx_upstream_check_module模塊

nginx_upstream_check_module模塊由淘寶團隊開發 淘寶自己的 tengine 上是自帶了該模塊的,大家可以訪問淘寶tengine的官網來獲取該版本的nginx,官方地址:http://tengine.taobao.org/。我們使用的是原生Nginx,採用添加模塊的方式

部署流程

1、下載nginx_upstream_check_module模塊

#進入nginx安裝目錄

cd /usr/lcoal/nginx

#下載nginx_upstream_check_module模塊

wget https://codeload.github.com/yaoweibin/nginx_upstream_check_module/zip/master

#解壓

unzip master

下載和解壓

cd nginx-1.11.5 # 進入nginx的源碼目錄

# -p0,是「當前路徑」 -p1,是「上一級路徑」

patch -p0 < ../nginx_upstream_check_module-master/check_1.11.5+.patch

#nginx -V 可以查看原有配置 輸出 ./configure --prefix=/usr/local/nginx

#增加upstream_check模塊

./configure --prefix=/usr/local/nginx --add-module=../nginx_upstream_check_module-master

make

/usr/local/nginx/sbin/nginx -t # 檢查下是否有問題

注意 check版本和Nginx版本要求有限制 1.12以上版本的nginx,補丁為check_1.11.5+.patch 具體參考github https://github.com/yaoweibin/nginx_upstream_check_module

給nginx打補丁

3.修改配置文件,讓nginx_upstream_check_module模塊生效

upstream name {

server 192.168.57.207:8090;

server 192.168.57.85:80;

check interval=3000 rise=2 fall=5 timeout=1000 type=http;

}

配置信息

參數解釋

啟動或者重載nginx

輸入 /nstatus

狀態信息

從上圖可以看出 現在有兩個節點 我們人為把其中57.85節點API關閉,此時狀態為down 節點正常時會恢復為正常狀態

相關焦點

  • 【Nginx快速掃盲】nginx入門
    Nginx使用基於事件驅動架構,使得其可以支持數以百萬級別的TCP連接高度的模塊化和自由軟體許可證是的第三方模塊層出不窮(開源)Nginx是一個跨平臺伺服器,可以運行在Linux,Windows,為開源軟體,可以免費使用。
  • nginx中使用nginx-http-concat模塊合併靜態資源文件
    西崑雲這篇文章主要介紹了nginx中使用nginx-http-concat模塊合併靜態資源文件,用以加速網站的CSS、JS等靜態資源載入速度,需要的朋友可以參考下  首先了解一下 nginx-http-concat
  • 用checkstyle實現svn的代碼規範性檢查
    試想,如果我們能在svn上增加一項功能,在程式設計師提交代碼時進行規範性檢查,如果沒有通過,將拒絕代碼的提交。這將使程式設計師無法迴避「自己所犯的錯誤」。  技術實現框架  在SVN所在伺服器安裝一個用於代碼檢查的工具,此處選擇checkstyle(一個開源的著名代碼檢查工具
  • ELK5.X搭建並收集Nginx日誌
    Elasticsearch 是實時全文索引,不需要像 storm 那樣預先編程才能使用;配置簡易上手。Elasticsearch 全部採用 JSON 接口,Logstash 是 Ruby DSL 設計,都是目前業界最通用的配置語法設計;檢索性能高效。雖然每次查詢都是實時計算,但是優秀的設計和實現基本可以達到全天數據查詢的秒級響應;集群線性擴展。
  • 百寶雲引入後端腳本支持Python編寫 用於擴展表單系統功能
    2020年8月1日,百寶雲引入Python作為後端腳本語言,用於擴展表單系統功能。Python的引入對於企業管理工具而言是裡程碑式的更新,相對於其他在線表單平臺,Python腳本可以更好的完成辦公系統所需的功能。      百寶雲的主要特色功能--後端腳本體系  Ø 實現表單系統所做不到的功能,如:對表單功能的擴展和增強。
  • Nginx在高並發下的性能優化點!有這篇就夠了!
    open_file_cache_valid 30s:這個是指多長時間檢查一次緩存的有效信息。open_file_cache_min_uses 1 :open_file_cache指令中的inactive 參數時間內文件的最少使用次數,如果超過這個數字,文件描述符一直是在緩存中打開的,如上例,如果有一個文件在inactive 時間內一次沒被使用,它將被移除。
  • Nginx for Windows 1.7.10.2 更新 - OSCHINA - 中文開源技術交流...
    http://pan.baidu.com/s/1kTxmfmJRelease time: 2015-8-20Changelog: 1、add concat module to 32 & 64 bit respectively2、add redis2 module to 32 & 64 bit respectively3、add cjson  module to 32 & 64 bit respectively4、add lua51.dll runtime for luajit for 32 & 64 bit respectively
  • 「首席架構師看微服務架構」介紹NGINX的微服務參考架構
    因為我們認為轉向微服務對於客戶的成功至關重要,我們NGINX已經啟動了一個專門的程序來開發支持Web應用程式開發和交付這種地震轉變的功能和實踐。我們還認識到,實現微服務有許多不同的方法,其中許多方法都是新穎的,並且特定於各個開發團隊的需求。我們認為需要使用模型來使公司更容易開發和交付自己的基於微服務的應用程式。
  • 這份阿里大牛全網首發600頁Nginx應用運維實戰筆記,真香
    第一部分 Nginx介紹(第1~4章)首先,簡要分析了Nginx的架構特點及實現原理;其次,講解了Nginx及其衍生版本Tengine、OpenResty的編譯與部署;接著,全面介紹了Nginx的核心配置指令;後,講解了動態賦值、訪問控制和數據處理這3個Nginx的HTTP功能模塊配置指令。
  • 三分鐘從入門到精通——Python模塊
    您花了30分鐘來定義一個函數,然後使用它並退出解釋器。但是突然間,您記住仍然需要再次使用該功能。您再次輸入它,但該功能的定義已消失。哎呀,好痛。現在,您再次需要花費30分鐘來鍵入相同的功能。因此,python有一種方法可以將該函數定義放入文件中並隨時使用。模塊是ModuleType類型的對象。
  • 使用Smart I/O模塊實現管腳電平數字邏輯功能和降低CPU負載
    摘要在系統集成和電路板設計過程中,工程師常常需要根據輸入輸出信號實現管腳電平數字邏輯功能。在系統集成和電路板設計過程中,工程師常常需要根據輸入輸出信號實現管腳電平數字邏輯功能。使用外置獨立邏輯元件通常會造成物料成本增加,因而不適合低成本系統。
  • kubernetes 的Health Check策略詳解
    Health Check健康檢查,直白點說就是防微杜漸,k8s是一個編排引擎我們通過k8s部署容器集群,如果說集群容器沒有健康檢查這個過程,我們無法預知我們生產環境會不會部署上錯誤的容器導致服務崩潰。好在k8s 幫我們考慮到了這個問題,健康檢查是k8s重要特性之一,默認有健康檢查,還可以主動設置一些健康檢查。
  • 詳解API網關核心功能和API管理擴展
    當然是有的,即我們常說的微服務模塊之間可以通過服務註冊中心來實現服務發現查找,服務間的點對點調用即使去中心化的。如果一個單體拆分為微服務後,完全不需要和外部應用打交道,也不需要共享自己的接口能力,那麼這個微服務體系裡面就不需要用API網關,僅僅使用服務註冊中心即可。通過服務註冊中心實現完全的去中心化和接口調用更高的性能。什麼時候需要使用API網關?
  • njs 0.4.0 發布,nginx 的 JavaScript 腳本語言
    njs 以 nginx 插件的方式存在,它是 JavaScript/ECMAscript 的子集,實現了大部分的 JavaScript 語言功能,沒有完全遵從 ECMAScript 標準,同時拋棄了 JavaScript 比較難懂的部分。