1. 程式人生 > >Nginx的負載均衡之加權輪詢 (Weighted Round Robin)

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欄位的含義後,加權輪詢演算法可描述為:

  1. 對於每個請求,遍歷叢集中的所有可用後端,對於每個後端peer執行:

    peer->current_weight += peer->effecitve_weight。

    同時累加所有peer的effective_weight,儲存為total。

  2. 從叢集中選出current_weight最大的peer,作為本次選定的後端。

  3. 對於本次選定的後端,執行: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 }

通過上述過程,可得以下結論:

  1. 7個請求中,a、b、c分別被選取了4、2、1次,符合它們的權重值。

  2. 7個請求中,a、b、c被選取的順序為a, b, a, c, a, b, a,分佈均勻,權重大的後端a沒有被連續選取。

  3. 每經過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 加權調度算法是一種很常見的調度算法。如果只有兩個後端,調度的順序很容易,但是如果後

Linuxnginx負載均衡

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的使用頻率比較高,如果存在資料庫中,頻繁的讀取會對資料庫產生較大的壓力,網站效能瓶頸一