運維技能樹-負載均衡大全

1.客戶端側的負載均衡

客戶端掌握有服務器列表,根據一定的算法(比如一致性hash)從服務器列表中挑選出服務器進行訪問,從而達到負載均衡。這種類型的應用比較典型的,軟件下載站使用的那種方式,如“廣東電信,廣西聯通,湖南移動。。。”,用戶根據顯示的顏色來判斷這個服務器是否繁忙,繁忙的話,就會自動去選擇一個空閒的服務器。

生活中這種負載均衡也很常見,比如超時排隊,你看到哪個隊短,或者處理的快,你就會跑去那邊排,相當於也是執行了一次客戶端側的負載均衡

2.基於DNS的負載均衡

DNS除了將域名解析爲IP以外,還被應用於2個重要的地方:負載均衡+就近接入。GSLB(全局負載均衡)的實現方式之一就是基於DNS的。原理很簡單,就是通過將域名解析到不同的IP上去,從而分散請求。不過由於localDNS緩存的關係,DNS GSLB的效果會受到一些影響,例如localDNS長時間緩存一個解析記錄,那麼DNS就沒辦法調度客戶端的行爲了,客戶端還是會訪問到繁忙的服務器上去。

3.基於http重定向的負載均衡

http的重定向同樣也可以被用來做負載均衡,通過將請求重定向到不同的url上,從而實現負載均衡。這種負載均衡的方式和反向代理有所區別,基於反向代理的負載均衡對於客戶端來說是透明的,而基於http重定向的這種,需要客戶端支持重定向的能力。

3.基於網絡協議的負載均衡

基於OSI網絡協議棧的2層,3層,4層都可以實現負載均衡,利用2,3,4層進行負載均衡的典型例子就是lvs。主要原理就是在負載均衡設備替換包頭,通過該層的網絡協議將請求轉發給後端的服務器們,服務器處理完以後將包回給客戶端。lvs的DR模式通過將數據鏈路層的包頭改爲後端的真實服務器RS的MAC地址,從而將請求路由過去。lvs的TUN模式,是負載均衡器和後端RS建立了IP隧道,將請求的IP報文裝進另一個IP報文中,通過IP隧道到達後端的RS,請求從隧道出來後脫去了外面的IP外殼,RS就可以原始請求的IP報文進行處理了。值得一提的是,RS的IP TUN必須綁定和前端負載均衡器一樣的VIP,否則根據IP協議,RS拿到IP報文以後,發現DST IP不是自己,那麼它就會丟掉報文,從而無法完成請求。

NAT是將一個IP地址轉換爲另外一個IP地址,一般情況下,我們去訪問外部站點的時候,路由器都會通過NAT,將我們電腦的局域網IP轉換成公網IP去訪問站點,站點回包後,路由器又將公網IP轉換爲內網IP,發送給我們的電腦。

基於NAT的負載均衡思路也是類似的,不過將請求的發起方位置進行了更換,將我們上文說的個人電腦和服務器站點位置對調。我們的電腦訪問站點時,它本身並不做業務處理,而是將請求通過NAT透傳給它後邊的一大堆服務器,從而達到負載均衡。lvs的nat模式就是採用類似的原理。

5.基於反向代理的負載均衡

nginx成功的原因之一就是它可以作爲高性能的反向代理。以nginx爲例,它支持4層和7層的反向代理,兩者的區別是解包的層次不同。當客戶端發送請求到nginx時,它將請求解包,然後將包體重新打包發送到後端的服務器,並且在內部維護一個會話,當後端處理好以後,回包給nginx,nginx再將包封裝好,查詢會話找到客戶端,將響應返回回去。這種原理的還有類似haproxy等應用層的負載均衡軟件。

 

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章