負載均衡裝置作為縱跨網路2-7層協議的裝置,往往放置在網路裝置和應用裝置的連線處,對工程師在網路和應用基本知識方面的要求遠高於其他裝置,所以我們要在基本功能的理解上下更多的功夫。負載均衡裝置還有另外乙個稱呼:4/7層交換機,但它首先是個2-3層交換機,這要求我們首先掌握2-3層的基本知識,然後才是本文介紹的內容。
伺服器負載均衡有三大基本feature:負載均衡演算法,健康檢查和會話保持,這三個feature是保證負載均衡正常工作的基本要素。其他一些功能都是在這三個功能之上的一些深化。下面我們具體介紹一下各個功能的作用和原理。
在沒有部署負載均衡裝置之前,使用者直接訪問伺服器位址(中間或許有在防火牆上將伺服器位址對映成別的位址,但本質上還是一對一的訪問)。當單臺伺服器由於效能不足無法處理眾多使用者的訪問時,就要考慮用多台伺服器來提供服務,實現的方式就是負載均衡。負載均衡裝置的實現原理是把多台伺服器的位址對映成乙個對外的服務ip(我們通常稱之為vip,關於伺服器的對映可以直接將伺服器ip對映成vip位址,也可以將伺服器ip:port對映成vip:port,不同的對映方式會採取相應的健康檢查,在埠對映時,伺服器端口與vip埠可以不相同),這個過程對使用者端是透明的,使用者實際上不知道伺服器是做了負載均衡的,因為他們訪問的還是乙個目的ip,那麼使用者的訪問到達負載均衡裝置後,如何把使用者的訪問分發到合適的伺服器就是負載均衡裝置要做的工作了,具體來說用到的就是上述的三大feature。
我們來做乙個詳細的訪問流程分析:
負載均衡裝置在將資料報發給伺服器時,資料報是做了一些變化的,如上圖所示,資料報到達負載均衡裝置之前,源位址是:207.17.117.20,目的位址是:199.237.202.124, 當負載均衡裝置將資料報**給選中的伺服器時,源位址還是:207.17.117.20,目的位址變為172.16.20.1,我們稱這種方式為目的位址nat(dnat)。一般來說,在伺服器負載均衡中dnat是一定要做的(還有另一種模式叫做伺服器直接返回-dsr,是不做dnat的,我們將另行討論),而源位址根據部署模式的不同,有時候也需要轉換成別的位址,我們稱之為:源位址nat(snat),一般來說,旁路模式需要做snat,而串接模式不需要,本示意圖為串接模式,所以源位址沒做nat。
我們再看伺服器的返回包,如下圖所示,也經過了ip位址的轉換過程,不過應答包中源/目的位址與請求包正好對調,從伺服器回來的包源位址為172.16.20.1,目的位址為207.17.117.20,到達負載均衡裝置後,負載均衡裝置將源位址改為199.237.202.124,然後**給使用者,保證了訪問的一致性。
以上是單個資料報的處理流程。那麼負載均衡裝置是怎麼選擇伺服器的呢? 這就是我們要介紹的第乙個feature:
負載均衡演算法
一般來說負載均衡裝置都會預設支援多種負載均衡分發策略,例如:
輪詢(roundrobin)將請求順序迴圈地發到每個伺服器。當其中某個伺服器發生故障,ax就把其從順序迴圈佇列中拿出,不參加下一次的輪詢,直到其恢復正常。
比率(ratio):給每個伺服器分配乙個加權值為比例,根椐這個比例,把使用者的請求分配到每個伺服器。當其中某個伺服器發生故障,ax就把其從伺服器佇列中拿出,不參加下一次的使用者請求的分配,直到其恢復正常。
優先權(priority):給所有伺服器分組,給每個組定義優先權,將使用者的請求分配給優先順序最高的伺服器組(在同一組內,採用預先設定的輪詢或比率演算法,分配使用者的請求);當最高優先順序中所有伺服器或者指定數量的伺服器出現故障,ax將把請求送給次優先順序的伺服器組。這種方式,實際為使用者提供一種熱備份的方式。
最少連線數(leastconnection):ax會記錄當前每台伺服器或者服務埠上的連線數,新的連線將傳遞給連線數最少的伺服器。當其中某個伺服器發生故障,ax就把其從伺服器佇列中拿出,不參加下一次的使用者請求的分配,直到其恢復正常。
最快響應時間(fast reponse time):新的連線傳遞給那些響應最快的伺服器。當其中某個伺服器發生故障,ax就把其從伺服器佇列中拿出,不參加下一次的使用者請求的分配,直到其恢復正常。
以上為通用的負載均衡演算法,還有一些演算法根據不同的需求也可能會用到,例如:
雜湊演算法( hash): 將客戶端的源位址,埠進行雜湊運算,根據運算的結果**給一台伺服器進行處理,當其中某個伺服器發生故障,就把其從伺服器佇列中拿出,不參加下一次的使用者請求的分配,直到其恢復正常。
基於資料報的內容分發:例如判斷http的url,如果url中帶有.jpg的副檔名,就把資料報**到指定的伺服器。
繼續看圖分析,第二個使用者207.17.117.21也訪問www.a10networks.com,負載均衡裝置根據負載均衡演算法將第二個使用者的請求**到第二台伺服器來處理。
假設在工作過程中,突然有一台伺服器出現問題怎麼辦? 這就涉及到我們要介紹的第二個feature:
健康檢查
健康檢查用於檢查伺服器開放的各種服務的可用狀態。負載均衡裝置一般會配置各種健康檢查方法,例如ping,tcp,udp,http,ftp,dns等。ping屬於第三層的健康檢查,用於檢查伺服器ip的連通性,而tcp/udp屬於第四層的健康檢查,用於檢查服務埠的up/down,如果要檢查的更準確,就要用到基於7層的健康檢查,例如建立乙個http健康檢查,get乙個頁面回來,並且檢查頁面內容是否包含乙個指定的字串,如果包含,則服務是up的,如果不包含或者取不回頁面,就認為該伺服器的web服務是不可用(down)的。如下圖所示,負載均衡裝置檢查到172.16.20.3這台伺服器的80埠是down的,負載均衡裝置將不把後面的連線**到這台伺服器,而是根據演算法將資料報**到別的伺服器。建立健康檢查時可以設定檢查的間隔時間和嘗試次數,例如設定間隔時間為5秒,嘗試次數為3,那麼負載均衡裝置每隔5秒發起一次健康檢查,如果檢查失敗,則嘗試3次,如果3次都檢查失敗,則把該服務標記為down,然後伺服器仍然會每隔5秒對down的伺服器進行檢查,當某個時刻發現該伺服器健康檢查又成功了,則把該伺服器重新標記為up。健康檢查的間隔時間和嘗試次數要根據綜合情況來設定,原則是既不會對業務產生影響,又不會對負載均衡裝置造成較大負擔。
nginx可以根據客戶端ip進行負載均衡,在upstream裡設定ip_hash,就可以針對同乙個c類位址段中的客戶端選擇同乙個後端伺服器,除非那個後端伺服器宕了才會換乙個。
nginx的upstream目前支援的5種方式的分配
1、輪詢(預設)
每個請求按時間順序逐一分配到不同的後端伺服器,如果後端伺服器down掉,能自動剔除。
upstream backserver
2、指定權重
指定輪詢機率,weight和訪問比率成正比,用於後端伺服器效能不均的情況。
upstream backserver
3、ip繫結 ip_hash
每個請求按訪問ip的hash結果分配,這樣每個訪客固定訪問乙個後端伺服器,可以解決session的問題。
upstream backserver
4、fair(第三方)
按後端伺服器的響應時間來分配請求,響應時間短的優先分配。
upstream backserver
5、url_hash(第三方)
按訪問url的hash結果來分配請求,使每個url定向到同乙個後端伺服器,後端伺服器為快取時比較有效。
upstream backserver
在需要使用負載均衡的server中增加
max_fails :允許請求失敗的次數預設為1.當超過最大次數時,返回proxy_next_upstream 模組定義的錯誤
fail_timeout:max_fails次失敗後,暫停的時間
假設是同乙個使用者繼續訪問,後續的連線會怎麼處理呢? 看下圖:
使用者207.17.117.25之前發起的第乙個連線是207.17.117.25:4003-〉199.237.202.127:80,負載均衡裝置將該連線**到了172.16.20.4,接著發起第二個連線207.17.117.25:4004-〉199.237.202.127:80,我們看到該連線還是**到了伺服器172.16.20.4,為什麼呢?因為負載均衡裝置配置了會話保持。
會話保持
會話保持用於保持會話的連續性和一致性,由於伺服器之間很難做到實時同步使用者訪問資訊,這就要求把使用者的前後訪問會話保持到一台伺服器上來處理。舉個例子,使用者訪問乙個電子商務**,如果使用者登入時是由第一台伺服器來處理的,但使用者購買商品的動作卻由第二台伺服器來處理,第二台伺服器由於不知道使用者資訊,所以本次購買就不會成功。這種情況就需要會話保持,把使用者的操作都通過第一台伺服器來處理才能成功。當然並不是所有的訪問都需要會話保持,例如伺服器提供的是靜態頁面比如**的新聞頻道,各台伺服器都有相同的內容,這種訪問就不需要會話保持。
負載均衡裝置一般會預設配置一些會話保持的選項,例如源位址的會話保持,cookie會話保持等,基於不同的應用要配置不同的會話保持,否則會引起負載的不均衡甚至訪問異常。具體可參考本人的另一篇拙作:《不同應用環境下會話保持方式的選擇》。
本文介紹了負載均衡的基本功能和實現原理,看起來並不難,但負載均衡涉及的知識其實非常的廣泛,根據各個使用者系統的不同,我們要熟悉不同的協議和應用流程,甚至涉及到某些開發語言和軟體平台,否則在出現故障的時候,我們可能沒有能力做出有效的判斷,從這個意義上來說,乙個負載均衡裝置的工程師要掌握網路,應用和系統等各方面的知識,這些都要當作基礎來積累。
(wyl).
負載策略 CMC負載均衡策略
負載均衡技術是一種用在多個網路連線 計算機 計算機集群 cpu 磁碟驅動器或其他資源中,進行負載分配,以達到最優化資源使用 最大化吞吐率 最小化響應時間 同時避免過載的技術。就例如在火車站 商場等較擁擠的地方,會設定多個出入口,管理人員把客戶分散到各個出入口,能大大縮短出入時間。負載均衡也一樣,cm...
負載均衡策略
1,對balancecode 乙個隨機數 簡單的取模,select balancecode m m為伺服器的數量 2,這時候,假如校驗select到的伺服器不可用。那麼。second balancecode m 1 select second select second second 1 效果就是把...
負載均衡策略
負載均衡策略 1.輪循均衡 round robin 每一次來自網路的請求輪流分配給內部中的伺服器,從1至n然後重新開始。此種均衡演算法適合於伺服器組中的所有伺服器都有相同的軟硬體配置並且平均服務請求相對均衡的情況。2.權重輪循均衡 weighted round robin 根據伺服器的不同處理能力,...