0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

詳解Nginx負(fù)載均衡配置誤區(qū)

Linux愛好者 ? 來源:51cto ? 作者:mb5ff980f81f3d8 ? 2021-05-13 14:36 ? 次閱讀

之前有很多朋友問關(guān)于Nginx的upstream模塊中max_fails及fail_timeout,這兩個(gè)指令,分別是配置關(guān)于負(fù)載均衡過程中,對(duì)于上游(后端)服務(wù)器的失敗嘗試次數(shù)和不可用時(shí)間,很多人不是很理解這兩個(gè)參數(shù)到底怎么用,以及具體的含義

先看官網(wǎng)文檔中的描述

3ea34db0-b3a2-11eb-bf61-12bb97331649.png

官網(wǎng)文檔中解釋max_fails是指在fail_timeout配置的時(shí)間內(nèi),服務(wù)器通信失敗的次數(shù),默認(rèn)為1,即在fail_timeout時(shí)間內(nèi),1次請(qǐng)求失敗即不再嘗試,將請(qǐng)求根據(jù)hash規(guī)則,轉(zhuǎn)發(fā)到下一個(gè)上游服務(wù)

fail_timeout有兩種含義:

當(dāng)已經(jīng)確認(rèn)上游服務(wù)不可用時(shí),是指與上游服務(wù)器通信失敗次數(shù)的時(shí)間

服務(wù)器不可用的時(shí)間段

默認(rèn)是10s

文字不是很好理解,搭建個(gè)實(shí)驗(yàn)環(huán)境,環(huán)境如下:

Nginx

PHP-FPM(x2)

nginx通過fast-cgi將php請(qǐng)求轉(zhuǎn)發(fā)到PHP-FPM,這里PHP-FPM服務(wù)即上游服務(wù),設(shè)置upstream,負(fù)載PHP-FPM

3eb3feda-b3a2-11eb-bf61-12bb97331649.png

3ec5be9a-b3a2-11eb-bf61-12bb97331649.png

upstream按照默認(rèn)配置,即max_fails=1,fail_timeout=10

現(xiàn)在通過tailf分別監(jiān)聽兩個(gè)PHP-FPM日志

3ed58e06-b3a2-11eb-bf61-12bb97331649.png

請(qǐng)求4次,因?yàn)槭悄J(rèn)輪詢的,所以可以看時(shí)間,輪詢將請(qǐng)求分發(fā)到兩個(gè)PHP-FPM上游

可以從上面的日志中看到,按照輪詢規(guī)則,下次請(qǐng)求應(yīng)該落到PHP-FPM2上面,接著,關(guān)掉PHP-FPM1,繼續(xù)請(qǐng)求

3ee02596-b3a2-11eb-bf61-12bb97331649.png

可以看到,PHP-FPM1肯定是不響應(yīng)了,PHP-FPM2正常響應(yīng),接著看下Nginx日志

3ef35aa8-b3a2-11eb-bf61-12bb97331649.png

可以看到,關(guān)掉PHP-FPM1后,發(fā)起的請(qǐng)求,本來第二次請(qǐng)求(1758)應(yīng)該分發(fā)到PHP-FPM1的,然后從Nginx錯(cuò)誤日志可以看到,連接PHP-FPM1失敗,這里只做了一次失敗嘗試,然后Nginx將請(qǐng)求轉(zhuǎn)發(fā)到PHP-FPM2處理了

接著將max_fails設(shè)置為2,繼續(xù)上面的請(qǐng)求

3efd6d7c-b3a2-11eb-bf61-12bb97331649.png

開啟PHP-FPM1,繼續(xù)請(qǐng)求,兩個(gè)負(fù)載輪詢轉(zhuǎn)發(fā)請(qǐng)求

3f0c7650-b3a2-11eb-bf61-12bb97331649.png

接著繼續(xù)關(guān)掉PHP-FPM1,連續(xù)發(fā)起多次請(qǐng)求,查看日志

3f1b1214-b3a2-11eb-bf61-12bb97331649.png

所有請(qǐng)求都在PHP-FPM2上,看Nginx錯(cuò)誤日志

3f325b40-b3a2-11eb-bf61-12bb97331649.png

兩次輪詢到PHP-FPM1的時(shí)候,失敗,之后不會(huì)再將請(qǐng)求分發(fā)到PHP-FPM1上游服務(wù)

接著,不開啟PHP-FPM1,繼續(xù)發(fā)起多次請(qǐng)求,由于默認(rèn)的fail_timeout=10,所以在上面的失敗檢測(cè)10s之后再次發(fā)起請(qǐng)求,查看日志

3f449d0a-b3a2-11eb-bf61-12bb97331649.png

繼續(xù)分發(fā)到PHP-FPM2,接著看Nginx錯(cuò)誤日志

3f602872-b3a2-11eb-bf61-12bb97331649.png

