1、輪詢法
將請求按順序輪流地分配到後端服務器上,它均衡地對待後端的每一臺服務器,而不關心服務器實際的連接數和當前的系統負載。
2、隨機法
通過系統的隨機算法,根據後端服務器的列表大小值來隨機選取其中的一臺服務器進行訪問。由概率統計理論可以得知,隨着客戶端調用服務端的次數增多,
其實際效果越來越接近於平均分配調用量到後端的每一臺服務器,也就是輪詢的結果。
3、源地址哈希法
源地址哈希的思想是根據獲取客戶端的IP地址,通過哈希函數計算得到的一個數值,用該數值對服務器列表的大小進行取模運算,得到的結果便是客服端要訪問服務器的序號。採用源地址哈希法進行負載均衡,同一IP地址的客戶端,當後端服務器列表不變時,它每次都會映射到同一臺後端服務器進行訪問。
4、加權輪詢法
不同的後端服務器可能機器的配置和當前系統的負載並不相同,因此它們的抗壓能力也不相同。給配置高、負載低的機器配置更高的權重,讓其處理更多的請;而配置低、負載高的機器,給其分配較低的權重,降低其系統負載,加權輪詢能很好地處理這一問題,並將請求順序且按照權重分配到後端。
5、加權隨機法
與加權輪詢法一樣,加權隨機法也根據後端機器的配置,系統的負載分配不同的權重。不同的是,它是按照權重隨機請求後端服務器,而非順序。
6、最小連接數法
最小連接數算法比較靈活和智能,由於後端服務器的配置不盡相同,對於請求的處理有快有慢,它是根據後端服務器當前的連接情況,動態地選取其中當前
積壓連接數最少的一臺服務器來處理當前的請求,儘可能地提高後端服務的利用效率,將負責合理地分流到每一臺服務器。
nginx負載均衡實現方法
1.輪詢
其nginx.conf文件編寫如下
upstream test {
server 172.25.40.1:80;
servse 172.25.40.2:8080;
}
可選擇是否用於後備’backup’
輪詢的方法是通過按照時間順序將請求往不同的後端服務器發送,來緩解服務器的壓力,如果後臺的某個服務器down掉了,則剔除它,可以設置權重,來分配訪問的頻率。
2.權重輪詢
其nginx.conf文件編寫如下
upstream test {
server 172.25.40.1:80 weight=3;
servse 172.25.40.2:8080 weight=2;
}
- 之前提到的輪詢比較類似,但是輪詢只是單一的交替,而權重添加以後可以自己設定某個後端服務器被訪問的頻率,比如說上面給的例子,就是1號訪問3次後,2號訪問兩次。
3.IP_hash
其nginx.conf文件編寫如下
upstream test {
ip_hash;
server 172.25.40.1:80;
servse 172.25.40.2:8080;
}
IP_hash的方法是通過將請求和訪問按照IP來給其分配服務器,解決了動態網頁共享session的問題,特定的IP只能固定訪問一個後端服務器。
4.fair
其nginx.conf文件編寫如下
upstream test {
server 172.25.40.1:80;
servse 172.25.40.2:8080;
fair;
}
fair方法比起之前的幾個算法要比較靈活一點是按照後端服務器的響應時間來進行分配,響應時間短的優先分配。
5.url_hash
其nginx.conf文件編寫如下
pstream test {
server squidIP1:3128;
servse squidIP2:3128;
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臺及以下)負載均衡能力表現突出。