負載均衡的三大要素:演算法,健康檢查和會話保持。
負載均衡演算法
一般來說負載均衡裝置都會預設支援多種負載均衡分發策略,例如:
ø 輪詢(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會話保持等,基於不同的應用要配置不同的會話保持,否則會引起負載的不均衡甚至訪問異常。具體可參考本人的另一篇拙作:《不同應用環境下會話保持方式的選擇》。
本文介紹了負載均衡的基本功能和實現原理,看起來並不難,但負載均衡涉及的知識其實非常的廣泛,根據各個使用者系統的不同,我們要熟悉不同的協議和應用流程,甚至涉及到某些開發語言和軟體平台,否則在出現故障的時候,我們可能沒有能力做出有效的判斷,從這個意義上來說,乙個負載均衡裝置的工程師要掌握網路,應用和系統等各方面的知識,這些都要當作基礎來積累。
php負載均衡原理 PHP超級負載均衡
現有系統中存在的問題 1.慢連線 瞬時訪問慢。場景一 如果後端新增加機器,cache命中率低,因此響應速度慢,但是能連線上且不超時。如果ui持續訪問就會把uicheap sunglasses wholesale夯住。場景二 如果後端模組某一台機器響應較慢。如果前端持續訪問就會被夯住。2.宕機。場景一...
LVS負載均衡原理
實現lvs負載均衡 方式有三種,分別為nat dr tun模式,lvs常見演算法包括rr lc wrr wlc等 lvs nat原理 使用者請求lvs到達director,director將請求的報文的目標ip位址改成後端的realserver ip位址,同時將報文的目標埠也改成後端選定的reals...
nginx負載均衡實踐原理
nginx這個輕量級 高效能的 web server 主要可以幹兩件事情 直接作為http server 代替apache,對php需要fastcgi處理器支援 另外乙個功能就是作為反向 伺服器實現負載均衡 1 環境 a.我們本地是windows系統,然後使用virutalbox安裝乙個虛擬的lin...