可以看到,過了fail_timeout的時(shí)間后,Ngxin會(huì)再次將請(qǐng)求發(fā)往FPM-PHP1進(jìn)行嘗試,嘗試2次失敗后,在fail_timeout時(shí)間內(nèi),不會(huì)再將請(qǐng)求分發(fā),

這里有幾個(gè)誤區(qū):

Nginx記錄了連接上游失敗,這個(gè)請(qǐng)求就返回錯(cuò)誤請(qǐng)求,或這個(gè)請(qǐng)求丟失沒處理

這個(gè)理解是錯(cuò)誤的,Nginx只是記錄了失敗的請(qǐng)求到日志,并將這個(gè)請(qǐng)求又轉(zhuǎn)發(fā)到了可用的其他上游服務(wù),知道所有上游都不可用時(shí),才會(huì)返回錯(cuò)誤狀態(tài)

max_fails是指連續(xù)請(qǐng)求失敗的次數(shù)

max_fails是在fail_timeout指定的時(shí)間內(nèi)的失敗次數(shù),請(qǐng)求還是按照配置的負(fù)載均衡算法來走,并不是第一次請(qǐng)求失敗之后,繼續(xù)將這個(gè)請(qǐng)求在嘗試一次,達(dá)到失敗次數(shù)之后,標(biāo)記為不可用

fail_timeout越短越好

當(dāng)訪問量大的時(shí)候,fail_timeout設(shè)置太短,會(huì)導(dǎo)致不斷的嘗試與不可用上游的連接,耗費(fèi)大量的tcp資源進(jìn)行連接

fail_timeout越長(zhǎng)越好

當(dāng)訪問量大的時(shí)候,fail_timeout設(shè)置太長(zhǎng),會(huì)導(dǎo)致負(fù)載不均衡,有可能會(huì)擊穿某個(gè)上游后端,達(dá)不到負(fù)載的效果

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    8701

    瀏覽量

    84546
  • PHP
    PHP
    +關(guān)注

    關(guān)注

    0

    文章

    452

    瀏覽量

    26576
  • 負(fù)載均衡
    +關(guān)注

    關(guān)注

    0

    文章

    98

    瀏覽量

    12337

原文標(biāo)題:Nginx負(fù)載均衡配置誤區(qū)

