這些 Nginx 負載均衡配置誤區,運維請注意~

2022-01-09 運維

之前有很多朋友問關於Nginx的upstream模塊中max_fails及fail_timeout,這兩個指令,分別是配置關於負載均衡過程中,對於上遊(後端)伺服器的失敗嘗試次數和不可用時間,很多人不是很理解這兩個參數到底怎麼用,以及具體的含義

先看官網文檔中的描述

官網文檔中解釋max_fails是指在fail_timeout配置的時間內,伺服器通信失敗的次數,默認為1,即在fail_timeout時間內,1次請求失敗即不再嘗試,將請求根據hash規則,轉發到下一個上遊服務

fail_timeout有兩種含義:

默認是10s

文字不是很好理解,搭建個實驗環境,環境如下:

nginx通過fast-cgi將php請求轉發到PHP-FPM,這裡PHP-FPM服務即上遊服務,設置upstream,負載PHP-FPM

upstream按照默認配置,即max_fails=1,fail_timeout=10

現在通過tailf分別監聽兩個PHP-FPM日誌

請求4次,因為是默認輪詢的,所以可以看時間,輪詢將請求分發到兩個PHP-FPM上遊

可以從上面的日誌中看到,按照輪詢規則,下次請求應該落到PHP-FPM2上面,接著,關掉PHP-FPM1,繼續請求

可以看到,PHP-FPM1肯定是不響應了,PHP-FPM2正常響應,接著看下Nginx日誌

可以看到,關掉PHP-FPM1後,發起的請求,本來第二次請求(17:49:58)應該分發到PHP-FPM1的,然後從Nginx錯誤日誌可以看到,連接PHP-FPM1失敗,這裡只做了一次失敗嘗試,然後Nginx將請求轉發到PHP-FPM2處理了

接著將max_fails設置為2,繼續上面的請求

開啟PHP-FPM1,繼續請求,兩個負載輪詢轉發請求

接著繼續關掉PHP-FPM1,連續發起多次請求,查看日誌

所有請求都在PHP-FPM2上,看Nginx錯誤日誌

兩次輪詢到PHP-FPM1的時候,失敗,之後不會再將請求分發到PHP-FPM1上遊服務

接著,不開啟PHP-FPM1,繼續發起多次請求,由於默認的fail_timeout=10,所以在上面的失敗檢測10s之後再次發起請求,查看日誌

繼續分發到PHP-FPM2,接著看Nginx錯誤日誌

可以看到,過了fail_timeout的時間後,Ngxin會再次將請求發往FPM-PHP1進行嘗試,嘗試2次失敗後,在fail_timeout時間內,不會再將請求分發,

這裡有幾個誤區:

這個理解是錯誤的,Nginx只是記錄了失敗的請求到日誌,並將這個請求又轉發到了可用的其他上遊服務,知道所有上遊都不可用時,才會返回錯誤狀態

max_fails是在fail_timeout指定的時間內的失敗次數,請求還是按照配置的負載均衡算法來走,並不是第一次請求失敗之後,繼續將這個請求在嘗試一次,達到失敗次數之後,標記為不可用

當訪問量大的時候,fail_timeout設置太短,會導致不斷的嘗試與不可用上遊的連接,耗費大量的tcp資源進行連接

當訪問量大的時候,fail_timeout設置太長,會導致負載不均衡,有可能會擊穿某個上遊後端,達不到負載的效果

--- EOF ---

