天天看點

常用負載均衡算法+nginx負載均衡實作方法

1、輪詢法

  将請求按順序輪流地配置設定到後端伺服器上,它均衡地對待後端的每一台伺服器,而不關心伺服器實際的連接配接數和目前的系統負載。

2、随機法

     通過系統的随機算法,根據後端伺服器的清單大小值來随機選取其中的一台伺服器進行通路。由機率統計理論可以得知,随着用戶端調用服務端的次數增多,

其實際效果越來越接近于平均配置設定調用量到後端的每一台伺服器,也就是輪詢的結果。

3、源位址哈希法

     源位址哈希的思想是根據擷取用戶端的IP位址,通過哈希函數計算得到的一個數值,用該數值對伺服器清單的大小進行取模運算,得到的結果便是客服端要通路伺服器的序号。采用源位址哈希法進行負載均衡,同一IP位址的用戶端,當後端伺服器清單不變時,它每次都會映射到同一台後端伺服器進行通路。

4、權重輪詢法

  不同的後端伺服器可能機器的配置和目前系統的負載并不相同,是以它們的抗壓能力也不相同。給配置高、負載低的機器配置更高的權重,讓其處理更多的請;而配置低、負載高的機器,給其配置設定較低的權重,降低其系統負載,權重輪詢能很好地處理這一問題,并将請求順序且按照權重配置設定到後端。

5、權重随機法

     與權重輪詢法一樣,權重随機法也根據後端機器的配置,系統的負載配置設定不同的權重。不同的是,它是按照權重随機請求後端伺服器,而非順序。

6、最小連接配接數法

     最小連接配接數算法比較靈活和智能,由于後端伺服器的配置不盡相同,對于請求的處理有快有慢,它是根據後端伺服器目前的連接配接情況,動态地選取其中目前

積壓連接配接數最少的一台伺服器來處理目前的請求,盡可能地提高後端服務的利用效率,将負責合理地分流到每一台伺服器。

nginx負載均衡實作方法

1.輪詢 

其nginx.conf檔案編寫如下

upstream test {
server ;
servse ;
}
           

可選擇是否用于後備’backup’ 

輪詢的方法是通過按照時間順序将請求往不同的後端伺服器發送,來緩解伺服器的壓力,如果背景的某個伺服器down掉了,則剔除它,可以設定權重,來配置設定通路的頻率。 

2.權重輪詢 

其nginx.conf檔案編寫如下

upstream test {
server  weight=; 
servse  weight=;
}
           
  • 之前提到的輪詢比較類似,但是輪詢隻是單一的交替,而權重添加以後可以自己設定某個後端伺服器被通路的頻率,比如說上面給的例子,就是1号通路3次後,2号通路兩次。

3.IP_hash 

其nginx.conf檔案編寫如下

upstream test {
            ip_hash;
server 172.25.40.1:;
servse 172.25.40.2:;
}
           

IP_hash的方法是通過将請求和通路按照IP來給其配置設定伺服器,解決了動态網頁共享session的問題,特定的IP隻能固定通路一個後端伺服器。 

4.fair 

其nginx.conf檔案編寫如下

upstream test {
server 172.25.40.1:;
servse 172.25.40.2:;
fair;
}
           

fair方法比起之前的幾個算法要比較靈活一點是按照後端伺服器的響應時間來進行配置設定,響應時間短的優先配置設定。 

5.url_hash 

其nginx.conf檔案編寫如下

pstream test {
server squidIP1:;
servse squidIP2:;
            hash  $request_uri;
            hash_method  crc32;
         }
           

這種方法是按照URL的hash結果來配置設定請求,使URL定向到同一個伺服器,在upstream中加入hash語句後,server語句不能寫入weight等其他參數,這種算法一般在後端緩存的時候比較适合。

tips: 

在Nginx upstream子產品中,可以設定每台後端伺服器在負載均衡排程中的狀态,常用的狀态有: 

1、down,表示目前的server暫時不參與負載均衡 

2、backup,預留的備份機器。當其他所有的非backup機器出現故障或者忙的時候,才會請求backup機器,是以這台機器的通路壓力最低 

3、max_fails,允許請求失敗的次數,預設為1,當超過最大次數時,傳回proxy_next_upstream子產品定義的錯誤。 

4、fail_timeout,請求失敗逾時時間,在經曆了max_fails次失敗後,暫停服務的時間。max_fails和fail_timeout可以一起使用。

Nignx負載均衡功能是通過upstream子產品實作的,是基于内容和應用的7層交換負載均衡。Nginx負載均衡預設對後端伺服器有健康檢測能力,但是檢測能力較弱,僅限于端口檢測,在後端伺服器比較少的情況下(10台及以下)負載均衡能力表現突出。

繼續閱讀