負載均衡之dns網域名稱解析:
由上圖可以看出,在dns伺服器中應該配置了多個a記錄,如:
dns網域名稱解析負載均衡有如下優點:
1. 將負載均衡的工作交給dns,省去了**管理維護負載均衡伺服器的麻煩。
2. 技術實現比較靈活、方便,簡單易行,成本低,使用於大多數tcp/ip應用。
3. 對於部署在伺服器上的應用來說不需要進行任何的**修改即可實現不同機器上的應用訪問。
3. 伺服器可以位於網際網路的任意位置。
4. 同時許多dns還支援基於地理位置的網域名稱解析,即會將網域名稱解析成距離使用者地理最近的乙個伺服器位址,這樣就可以加速使用者訪問,改善效能。
同時,dns網域名稱解析也存在如下缺點:
1. 目前的dns是多級解析的,每一級dns都可能快取a記錄,當某台伺服器下線之後,即使修改了a記錄,要使其生效也需要較長的時間,這段時間,dns任然會將網域名稱解析到已下線的伺服器上,最終導致使用者訪問失敗。
2. 不能夠按伺服器的處理能力來分配負載。dns負載均衡採用的是簡單的輪詢演算法,不能區分伺服器之間的差異,不能反映伺服器當前執行狀態,所以其的負載均衡效果並不是太好。
3. 可能會造成額外的網路問題。為了使本dns伺服器和其他dns伺服器及時互動,保證dns資料及時更新,使位址能隨機分配,一般都要將dns的重新整理時間設定的較小,但太小將會使dns流量大增造成額外的網路問題。
事實上,大型**總是部分使用dns網域名稱解析,利用網域名稱解析作為第一級負載均衡手段,即網域名稱解析得到的一組伺服器並不是實際提供服務的物理伺服器,而是同樣提供負載均衡伺服器的內部伺服器,這組內部負載均衡伺服器再進行負載均衡,請請求發到真實的伺服器上,最終完成請求。
負載均衡之http重定向
由於目前現有網路的各個核心部分隨著業務量的提高,訪問量和資料流量的快速增長,其處理能力和計算強度也相應地增大,使得單一的伺服器裝置根本無法承擔。在此情況下,如果扔掉現有裝置去做大量的硬體公升級,這樣將造成現有資源的浪費,而且如果再面臨下一次業務量的提公升時,這又將導致再一次硬體公升級的高額成本投入,甚至效能再卓越的裝置也不能滿足當前業務量增長的需求。針對此情況而衍生出來的一種廉價有效透明的方法以擴充套件現有網路裝置和伺服器的頻寬、增加吞吐量、加強網路資料處理能力、提高網路的靈活性和可用性的技術就是負載均衡(load balance)。
乙個能夠提供高併發訪問,快速響應的伺服器集群不是一開始就能設計出來的,但對於軟體架構師而言,在架構設計之初就要有應付這種高併發,為集群提供水平擴充套件的計畫,具體何時進行擴充套件,就需要在後續處理業務的過程中慢慢演化了。同時,在設計之初,為了能快速擴充套件而不影響集群的正常使用,建議把伺服器設計成無狀態的,也就是集群伺服器不儲存請求上下文資訊,這樣使用者的請求被發往集群中的任何乙個節點所處理的返回結果都將是一樣的。因此在集群中就可以使用負載均衡技術將不同的請求發往不同的節點上進行處理。如下圖:
負載均衡伺服器需要能夠感知或者可以配置集群中的伺服器數量,可以及時發現集群中新上線或者下線的伺服器,並能向新上線的伺服器分發請求,停止向已下線的伺服器分發請求,這樣就實現了伺服器集群的伸縮性。負載均衡的實現技術有多種多樣,從硬體實現到軟體實現,從商業產品到開源產品,應有盡有。本文主要介紹web伺服器中http
反向**機制,以此來達到伺服器之間的負載均衡。
利用http重定向協議實現負載均衡大概工作原理如下圖:
這種負載均衡方案的有點是比較簡單,缺點是瀏覽器需要兩次請求伺服器才能完成一次訪問,效能較差;同時,重定向伺服器本身的處理能力有可能成為瓶頸,整個集群的伸縮性規模有限;使用http返回碼302
重定向,有可能使搜尋引擎判斷為seo作弊,降低搜尋排名。因此實踐中很少使用這種負載均衡方案來部署。
負載均衡之反向**
反向**(reverseproxy)方式是指以**伺服器來接受internet上的連線請求,然後將請求**給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時**伺服器對外就表現為乙個伺服器,該伺服器就可稱之為**伺服器。由於**伺服器處在最終處理請求訪問的伺服器之前,因此可以在**伺服器上做負載均衡。實際上,網際網路中也大量的存在反向**伺服器提供**功能的同時也提供負載均衡的功能。其工作原理如下圖所示:
由上圖可以推出,反向**伺服器,管理了一組伺服器,可以根據對應的負載均衡演算法將不同的請求**到不同的伺服器上。伺服器處理完成的響應也通過**伺服器返回給使用者。由於內部伺服器不直接對外提供訪問,因此,內部伺服器位址不需要使用外部ip,而反向**伺服器則需要配置雙網絡卡,提供內部和對外訪問的ip位址。
如上圖,使用者瀏覽器訪問請求的位址是114.100.20.200,反向**伺服器接收到請求後,根據負載均衡演算法計算得到一台真實的內部伺服器位址192.168.1.1,並將使用者的請求**到該伺服器上,192.168.1.1處理完請求後將響應返回給反相**伺服器,反相**伺服器再將該響應的內容返回給使用者。
與此同時,反相**伺服器還可以具有儲存靜態資料用於快取的功能,從而加速處理使用者請求,提高伺服器處理效能,其工作原理大概如下圖所示:
反向**伺服器**請求處於應用層協議上,因此,也稱之為應用層負載均衡。該負載均衡方案與反向**伺服器功能整合到了一起,部署相對簡單,但是,反向**伺服器會處理所有的請求和響應,其效能可能將會成為整個集群的瓶頸。
注:常用的**伺服器軟體有:fikker、nginx、squid等
負載均衡之ip
關於每層在網路資料報傳輸過程中所起到的作用不是本文的重點,本文主要是講解如何在網路層中使用ip
來做伺服器集群的負載均衡,為什麼可以在這一層來做負載均衡。下面在來看ip協議的報頭格式:
內紅色框內的源位址和目的位址是ip負載均衡功能的關鍵所在,ip
負載均衡又可以稱之為網路層負載均衡,其核心原理就是通過核心驅動更改ip的目的位址來完成資料負載均衡的,如下圖:
如上圖所示,使用者請求資料報(源位址為200.110.50.1)到達負載均衡伺服器114.100.20.200後,負載均衡伺服器在核心程序獲取網路資料報,根據一定的負載均衡演算法得到一台內部的真實伺服器192.168.1.1,然後將資料報的目的ip修改為192.168.1.1,此後資料報將會被發往192.168.1.1的伺服器上,伺服器處理完後,將向負載均衡伺服器返回相應的資料報,負載均衡伺服器在把源位址修改為114.100.20.200後將資料報傳輸給使用者瀏覽器。在這一整個過程中,資料報沒有通過使用者的應用程序,因此該負載均衡的效能是非常之高的。
根據以上的圖和上文的講解,大家可能會覺得這很容易實現,其實不然,在這裡需要處理關鍵的地方就是如何將集群內部伺服器處理完後的資料返回給負載均衡伺服器。因為,使用者請求的資料報到達負載均衡伺服器前的目的位址是114.100.20.200,源位址是200.110.50.1,通過負載均衡伺服器修改後的目的位址是192.168.1.1,源位址還是200.110.50.1,所以處理後返回的資料報目的位址將是200.110.50.1,源位址是192.168.1.1,最終返回的資料報要回到負載均衡伺服器就成了問題。解決的辦法大概有如下兩種:一、負載均衡伺服器使用雙網絡卡,乙個對內乙個對外,在修改請求資料報的目的ip的同時也修改源位址,將源位址設為自身的ip,即源位址轉換(snat),這樣內部集群伺服器響應會再回到負載均衡伺服器;二、將負載均衡伺服器作為真實物理伺服器集群的閘道器伺服器,這樣所有的響應都將通過負載均衡伺服器。
負載均衡之資料鏈路層
在tcp/ip協議中資料鏈路層處於最底層,以幀的形式傳輸和接受資料。在這一層中mac (media access control)定址是主要功能。在網路中mac又稱之為mac位址,用於表示網際網路上每個網絡卡的識別符號,採用十六進製制表示,共6個位元組(48位),燒錄在網絡卡內部。更形象的說mac位址就像身份證號碼,全球唯一。乙太網中資料幀之間是通過mac定址來到達對應的計算機網絡卡或者路由的,因此,伺服器集群可以充分利用這一特性來進行負載均衡。
這種資料傳輸方式又稱為三角傳輸,負載均衡資料分發過程中不修改ip位址,只修改目的mac位址,通過配置真實物理伺服器集群所有機器虛擬ip和負載均衡伺服器ip一致,從而達到不修改資料報的源位址和目的位址就可以進行資料分發的目的,由於實際處理請求的真實物理伺服器ip和資料請求目的ip一致,不需要通過負載均衡伺服器進行位址交換,可將響應資料報直接返回給使用者瀏覽器,避免負載均衡伺服器網絡卡頻寬成為瓶頸。這種負載均衡方式又稱之為直接路由方式(dr).
如上圖所示,使用者請求到達負載均衡伺服器114.100.20.200後,負載均衡伺服器將資料報的目的mac位址更改為00:1e:ec:bc:5e:03,並不修改資料報目的ip,由於伺服器集群所有伺服器的虛擬ip位址和負載均衡伺服器ip位址一致,因此資料可以正常傳輸到達mac位址為00:1e:ec:bc:5e:03的機器上,該伺服器處理完之後,將響應資料報傳送到閘道器伺服器,閘道器伺服器直接將資料報傳送給使用者瀏覽器,響應資料不需要通過負載均衡伺服器,這樣就避免了負載均衡伺服器成為傳輸瓶頸的可能。
使用三角傳輸模式的鏈路層負載均衡是目前大型**使用最為廣泛的一種負載均衡手段。在linux平台上最好的鏈路層負載均衡開源產品是lvs(linux virtualserver)
伺服器負載均衡演算法
3.1 伺服器負載均衡演算法 big ip是一台對流量和內容進行管理分配的裝置。它提供10種靈活的演算法將資料流有效地 到它所連線的伺服器群。而面對使用者,只是一台虛擬伺服器。使用者此時只須記住一台伺服器,即虛擬伺服器。但他們的資料流卻被big ip靈活地均衡到所有的伺服器。這10種演算法包括 輪詢...
Nginx tomcat伺服器 負載均衡
反向 reverse proxy 方式是指以 伺服器來接受internet上的連線請求,然後將請求 給內部網路上的伺服器,並將從伺服器上得到的結果返回給internet上請求連線的客戶端,此時 伺服器對外就表現為乙個反向 伺服器。1 熱部署 我個人覺得這個很不錯。在master管理程序與worker...
web 伺服器負載均衡
web 應用伺服器集群系統,是由一群同時執行同乙個web應用的伺服器組成的集群系統,在外界看來,就像是乙個伺服器一樣。為了均衡集群服務 器的負載,達到優化系統效能的目的,集群伺服器將眾多的訪問請求,分散到系統中的不同節點進行處理。從而實現了更高的有效性和穩定性,而這也正是基於web的企業應用所必須具...