簡單學習總結前端
四層負載均衡工做在OSI模型的傳輸層,主要工做是轉發,它在接收到客戶端的流量之後經過修改數據包的地址信息將流量轉發到應用服務器。java
七層負載均衡工做在OSI模型的應用層,由於它須要解析應用層流量,因此七層負載均衡在接到客戶端的流量之後,還須要一個完整的TCP/IP協議棧。七層負載均衡會與客戶端創建一條完整的鏈接並將應用層的請求流量解析出來,再按照調度算法選擇一個應用服務器,並與應用服務器創建另一條鏈接將請求發送過去,所以七層負載均衡的主要工做就是代理。node
1)四層的負載均衡就是基於IP+端口的負載均衡:linux
對應的負載均衡器稱爲四層交換機(L4 switch),主要分析IP層及TCP/UDP層,實現四層負載均衡。此種負載均衡器不理解應用協議(如HTTP/FTP/MySQL等等)。
實現四層負載均衡的軟件有:nginx
2)七層的負載均衡就是基於虛擬的URL或主機IP的負載均衡正則表達式
對應的負載均衡器稱爲七層交換機(L7 switch),除了支持四層負載均衡之外,還有分析應用層的信息,如HTTP協議URI或Cookie信息,實現七層負載均衡。此種負載均衡器能理解應用協議。
實現七層負載均衡的軟件有:算法
總的來講,通常是lvs作4層負載;nginx作7層負載;haproxy比較靈活,4層和7層負載均衡都能作。sql
(1)目前負載均衡系統有Nginx、LVS、F5,即:apache
(2)軟件和硬件的區別在於性能,硬件遠遠高於軟件,即:後端
(3)4層和7層的區別在於協議和靈活性,即:
技術原理上的區別。
所謂四層負載均衡,也就是主要經過報文中的目標地址和端口,再加上負載均衡設備設置的服務器選擇方式,決定最終選擇的內部服務器。
以常見的TCP爲例,負載均衡設備在接收到第一個來自客戶端的SYN 請求時,即經過上述方式選擇一個最佳的服務器,並對報文中目標IP地址進行修改(改成後端服務器IP),直接轉發給該服務器。TCP的鏈接創建,即三次握手是客戶端和服務器直接創建的,負載均衡設備只是起到一個相似路由器的轉發動做。在某些部署狀況下,爲保證服務器回包能夠正確返回給負載均衡設備,在轉發報文的同時可能還會對報文原來的源地址進行修改。
所謂七層負載均衡,也稱爲「內容交換」,也就是主要經過報文中的真正有意義的應用層內容,再加上負載均衡設備設置的服務器選擇方式,決定最終選擇的內部服務器。
以常見的TCP爲例,負載均衡設備若是要根據真正的應用層內容再選擇服務器,只能先代理最終的服務器和客戶端創建鏈接(三次握手)後,纔可能接受到客戶端發送的真正應用層內容的報文,而後再根據該報文中的特定字段,再加上負載均衡設備設置的服務器選擇方式,決定最終選擇的內部服務器。
負載均衡設備在這種狀況下,更相似於一個代理服務器。負載均衡和前端的客戶端以及後端的服務器會分別創建TCP鏈接。因此從這個技術原理上來看,七層負載均衡明顯的對負載均衡設備的要求更高,處理七層的能力也必然會低於四層模式的部署方式。
一、輪詢法
將請求按順序輪流地分配到後端服務器上,它均衡地對待後端的每一臺服務器,而不關心服務器實際的鏈接數和當前的系統負載。
二、加權輪詢法
不一樣的後端服務器可能機器的配置和當前系統的負載並不相同,所以它們的抗壓能力也不相同。給配置高、負載低的機器配置更高的權重,讓其處理更多的請;而配置低、負載高的機器,給其分配較低的權重,下降其系統負載,加權輪詢能很好地處理這一問題,並將請求順序且按照權重分配到後端。
三、隨機法
經過系統的隨機算法,根據後端服務器的列表大小值來隨機選取其中的一臺服務器進行訪問。由機率統計理論能夠得知,隨着客戶端調用服務端的次數增多,
其實際效果愈來愈接近於平均分配調用量到後端的每一臺服務器,也就是輪詢的結果。
四、加權隨機法
與加權輪詢法同樣,加權隨機法也根據後端機器的配置,系統的負載分配不一樣的權重。不一樣的是,它是按照權重隨機請求後端服務器,而非順序。
五、哈希算法
六、最小鏈接數法
最小鏈接數算法比較靈活和智能,因爲後端服務器的配置不盡相同,對於請求的處理有快有慢,它是根據後端服務器當前的鏈接狀況,動態地選取其中當前
積壓鏈接數最少的一臺服務器來處理當前的請求,儘量地提升後端服務的利用效率,將負責合理地分流到每一臺服務器。
七、IP地址散列
經過管理髮送方IP和目的地IP地址的散列,未來自同一發送方的分組(或發送至同一目的地的分組)統一轉發到相同服務器的算法。當客戶端有一系列業務須要處理而必須和一個服務器反覆通訊時,該算法可以以流(會話)爲單位,保證來自相同客戶端的通訊可以一直在同一服務器中進行處理。八、URL散列
經過管理客戶端請求URL信息的散列,將發送至相同URL的請求轉發至同一服務器的算法。輪詢是默認的方式,每一個請求按時間順序逐一分配到不一樣的後端服務器上。若是後臺服務器上某一臺宕機了,它能夠自動剔除。
缺點:可靠性低和負載分配不均衡。適用於圖片服務器和靜態頁面服務器集羣。
指定輪詢的概率,wight和訪問比率成正比,用於後臺服務器性能不均勻的狀況。
upstream linuxidc{
server 10.0.0.77 weight=5;
server 10.0.0.88 weight=10;
}複製代碼
根據每一個請求的ip的hash結果分配,所以每一個固定ip能訪問到同一個後端服務器,能夠解決session問題。
upstream favresin{
ip_hash;
server 10.0.0.10:8080;
server 10.0.0.11:8080;
}複製代碼
按照後端服務器的響應時間來分配請求,響應時間短的優先分配。
upstream favresin{
server 10.0.0.10:8080;
server 10.0.0.11:8080;
fair;
}複製代碼
按照訪問url的hash結果來分配請求,每一個固定的url訪問同一個後端服務器。若是後端服務器是緩存時效率高。
upstream resinserver{
server 10.0.0.10:7777;
server 10.0.0.11:8888;
hash $request_uri;
hash_method crc32;
}
例:在upstream中加入hash語句,hash_method是使用的hash算法。
複製代碼
在upstream模塊中,能夠經過server命令指定後端服務器的IP地址和端口,同時還能夠設置每臺後端服務器在負載均衡調度中的狀態,
upstream參數解析
示例:
tips:
upstream bakend{ #定義負載均衡設備的Ip及設備狀態
ip_hash;
server 192.0.0.1:8090 weight=5 max_fails=3 fail_timeout=20s;
server 127.0.0.1:9090 down;
server 127.0.0.1:8080 weight=2;
server 127.0.0.1:6060;
server 127.0.0.1:7070 backup;
}複製代碼