1.什麼是負載均衡
load balancing,即負載均衡,是一種計算機技術,用來在多個計算機(計算機集群)、網路連線、cpu、磁碟驅動器或其他資源中分配負載,以達到最優化資源使用、最大化吞吐率、最小化響應時間、同時避免過載的目的。
2.為什麼需要負載均衡
我們在日常生活中經常免不了要去一些比較擁擠的地方,比如地鐵站、火車站、電影院、銀行等。無論是買票,還是排隊入場,這些場所一般都會設定多個服務點或者入口的。如果沒有人引導的話,大多數情況下,最近的入口會擠滿人。而哪些距離較遠的服務點或者入口就寬鬆很多。
這種情況下,就會大大浪費資源,因為如果可以把這些排隊的人很好的分散到各個入口的話會大大縮短排隊時間。其實,**的建設也是一樣的。為了提公升**的服務能力,很多**採用集群部署,就像話劇院有多個入口一樣。這時候,就需要乙個協調者,來均衡的分配這些使用者的請求,可以讓使用者的可以均勻的分派到不同的伺服器上。
什麼是負載均衡
在早高峰乘地鐵時候,緊挨小區的地鐵口人特別多,一般會有限流,還會有個地鐵工作人員d那個大喇叭在喊「著急的人員請走b口,b口人少車空」。。。
而這個地鐵工作人員d就是負責負載均衡的。為了提公升**的各方面能力,我們一般會把多台機器組成乙個集群對外提供服務。然而,我們的**對外提供的訪問入口都是乙個的,比如www.taobao.com。那麼當使用者在瀏覽器輸入www.taobao.com的時候如何將使用者的請求分發到集群中不同的機器上呢,這就是負載均衡在做的事情。
負載均衡(load balance),意思是將負載(工作任務,訪問請求)進行平衡、分攤到多個操作單元(伺服器,元件)上進行執行。是解決高效能,單點故障(高可用),擴充套件性(水平伸縮)的終極解決方案。
3.負載均衡分類
先看下osi七層模型
osi是乙個開放性的通訊系統互連參考模型,他是乙個定義得非常好的協議規範。
osi模型有7層結構,每層都可以有幾個子層。 osi的7層從上到下分別是 7、應用層;6、表示層;5、會話層;4、傳輸層;3、網路層;2、資料鏈路層;1、物理層;
其中高層(即7、6、5、4層)定義了應用程式的功能,下面3層(即3、2、1層)主要面向通過網路的端到端的資料流。
在這七層模型種,高層次都是依賴於低層次的。層次越高,使用起來越方便。
計算機網路有關的概念:
telnet、http、ftp、nfs、smtp、dns等屬於第七層應用層的概念。
tcp、udp、spx等屬於第四層傳輸層的概念。
ip、ipx等屬於第三層網路層的概念。
atm、fddi等屬於第二層資料鏈路層的概念。
了解了網路協議的七層模型以後,再來看看負載均衡。我們可以很明確的一點是,負載均衡是要在網路傳輸中做文章的。而要在網路傳輸過程搞事情,那麼這七層模型就勢必躲不開。
所以,根據負載均衡技術實現在osi七層模型的不同層次,是可以給負載均衡分類的。
常見的實現方式中,主要可以在應用層、傳輸層、網路層和資料傳輸層做文章。所以,工作在應用層的負載均衡,我們通常稱之為七層負載均衡、工作在傳輸層的我們稱之為四層負載均衡。
大致可以分為以下幾種,其中最常用的是四層和七層負載均衡:
二層負載均衡
負載均衡伺服器對外依然提供乙個vip(虛ip),集群中不同的機器採用相同ip位址,但是機器的mac位址不一樣。當負載均衡伺服器接受到請求之後,通過改寫報文的目標mac位址的方式將請求**到目標機器實現負載均衡。
三層負載均衡
和二層負載均衡類似,負載均衡伺服器對外依然提供乙個vip(虛ip),但是集群中不同的機器採用不同的ip位址。當負載均衡伺服器接受到請求之後,根據不同的負載均衡演算法,通過ip將請求**至不同的真實伺服器。
四層負載均衡
四層負載均衡工作在osi模型的傳輸層,由於在傳輸層,只有tcp/udp協議,這兩種協議中除了包含源ip、目標ip以外,還包含源埠號及目的埠號。四層負載均衡伺服器在接受到客戶端請求後,以後通過修改資料報的位址資訊(ip+埠號)將流量**到應用伺服器。
七層負載均衡
七層負載均衡工作在osi模型的應用層,應用層協議較多,常用http、radius、dns等。七層負載就可以基於這些協議來負載。這些應用層協議中會包含很多有意義的內容。比如同乙個web伺服器的負載均衡,除了根據ip加埠進行負載外,還可根據七層的url、瀏覽器類別、語言來決定是否要進行負載均衡。
負載均衡工具
市面上有很多開源的負載均衡的工具或軟體,基本都是基於前面提到的方案實現的,大多數是工作在第七層和第四層的。nginx/lvs/haproxy是目前使用最廣泛的三種負載均衡軟體。
lvs:lvs主要用來做四層負載均衡
lvs(linux virtual server),也就是linux虛擬伺服器, 是乙個由章文嵩博士發起的自由軟體專案。使用lvs技術要達到的目標是:通過lvs提供的負載均衡技術和linux作業系統實現乙個高效能、高可用的伺服器群集,它具有良好可靠性、可擴充套件性和可操作性。從而以低廉的成本實現最優的服務效能。
nginx:nginx主要用來做七層負載均衡
nginx(發音同engine x)是乙個網頁伺服器,它能反向**http, https, smtp, pop3, imap的協議鏈結,以及乙個負載均衡器和乙個http快取。。
haproxy:haproxy主要用來做七層負載均衡
haproxy是乙個使用c語言編寫的自由及開放源**軟體,其提供高可用性、負載均衡,以及基於tcp和http的應用程式**。
4.負載均衡演算法
負載均衡伺服器在決定將請求**到具體哪台真實伺服器的時候,是通過負載均衡演算法來實現的。負載均衡演算法,是乙個負載均衡伺服器的核心。
就像電影院門口的引導員一樣,他根據什麼把排隊人員分配到具體的入口呢?是哪個入口人少嗎?還是哪個入口速度最快?還是哪個入口最近呢?
負載均衡演算法可以分為兩類:靜態負載均衡演算法和動態負載均衡演算法。
1).靜態負載均衡演算法包括:輪詢,比率,優先權
輪詢(round robin):順序迴圈將請求一次順序迴圈地連線每個伺服器。當其中某個伺服器發生第二到第7 層的故障,big-ip 就把其從順序迴圈佇列中拿出,不參加下一次的輪詢,直到其恢復正常。
比率(ratio):給每個伺服器分配乙個加權值為比例,根椐這個比例,把使用者的請求分配到每個伺服器。當其中某個伺服器發生第二到第7 層的故障,big-ip 就把其從伺服器佇列中拿出,不參加下一次的使用者請求的分配, 直到其恢復正常。
優先權(priority):給所有伺服器分組,給每個組定義優先權,big-ip 使用者的請求,分配給優先順序最高的伺服器組(在同一組內,採用輪詢或比率演算法,分配使用者的請求);當最高優先順序中所有伺服器出現故障,big-ip 才將請求送給次優先順序的伺服器組。這種方式,實際為使用者提供一種熱備份的方式。
2).動態負載均衡演算法包括: 最少連線數,最快響應速度,觀察方法,**法,動態效能分配,動態伺服器補充,服務質量,服務型別,規則模式。
最少的連線方式(least connection):傳遞新的連線給那些進行最少連線處理的伺服器。當其中某個伺服器發生第二到第7 層的故障,big-ip 就把其從伺服器佇列中拿出,不參加下一次的使用者請求的分配, 直到其恢復正常。
最快模式(fastest):傳遞連線給那些響應最快的伺服器。當其中某個伺服器發生第二到第7 層的故障,big-ip 就把其從伺服器佇列中拿出,不參加下一次的使用者請求的分配,直到其恢復正常。
觀察模式(observed):連線數目和響應時間以這兩項的最佳平衡為依據為新的請求選擇伺服器。當其中某個伺服器發生第二到第7 層的故障,big-ip就把其從伺服器佇列中拿出,不參加下一次的使用者請求的分配,直到其恢復正常。
**模式(predictive):big-ip利用收集到的伺服器當前的效能指標,進行**分析,選擇一台伺服器在下乙個時間片內,其效能將達到最佳的伺服器相應使用者的請求。(被big-ip 進行檢測)
動態效能分配(dynamic ratio-apm):big-ip 收集到的應用程式和應用伺服器的各項效能引數,動態調整流量分配。
動態伺服器補充(dynamic server act.):當主伺服器群中因故障導致數量減少時,動態地將備份伺服器補充至主伺服器群。
服務質量(qos):按不同的優先順序對資料流進行分配。
服務型別(tos):按不同的服務型別(在type of field中標識)負載均衡對資料流進行分配。
規則模式:針對不同的資料流設定導向規則,使用者可自行。
阿里雲負載均衡SLB
slb 簡單來講就是slb系統也是乙個由多台計算機構成的集群。使用者在這個系統中申請和配置了乙個slb的例項對外提供服務,針對該slb例項的訪問請求會通過我們的系統按照使用者設定的規則向後端的多台ecs進行 那麼當我們系統內的某一台計算機出現問題的時候,其他的計算機可以承擔本應由其處理的任務而保證整...
阿里雲建立負載均衡
開啟阿里雲的官方 登入進入到控制台,點選左側的負載均衡,進入到負載均衡的頁面 2.進入到負載均衡頁面,點選建立負載均衡,進入到負載均衡建立頁面,收費方式分為預付費模式,按量付費模式 3.選擇好各項配置之後 地域,例項型別,主備可用區,收費方式等 點選立即購買,完成付費即可 建立完成如下圖 4.接下來...
阿里雲負載均衡怎麼配置?
很多人對負載均衡一頭霧水,不知道怎麼用,流程順序的是什麼的。第一步建立雲伺服器ecs例項,使用負載均衡服務前,您需要至少建立2臺雲伺服器ecs例項。建立例項,說白了就是買 租用阿里雲的雲伺服器ecs 第二步建立ecs例項後,您需要在ecs上部署相關應用。可參考教程 如何將1個專案部署到多台伺服器上?...