Nginx的負載均衡之加權輪詢 (Weighted Round Robin)
負載均衡配置
Nginx 的負載均衡配置如下:
http {
upstream cluster {
server a weight=4;
server b weight=2;
server c weight=1;
}
其他配置...
}
實現的原理
每個後端peer都有三個權重變數,先解釋下它們的含義。
(1) weight
配置檔案中指定的該後端的權重,這個值是固定不變的。
(2) effective_weight
後端的有效權重,初始值為weight。
在釋放後端時,如果發現和後端的通訊過程中發生了錯誤,就減小effective_weight。
此後有新的請求過來時,在選取後端的過程中,再逐步增加effective_weight,最終又恢復到weight。
之所以增加這個欄位,是為了當後端發生錯誤時,降低其權重。
(3) current_weight
後端目前的權重,一開始為0,之後會動態調整。那麼是怎麼個動態調整呢?
每次選取後端時,會遍歷叢集中所有後端,對於每個後端,讓它的current_weight增加它的effective_weight,
同時累加所有後端的effective_weight,儲存為total。
如果該後端的current_weight是最大的,就選定這個後端,然後把它的current_weight減去total。
如果該後端沒有被選定,那麼current_weight不用減小。
弄清了三個weight欄位的含義後,加權輪詢演算法可描述為:
對於每個請求,遍歷叢集中的所有可用後端,對於每個後端peer執行:
peer->current_weight += peer->effecitve_weight。
同時累加所有peer的effective_weight,儲存為total。
從叢集中選出current_weight最大的peer,作為本次選定的後端。
對於本次選定的後端,執行:peer->current_weight -= total。
上述描述可能不太直觀,來看個例子。
現在使用以下的upstream配置塊:
upstream backend {
server a weight=4;
server b weight=2;
server c weight=1;
}
按照這個配置,每7個客戶端請求中,a會被選中4次、b會被選中2次、c會被選中1次,且分佈平滑。
我們來算算看是不是這樣子的。
initial current_weight of a, b, c is { 0, 0, 0 }
通過上述過程,可得以下結論:
7個請求中,a、b、c分別被選取了4、2、1次,符合它們的權重值。
7個請求中,a、b、c被選取的順序為a, b, a, c, a, b, a,分佈均勻,權重大的後端a沒有被連續選取。
每經過7個請求後,a、b、c的current_weight又回到初始值{ 0, 0, 0 },因此上述流程是不斷迴圈的。
晚些再貼程式碼:待續………
相關推薦
Nginx的負載均衡之加權輪詢 (Weighted Round Robin)
負載均衡配置 Nginx 的負載均衡配置如下: http { upstream cluster { server a weight=4; server b weight=2; serve
nginx負載均衡之加權輪詢
當nginx作為代理伺服器時,需要將客戶端的請求轉發給後端伺服器進行處理,如果後端伺服器有多臺,那如何選擇合適的後端伺服器來處理當前請求,也就是本篇文章要介紹的內容。nginx儘可能的把請求分攤到各個後端伺服器進行處理,以保證服務的可用性和可靠行,提供給客戶端
Nginx的負載均衡 - 加權輪詢 (Weighted Round Robin)
Nginx版本:1.9.1 演算法介紹 來看一個簡單的Nginx負載均衡配置。 http { upstream cluster { server a weight=5;
負載均衡之加權輪詢演算法
在介紹加權輪詢演算法(WeightedRound-Robin)之前,首先介紹一下輪詢演算法(Round-Robin)。 一:輪詢演算法(Round-Robin) 輪詢演算法是最簡單的一種負載均衡演算法。它的原理是把來自使用者的請求輪流分配給內部的伺服器:從伺服器1開始,直
NGINX 負載均衡 之九
ngx 算法 均衡 http 節點 backup pst 指定 自己 1、Nginx 負載均衡的組件模塊 ngx_http_proxy_module:proxy代理模塊,用於把請求後拋給服務器節點或upstream服務器池。ngx_http_upstream_module:
Keepalived+LVS+Nginx負載均衡之高可用
一、Keepalived介紹 Keepalived是分散式部署系統解決系統高可用的軟體,結合LVS(Linux Virtual Server)使用,其功能類似於heartbeat,解決單機宕機的問題。 二、Keepalived技術原理 keepalived是以VRRP協議為實現基礎
Nginx學習之十二-負載均衡-加權輪詢策略剖析
typedef struct ngx_http_upstream_rr_peers_s ngx_http_upstream_rr_peers_t; struct ngx_http_upstream_rr_peers_s { ngx_uint_t numbe
LVS負載均衡之IPVSADM命令說明與輪詢解釋
其他 進行 art 綁定 輪詢 timeout 同步 參數 地址 “1” IPVSADM常用參數說明:-A:在內核的虛擬服務器表中添加一條新的虛擬服務器記錄-E:編輯內核虛擬服務器表中的一條虛擬服務器記錄-D:刪除內核虛擬服務器表中的一條虛擬服務器記錄-C:清除內核虛擬服務
nginx負載均衡輪詢失效
upstream lxppp{ server 192.168.37.161:8082 weight=1 max_fails=5 fail_timeout=30s; server
負載均衡之輪詢策略
輪詢演算法是最簡單的一種負載均衡演算法,它的原理是將使用者的請求輪流分配給內部的伺服器,並且輪詢演算法並不需要記錄當前所有連線的狀態,所以它是一種無狀態的排程. 簡單輪詢策略 下面是簡單輪詢演算法的實現 public class RouteRoun
Dubbo加權輪詢負載均衡的原始碼和Bug,瞭解一下?
本文是對於Dubbo負載均衡策略之一的加權隨機演算法的詳細分析。從2.6.4版本聊起,該版本在某些情況下存在著比較嚴重的效能問題。由問題入手,層層深入,瞭解該演算法在Dubbo中的演變過程,讀懂它的前世今生。 之前也寫了Dubbo的負載均衡策略: 《
十四.nginx,web,反向代理,調用加權輪詢算法,nfs服務
文件夾 是否 觀察 查看 方式 har sys 重新啟動 chm 一.部署nginx反向代理web服務,調度算法使用加權輪詢: 1.首先配置一個nginx服務端,三個web客戶端。用vmware 新建虛擬機完成,並用xshell連接 2.在服務端和3個web客戶端都下載e
Nginx學習筆記06負載均衡之(一)負載均衡介紹
最終 反向 結果 html proxy mime cnblogs 負載 cal 1.1.1. 負載均衡的介紹 Nginx中使用upstream配置塊,可以方便的配置出一個基於反向代理的負載均衡解決方案。 在upstream中可以包含多個server配置項,每個server配
NGINX 負載均衡監測節點狀態 之 十一
圖片 ref erer oct ica figure 1.3 work app 1、監測負載均衡節點作用 用於提供主動式後端服務器健康檢查,通過它可以檢測後端realserver的健康狀態,如果後端realserver不可用,則所有的請求就不會轉發到該節點上。 2、依賴模塊
應用負載均衡之LVS(五):加權調度算法的規律
log 示例 html bsp 先後 分享圖片 一次 表示 cdb 返回LVS系列文章:http://www.cnblogs.com/f-ck-need-u/p/7576137.html 加權調度算法是一種很常見的調度算法。如果只有兩個後端,調度的順序很容易,但是如果後
Linux之nginx負載均衡
Nginx負載均衡概述 Web伺服器,直接面向用戶,往往要承載大量併發請求,單臺伺服器難以負荷,我使用多臺WEB伺服器組成叢集,前端使用Nginx負載均衡,將請求分散的打到我們的後端伺服器叢集中,實現負載的分發。那麼會大大提升系統的吞吐率、請求效能、高容災 Nginx要實現負載均
部署Nginx反向代理三個web服務並排程演算法使用加權輪詢
一步驟:Nginx服務環境 1)關閉防火牆 2)安裝epel-release 3)安裝後進入相關目錄查詢epel源成功否 4)安裝完後,開始安裝nginx 5)啟動服務 6)測試成功(備註:編輯nginx.conf後必須system reload nginx)
nginx負載均衡教程之從不用root編譯開始! + flask + uwsgi 部署高併發網路服務!
編譯使用nginx without root! 之前閱讀了很過國內的部落格,對nginx在linux下的使用都是一筆帶過,這個給後面的使用造成了很大的麻煩!尤其是在不用root怎麼安裝這塊!本部分詳細的講解,供新人使用!此處參考了一個國外人的[wiki
關於nginx平滑均勻加權輪詢演算法的思考
緣起:http://blog.csdn.net/gqtcgq/article/details/52076997 關於nginx演算法的平滑均勻性的一點分析(只考慮兩個的情況,多個的可以類比)。 假設a出現的權重為M,b出現的權重為N 1均勻性: 把演算法的操作分成兩個,ma
nginx負載均衡輪循session問題解決
1.不使用session,換作cookie把session改成cookie,就能避開session的一些弊端。2.資料庫記錄session資訊使用資料庫記錄session資訊,session的使用頻率比較高,如果存在資料庫中,頻繁的讀取會對資料庫產生較大的壓力,網站效能瓶頸一