相關焦點

  • Nginx安裝配置及負載均衡集群配置tomcat
    [ "$NETWORKING" = "no" ] && exit 0    nginx="/usr/local/nginx/sbin/nginx"    prog=$(basename $nginx)    NGINX_CONF_FILE="/usr/local/nginx/conf/nginx.conf" [ -f /etc/sysconfig
  • Nginx 反向代理、負載均衡圖文教程 !
    當然很多都是隨便一說的玩笑話,聽過一笑便可,不必當真,也不必抱怨了好了,今天就直接來說一下主題吧,前端要了解一些運維的Nginx用法,內容不多,簡單看看就好,這兩個功能在工作當中就夠用了,那麼首先來看個問題,什麼是反向代理與負載均衡什麼是反向代理與負載均衡什麼是反向代理當我們有一個伺服器集群,並且伺服器集群中的每臺伺服器的內容一樣的時候,同樣我們要直接從個人電腦訪問到伺服器集群伺服器的時候無法訪問
  • 使用Nginx進行四層負載均衡
    而TCP負載均衡,就是我們通常所說的"四層負載均衡",工作在"網絡層"和"傳輸層"。例如,LVS(Linux Virtual Server,Linux虛擬服務)和F5(一種硬體負載均衡設備)是屬於"四層負載均衡"的。
  • 圖文講解,如何使用 Nginx 反向代理、負載均衡
    來源:http://t.cn/AiKual8Y學到老活到老什麼是反向代理與負載均衡Nginx反向代理與負載均衡的實現nginx配置proxy_passUpstream模塊實現負載均衡工作中的簡單使用學到老活到老前端圈一直很新
  • Nginx七層的負載均衡
    協議配置這裡我們舉例,在nginx做負載均衡,負載多個服務,部分服務是需要7層的,部分服務是需要4層的,也就是說7層和4層配置在同一個配置文件中。在 1.9.0 的時候,增加了一個 stream 模塊,用來實現四層協議(網絡層和傳輸層)的轉發、代理、負載均衡等。
  • Nginx+SpringBoot實現負載均衡
    前言本篇文章主要介紹的是Nginx如何實現負載均衡。負載均衡介紹介紹在介紹Nginx的負載均衡實現之前,先簡單的說下負載均衡的分類,主要分為硬體負載均衡和軟體負載均衡,硬體負載均衡是使用專門的軟體和硬體相結合的設備,設備商會提供完整成熟的解決方案,比如F5,在數據的穩定性以及安全性來說非常可靠,但是相比軟體而言造價會更加昂貴;軟體的負載均衡以Nginx這類軟體為主
  • nginx實現請求的負載均衡 + keepalived實現nginx的高可用
    做負載均衡keepalived實現nginx高可用(HA)注意點參考前言使用集群是網站解決高並發、海量數據問題的常用手段。通過負載均衡調度伺服器,將來自瀏覽器的訪問請求分發到應用伺服器集群中的任何一臺伺服器上,如果有更多的用戶,就在集群中加入更多的應用伺服器,使應用伺服器的負載壓力不再成為整個網站的瓶頸。
  • Nginx 反向代理與負載均衡
    作者:chenhongdong連結:juejin.im/post/5b01336af265da0b8a67e5c9什麼是反向代理與負載均衡
  • 誰說前端不需要懂-Nginx反向代理與負載均衡
    今天就直接來說一下主題吧,前端要了解一些運維的Nginx用法,內容不多,簡單看看就好,這兩個功能在工作當中就夠用了,那麼首先來看個問題,什麼是反向代理與負載均衡什麼是反向代理與負載均衡什麼是反向代理當我們有一個伺服器集群,並且伺服器集群中的每臺伺服器的內容一樣的時候,同樣我們要直接從個人電腦訪問到伺服器集群伺服器的時候無法訪問
  • Nginx + Spring Boot 實現負載均衡
    前言本篇文章主要介紹的是 Nginx 如何實現負載均衡。負載均衡介紹在介紹 Nginx 的負載均衡實現之前,先簡單的說下負載均衡的分類,主要分為硬體負載均衡和軟體負載均衡,硬體負載均衡是使用專門的軟體和硬體相結合的設備,設備商會提供完整成熟的解決方案,比如 F5,在數據的穩定性以及安全性來說非常可靠,但是相比軟體而言造價會更加昂貴;軟體的負載均衡以 Nginx 這類軟體為主
  • 負載均衡!中級運維必知的10個問題
    負載均衡是衡量初中級以上運維技術水平的重要標尺!負載均衡是普通運維人員很難有機會接觸和系統學習的知識!keepalived + lvs 的組合,執行ipvsadm ,輸出的數據顯示了每個後端伺服器連接的數量,一些伺服器的值高些,而一些卻低一些。
  • Nginx代理功能與負載均衡詳解
    ,再說明負載均衡詳細。 如果負載均衡中其中web2發生這樣的情況,nginx首先會去web1請求,但是nginx在配置不當的情況下會繼續分發請求道web2,然後等待web2響應,直到我們的響應時間超時,才會把請求重新分發給web1,這裡的響應時間如果過長,用戶等待的時間就會越長。下面的配置是解決方案之一。
  • Nginx+SpringBoot 實現負載均衡
    在介紹Nginx的負載均衡實現之前,先簡單的說下負載均衡的分類,主要分為硬體負載均衡和軟體負載均衡,硬體負載均衡是使用專門的軟體和硬體相結合的設備
  • 使用NGINX和NGINX Plus進行Docker Swarm負載均衡
    同時,Docker API已經朝著認知服務方面進行擴展,這些服務是使用相同鏡像的容器集(類似於Docker Compose中的服務,但具有更多功能)。您可以創建和擴展服務,執行回滾更新,創建運行狀況檢查等。此外,內置了DNS服務發現和負載均衡,您可以設置覆蓋集群範圍的網絡。Docker Swarm負載均衡拓撲
  • Nginx如何優雅的實現負載均衡!(建議收藏)
    負載均衡介紹在介紹Nginx的負載均衡實現之前,先簡單的說下負載均衡的分類,主要分為硬體負載均衡和軟體負載均衡,硬體負載均衡是使用專門的軟體和硬體相結合的設備,設備商會提供完整成熟的解決方案,比如F5,在數據的穩定性以及安全性來說非常可靠,但是相比軟體而言造價會更加昂貴;軟體的負載均衡以
  • (實用篇)詳解 Nginx代理功能與負載均衡
    本篇文章主要介紹了詳解 Nginx代理功能與負載均衡,先描述一些關於代理功能的配置,再說明負載均衡詳細,有興趣的可以了解一下。 序言Nginx的代理功能與負載均衡功能是最常被用到的,關於nginx的基本語法常識與配置已在上篇文章中有說明,這篇就開門見山,先描述一些關於代理功能的配置,再說明負載均衡詳細。
  • .Net分布式架構:Nginx實現負載均衡
    一:負載均衡簡介  負載均衡,英文名稱為Load Balance,其意思就是分攤到多個操作單元上進行執行,例如Web伺服器、FTP
  • Nginx/LVS/HAProxy負載均衡軟體的優缺點詳解
    一種是通過硬體來進行進行,常見的硬體有比較昂貴的F5和Array等商用的負載均衡器,它的優點就是有專業的維護團隊來對這些服務進行維護、缺點就是花銷太大,所以對於規模較小的網絡服務來說暫時還沒有需要使用;另外一種就是類似於Nginx/LVS/HAProxy的基於Linux的開源免費的負載均衡軟體,這些都是通過軟體級別來實現,所以費用非常低廉。
  • Docker+nginx實現負載均衡
    Docker是一個開源的,輕量級容器引擎。
  • Nginx 反向代理和負載均衡策略實戰案例
    再者,nginx能實現負載均衡,什麼是負載均衡呢?就是說應用部署在不同的伺服器上,但是通過統一的域名進入,nginx則對請求進行分發,將請求分發到不同的伺服器上去處理,這樣就可以有效的減輕了單臺伺服器的壓力。