文章出處:【微信號(hào):LinuxHub,微信公眾號(hào):Linux愛好者】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    負(fù)載均衡服務(wù)由幾部分組成?分別是什么

    均衡服務(wù)通常由六部分組成,分別是客戶端、負(fù)載均衡器、后端服務(wù)器、負(fù)載均衡算法、監(jiān)控和健康檢查及會(huì)話保持。這六者互相協(xié)同工作,實(shí)現(xiàn)了流量的有效
    的頭像 發(fā)表于 09-18 11:16 ?85次閱讀

    nginx重啟命令linux步驟是什么?

      1、驗(yàn)證nginx配置文件是否正確   方法一:進(jìn)入nginx安裝目錄sbin下,輸入命令./nginx -t   看到如下顯示nginx
    發(fā)表于 07-11 17:13

    nginx重啟命令linux步驟是什么?

      1、驗(yàn)證nginx配置文件是否正確   方法一:進(jìn)入nginx安裝目錄sbin下,輸入命令./nginx -t   看到如下顯示nginx
    發(fā)表于 07-10 16:40

    視頻網(wǎng)站服務(wù)器的四種負(fù)載均衡技術(shù)

    視頻網(wǎng)站通常會(huì)面臨大量的用戶訪問和視頻流量,為了提高性能和可用性,需要使用負(fù)載均衡技術(shù)。以下是四種常用的視頻網(wǎng)站服務(wù)器負(fù)載均衡技術(shù): 1、基于DNS的
    的頭像 發(fā)表于 04-01 17:36 ?459次閱讀

    核心開發(fā)者因安全策略分歧離隊(duì),Nginx分叉出freenginx項(xiàng)目

    值得注意的是,Nginx是一款由俄羅斯人伊戈?duì)?賽索耶夫(Igor Sysoev)創(chuàng)作,并于2004年起向公眾公開的異步網(wǎng)頁服務(wù)器平臺(tái),廣泛用于反向代理、負(fù)載均衡和HTTP緩存等功能。據(jù)官方公布的2021年6月數(shù)據(jù),
    的頭像 發(fā)表于 02-19 15:51 ?320次閱讀

    負(fù)載均衡器的誕生和工作機(jī)制

    今天我們來深度揭秘一下負(fù)載均衡器 LVS 的秘密,相信大家看了你管這破玩意兒叫負(fù)載均衡?這篇文章后,還是有不少疑問,比如 LVS 看起來只有類似路由器的轉(zhuǎn)發(fā)功能,為啥說它是四層(傳輸層
    的頭像 發(fā)表于 01-04 12:26 ?798次閱讀
    <b class='flag-5'>負(fù)載</b><b class='flag-5'>均衡</b>器的誕生和工作機(jī)制

    Nginx在Windows/docker中的使用

    nginx 是一個(gè)高性能的開源反向代理服務(wù)器和 web 服務(wù)器,一般用來搭建靜態(tài)資源服務(wù)器、負(fù)載均衡器、反向代理,本文將分享其在 Windows/docker 中的使用,使用 nssm 部署成服務(wù)的方案腳本,局域網(wǎng)中自定義域名解
    的頭像 發(fā)表于 01-03 10:20 ?1363次閱讀
    <b class='flag-5'>Nginx</b>在Windows/docker中的使用

    如何確定適合的負(fù)載均衡比例

    路由器的負(fù)載均衡是一種應(yīng)用于網(wǎng)絡(luò)中的技術(shù),它可以平衡網(wǎng)絡(luò)流量的分配,提高網(wǎng)絡(luò)的性能和穩(wěn)定性。在配置路由器的負(fù)載均衡時(shí),選擇合適的
    的頭像 發(fā)表于 12-15 10:36 ?1212次閱讀

    路由器負(fù)載均衡怎么配置

    路由器負(fù)載均衡是一種重要的網(wǎng)絡(luò)技術(shù),它能夠?qū)⒍鄠€(gè)網(wǎng)絡(luò)連接的流量分配到多個(gè)路由器上,以提高網(wǎng)絡(luò)的性能和穩(wěn)定性。本文將詳細(xì)介紹路由器負(fù)載均衡配置
    的頭像 發(fā)表于 12-13 11:17 ?2574次閱讀

    Nginx配置文件如何設(shè)置頭信息保留真實(shí)IP不丟失

    Nginx 配置中設(shè)置頭信息以保留客戶端的真實(shí) IP 地址通常是在使用反向代理的場(chǎng)景中需要的。當(dāng) Nginx 作為反向代理時(shí),客戶端的真實(shí) IP 地址可能會(huì)在轉(zhuǎn)發(fā)請(qǐng)求時(shí)丟失,因?yàn)榈竭_(dá)應(yīng)用服務(wù)器
    的頭像 發(fā)表于 11-30 10:54 ?1540次閱讀

    Nginx 如何實(shí)現(xiàn)高性能低消耗

    Nginx具有豐富的模塊庫(kù)、靈活的配置、較低資源消耗等優(yōu)點(diǎn)。下面,我們一起深入看一下Nginx的工作機(jī)制 1. Nginx 如何實(shí)現(xiàn)高性能低消耗的呢? 我們從以下幾個(gè)方面說明以下:
    的頭像 發(fā)表于 11-11 11:31 ?495次閱讀
    <b class='flag-5'>Nginx</b> 如何實(shí)現(xiàn)高性能低消耗

    Nginx目錄結(jié)構(gòu)有哪些

    什么是Nginx? Nginx是一個(gè) 輕量級(jí)/高性能的反向代理Web服務(wù)器,他實(shí)現(xiàn)非常高效的反向代理、負(fù)載平衡,他可以處理2-3萬并發(fā)連接數(shù),官方監(jiān)測(cè)能支持5萬并發(fā),現(xiàn)在中國(guó)使用nginx
    的頭像 發(fā)表于 11-11 11:27 ?534次閱讀
    <b class='flag-5'>Nginx</b>目錄結(jié)構(gòu)有哪些

    Dubbo路由模塊及負(fù)載均衡的優(yōu)化手段

    本文主要介紹在vivo內(nèi)部針對(duì)Dubbo路由模塊及負(fù)載均衡的一些優(yōu)化手段,主要是異步化+緩存,可減少在RPC調(diào)用過程中路由及負(fù)載均衡的CPU消耗,極大提升調(diào)用效率。
    的頭像 發(fā)表于 11-02 09:56 ?620次閱讀
    Dubbo路由模塊及<b class='flag-5'>負(fù)載</b><b class='flag-5'>均衡</b>的優(yōu)化手段

    Nginx常用配置與命令

    對(duì)于前端來說 Node.js 并不陌生, Nginx 和 Node.js 的很多理念類似, HTTP 服務(wù)器、事件驅(qū)動(dòng)、異步非阻塞等,且 Nginx 的大部分功能使用 Node.js 也可以實(shí)現(xiàn),但 Nginx 和 Node.j
    發(fā)表于 10-18 10:04 ?319次閱讀
    <b class='flag-5'>Nginx</b>常用<b class='flag-5'>配置</b>與命令

    常見的幾種負(fù)載均衡技術(shù)介紹

    在大力建設(shè)算力網(wǎng)絡(luò)的大背景下,隨著SDN思潮的深入推進(jìn)、網(wǎng)絡(luò)集群的部署,負(fù)載均衡成為了一種不可或缺的技術(shù),它在云,網(wǎng),邊都起了至關(guān)重要的作用。本文會(huì)對(duì)常見的幾種負(fù)載均衡技術(shù)進(jìn)行介紹,同
    的頭像 發(fā)表于 09-25 10:30 ?1424次閱讀
    常見的幾種<b class='flag-5'>負(fù)載</b><b class='flag-5'>均衡</b>技術(shù)介紹