負載均衡裝置作為縱跨網路2-7層協議的裝置,往往放置在網路裝置和應用裝置的連線處,對工程師在網路和應用基本知識方面的要求遠高於其他裝置,所以我們要在基本功能的理解上下更多的功夫。負載均衡裝置還有另外乙個稱呼:4/7層交換機,但它首先是個2-3層交換機,這要求我們首先掌握2-3層的基本知識,然後才是本文介紹的內容。
伺服器負載均衡有三大基本feature:負載均衡演算法,健康檢查和會話保持,這三個feature是保證負載均衡正常工作的基本要素。其他一些功能都是在這三個功能之上的一些深化。下面我們具體介紹一下各個功能的作用和原理。
在沒有部署負載均衡裝置之前,使用者直接訪問伺服器位址(中間或許有在防火牆上將伺服器位址對映成別的位址,但本質上還是一對一的訪問)。當單臺伺服器由於效能不足無法處理眾多使用者的訪問時,就要考慮用多台伺服器來提供服務,實現的方式就是負載均衡。負載均衡裝置的實現原理是把多台伺服器的位址對映成乙個對外的服務ip(我們通常稱之為vip,關於伺服器的對映可以直接將伺服器ip對映成vip位址,也可以將伺服器ip:port對映成vip:port,不同的對映方式會採取相應的健康檢查,在埠對映時,伺服器端口與vip埠可以不相同),這個過程對使用者端是透明的,使用者實際上不知道伺服器是做了負載均衡的,因為他們訪問的還是乙個目的ip,那麼使用者的訪問到達負載均衡裝置後,如何把使用者的訪問分發到合適的伺服器就是負載均衡裝置要做的工作了,具體來說用到的就是上述的三大feature。
我們來做乙個詳細的訪問流程分析:
使用者(ip:207.17.117.20)訪問網域名稱www.a10networks.com,首先會通過dns查詢解析出這個網域名稱的公網位址:199.237.202.124,接下來使用者207.17.117.20會訪問199.237.202.124這個位址,因此資料報會到達負載均衡裝置,接下來負載均衡裝置會把資料報分發到合適的伺服器,看下圖:
負載均衡裝置在將資料報發給伺服器時,資料報是做了一些變化的,如上圖所示,資料報到達負載均衡裝置之前,源位址是: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。健康檢查的間隔時間和嘗試次數要根據綜合情況來設定,原則是既不會對業務產生影響,又不會對負載均衡裝置造成較大負擔。
假設是同乙個使用者繼續訪問,後續的連線會怎麼處理呢? 看下圖:
使用者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會話保持等,基於不同的應用要配置不同的會話保持,否則會引起負載的不均衡甚至訪問異常。具體可參考本人的另一篇拙作:《不同應用環境下會話保持方式的選擇》。
本文介紹了負載均衡的基本功能和實現原理,看起來並不難,但負載均衡涉及的知識其實非常的廣泛,根據各個使用者系統的不同,我們要熟悉不同的協議和應用流程,甚至涉及到某些開發語言和軟體平台,否則在出現故障的時候,我們可能沒有能力做出有效的判斷,從這個意義上來說,乙個負載均衡裝置的工程師要掌握網路,應用和系統等各方面的知識,這些都要當作基礎來積累。
伺服器負載均衡的基本功能和實現原理
看文留印 負載均衡裝置作為縱跨網路2 7層協議的裝置,往往放置在網路裝置和應用裝置的連線處,對工程師在網路和應用基本知識方面的要求遠高於其他裝置,所以我們要在基本功能的理解上下更多的功夫。負載均衡裝置還有另外乙個稱呼 4 7層交換機,但它首先是個2 3層交換機,這要求我們首先掌握2 3層的基本知識,...
伺服器負載均衡的基本功能和實現原理
負載均衡裝置作為縱跨網路2 7層協議的裝置,往往放置在網路裝置和應用裝置的連線處,對工程師在網路和應用基本知識方面的要求遠高於其他裝置,所以我們要在基本功能的理解上下更多的功夫。負載均衡裝置還有另外乙個稱呼 4 7層交換機,但它首先是個2 3層交換機,這要求我們首先掌握2 3層的基本知識,然後才是本...
伺服器負載均衡的基本功能和實現原理
負載均衡裝置作為縱跨網路2 7層協議的裝置,往往放置在網路裝置和應用裝置的連線處,對工程師在網路和應用基本知識方面的要求遠高於其他裝置,所以我們要在基本功能的理解上下更多的功夫。負載均衡裝置還有另外乙個稱呼 4 7層交換機,但它首先是個2 3層交換機,這要求我們首先掌握2 3層的基本知識,然後才是本...