大致可以分兩類:
(1)不能保證使用者的每一次請求都通過負載均衡到達同一伺服器。
(2)可保證使用者的每一次請求都通過負載均衡到達同一伺服器。
第二類的應用場景:
1、如果伺服器有快取機制,讓使用者訪問之前已快取過的伺服器可以加快響應速度。
2、若使用者參與需要多個步驟,如:a.填寫表單,b.下單並付款,c.提示購買成功。這些步驟需要儲存會話狀態才能使事務順利進行。
第(1)類:
round robin(輪詢)
還可以加上伺服器權重
解釋:伺服器收到請求數的比重是 5:3:1
注:肯定比上面的都好使,畢竟是 nginx plus 才有的收費功能。第(2)類:
解釋:等於把上面ip hash
變成了$request_uri hash
。
下面三種方法都是基於cookie 機制,只是劃分粒度越來越細。
(1)stickycookie
srv_id
expires
domain
path
cookie_name
瀏覽器保留 cookie 的時間
cookie 的域
cookie 的路徑
(2)stickyroute
nginx 會按照順序搜尋$route_cookie
、$route_uri
,並選擇第乙個非空的引數用作 route,下同。
(3)stickylearn
這是一種比前兩種方法更複雜的會話永續性方法。
引數create
和lookup
分別指定變數來指示如何建立新會話和搜尋已經存在的會話。
會話儲存在 shared memory zone,名字和大小在zone
引數中配置。在64位平台上乙個 megabyte zone可以儲存大概 8000 個會話。在timeout
引數指定的期間內沒有被訪問的會話將被從 zone 上移除,預設為 10 分鐘。
注:對於上述的第(2)類
:如果某個 server 不用了,若直接刪掉這個 server,會打亂 hash 初始化分配的規則。
推薦的做法是,給server加上
down
,即不打破原有規則,同時讓請求交給臨近的下一台伺服器處理。(如下面**,10.117.0.2 的請求交給 10.117.0.3 來處理)。這樣等宕機的伺服器恢復,「保證使用者的每一次請求都通過負載均衡到達同一伺服器」
的功能也會恢復正常。解釋:
平時只是 10.117.0.1,10.117.0.2,10.117.0.3 伺服器執行中,10.117.0.4 只是待命狀態。但當 3 臺都宕機了後,第 4 台才會收到請求。
一旦有可用的節點恢復服務,該節點則不再使用,又進入後備狀態。
好處:伺服器慢啟動功能可防止最近恢復的伺服器被連線淹沒,這可能會導致伺服器再次被標記為失敗。
缺點:如果 upstream 中只有一台伺服器,那麼
slow_start
引數會被忽略。1、如果
max_conns
的限制達到了,請求被放入 queue2、如果
queue
排滿或者在timeout
時間內無法選擇上游伺服器,客戶端將接到乙個錯誤。寫在前面:只有當請求發往伺服器節點才能檢查1、當 nginx 認為某個伺服器不可用時,它會暫時停止向伺服器傳送請求,等待
fail_timeout
後重試,直到它再次處於活動狀態。2、如果所有節點均失效,備機也為失效時,nginx 會對所有節點恢復為有效,重新嘗試探測節點。
引數
解釋預設值
proxy_next_upstream
失敗條件
error timeout invalid_header(更多見下圖)
max_fails
失敗的次數
fail_timeout
伺服器被nginx標記為失效的時長
10判斷伺服器
失效
的條件:在請求發往伺服器前 nginx 就會定期自行檢查
zone
引數定義了被 worker 程序共享的並用來儲存伺服器組配置的記憶體區域。健康監測的時間間隔是 10s,在失敗 3 次後會認為是不可用的,以後需要兩次通過監測才能認為是可用的。
判斷伺服器
失效
的條件:判斷伺服器
失效
的條件:除了 connect refuse / time out
還有 status != 200-399 / content-type != text/html / body ~ "maintenance mode"
待寫待寫
參考資料
2【 nginx 的負載均衡原理 】
Nginx 官方文件翻譯 nginx 控制
可以用訊號控制nginx。主程序的id預設情況下被寫入 usr local nginx logs nginx.pid檔案。這個名字可以在配置時修改或者在nginx.conf檔案中使用pid指令。主程序支援以下訊號 term,int 快速關閉 quit 友好的關閉 hup 修改配置,保持乙個時區的改變...
官方文件之Cookie
蘋果文件翻譯內容 由於http協議的無狀態性,客戶端通常使用的持久化儲存資料都是來自於攜帶cookies的url網路請求 系統缺省會每次在傳送網路請求的時候在請求頭裡面設定cookie,我們通常沒有管理他,通過charles軟體抓包可以明顯的看到請求頭裡面多了個set cookie 引數 url l...
nginx官方文件筆記4 壓縮
壓縮可以顯著降低傳輸的response資料大小,但是因為是執行時會對效能有影響,不會二次壓縮 預設壓縮只會壓縮mime type為text html的資料,如果想要壓縮別的需要自己指定,預設只會壓縮大小超過20byte的資料可以自己指定指定gzip min lengthdirective,預設ngi...