nginx upstream和輪詢策略


  • upstream

nginx upstream語法配置

upstream 后面跟服務名

其中包含了,域名,端口 以及權重,可以看到他既支持http協議也支持socket協議的類型,backup意味着該域名是備用的地址

后端服務器調度參數

backup不參與服務,當其他節點無法服務了,他就參與服務

max_fails 代理服務器向后端請求,一旦發現請求狀態失敗,會去再度請求。超過max_fails規定的次數,隨即宣告失敗。

接下來就“休息一會兒”,通常為10s 可以通過fail_timeout設置更長的時間

max_conns 由於nginx向upstram(服務器池)采用輪詢的方式,分發請求,有的時候我們會遇到連接池中的服務器硬件性能高低不一,有的是4核,有的是24核,配置低的服務器可能根本接收不了分攤給他的請求數目。這個時候就用到了max_conns配置

上圖配置解讀:8001 不提供服務;8002備用服務器;8003失敗檢查只執行1次,超時時間10s,結果只有8003對應的server3可以訪問

在過濾規則中停掉8003

這時作為backup的server2可以返回。

  • nginx的輪詢機制(基於請求的方式)

nginx的輪詢默認采用逐一輪詢的方式,例如測試用例中從8001輪詢到8003

加權輪詢的調度算法:如果來7個請求,5個將會落到8002上面

重新加載配置

然而這一方法帶來的問題是:如果很多操作或訪問是基於cookie或者session的,輪詢會打到不同的服務器上去,session和cookie也就無從保持,導致了掉線

  • ip_hash

緩存帶來的問題,假如server1 server2各緩存了一部分信息,輪詢可能每次跳到不同的服務器,導致每次加載的緩存內容都不一致。

根據客戶訪問ip的哈希值綁定在一個后端服務器上,同一ip固定訪問同一服務器,缺陷:由於是代理,無法獲取真正的$remote_addr,於是改進版本的nginx有了

  • url_hash(1.7.2以后版本推出)

關鍵命令: hash $request_uri 變量指代的就是

測試結果,無論如何都會固定展示綁定的那台服務器的內容

如果針對url中的某一個值進行hash也是可以


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM