參考:http://www.cnblogs.com/lovingprince/archive/2008/11/13/2166350.htmlhtml
http://www.cnblogs.com/lovingprince/archive/2008/11/13/2166349.htmlweb
http://news.cnblogs.com/n/208124/ 算法
http://network.51cto.com/art/201108/281452.htm數據庫
負載均衡的概念 後端
這是目前運用最爲普遍的雙節點雙應用的Active/Active模式。緩存
支撐用戶業務的應用程序在正常狀態下分別在兩臺節點上運行,各自有本身的資源,好比IP地址、磁盤陣列上的卷或者文件系統。當某一方的系統或者資源出現故障時,就會將應用和相關資源切換到對方的節點上。安全
這種模式的最大優勢是不會有服務器的「閒置」,兩臺服務器在正常狀況下都在工做。但若是有故障發生致使切換,應用將放在同一臺服務器上運行,因爲服務器的處理能力有可能不能同時知足數據庫和應用程序的峯值要求,這將會出現處理能力不夠的狀況,下降業務響應水平。服務器
兩節點的Active/Standby模式是HA中最簡單的一種,兩臺服務器經過雙心跳線路組成一個集羣。應用Application聯合各個可選的系統組件如:外置共享的磁盤陣列、文件系統和浮動IP地址等組成業務運行環境。網絡
PCL爲此環境提供了徹底冗餘的服務器配置。這種模式的優缺點:架構
前面已經說過負載均衡的做用是在多個節點之間按照必定的策略(算法)分發網絡或計算處理負載。負載均衡能夠採用軟件和硬件來實現。通常的框架結構能夠參考下圖。
支持負載均衡的地址轉換網關,能夠將一個外部IP地址映射爲多個內部IP地址,對每次TCP鏈接請求動態使用其中一個內部地址,達到負載均衡的目的。不少 硬件廠商將這種技術集成在他們的交換機中,做爲他們第四層交換的一種功能來實現,通常採用隨機選擇、根據服務器的鏈接數量或者響應時間進行選擇的負載均衡 策略來分配負載。因爲地址轉換相對來說比較接近網絡的低層,所以就有可能將它集成在硬件設備中,一般這樣的硬件設備是局域網交換機。
負載均衡軟實現
目前比較流行的就三類軟件負載均衡,LVS、Nginx和HAProxy。用的最多的仍是LVS和Nginx這兩種。
◆LVS
平時咱們說的LVS是Linux Virtual Server。這固然是基於Linux的開源軟件了,這就意味着它是免費的。它基本上能支持全部應用,由於lvs工做在4層,因此它能夠對幾乎全部應用作負載均衡,包括http、數據庫、聊天室等等。同時,若跟硬件負載均衡相比它的缺點也不容忽視,LVS要求技術水平很高,操做上也比較複雜,配置也很繁瑣,沒有賴以保障的服務支持,穩定性來講也相對較低(人爲和網絡環境因素更多一些)。
◆Nginx
在這裏,咱們介紹Nginx就須要跟LVS來對比了。LVS是工做在第四層,對網絡的依賴性相對較大。然而Nginx是工做在第七層,對於網絡的依賴性就小的多。與LVS相比,Nginx的安裝和配置也相對簡單一些,另外測試方面也更簡單,主要仍是由於對網絡依賴性小的緣故。Nginx有一點很差的就是應用要比LVS少。通常咱們作軟件負載均衡的時候,一般會先考慮LVS,可是遇到比較複雜的網絡環境時,用LVS可能會遇到不少麻煩,不妨就考慮嘗試一下Nginx。
◆HAProxy
使用HAProxy的人很是少,對其瞭解的也很少。經過官方的瞭解,HAProxy提供高可用性、負載均衡以及基於TCP和HTTP應用的代理,支持虛擬主機,它是免費、快速而且可靠的一種解決方案。HAProxy特別適用於那些負載特大的web站點,這些站點一般又須要會話保持或七層處理。(聽說是能夠工做在4-7層的。)而且它的運行模式使得它能夠很簡單安全的整合進您當前的架構中,同時能夠保護你的web服務器不被暴露到網絡上。
3、軟負載——LVS
LVS 是四層負載均衡,也就是說創建在 OSI 模型的第四層——傳輸層之上,傳輸層上有咱們熟悉的 TCP/UDP,LVS 支持 TCP/UDP 的負載均衡。
LVS 的轉發主要經過修改 IP 地址(NAT 模式,分爲源地址修改 SNAT 和目標地址修改 DNAT)、修改目標 MAC(DR 模式)來實現。
那麼爲何 LVS 是在第四層作負載均衡?
首先 LVS 不像 HAProxy 等七層軟負載面向的是 HTTP 包,因此七層負載能夠作的 URL 解析等工做,LVS 沒法完成。其次,某次用戶訪問是與服務端創建鏈接後交換數據包實現的,若是在第三層網絡層作負載均衡,那麼將失去「鏈接」的語義。軟負載面向的對象應該是一個已經創建鏈接的用戶,而不是一個孤零零的 IP 包。後面會看到,實際上 LVS 的機器代替真實的服務器與用戶經過 TCP 三次握手創建了鏈接,因此 LVS 是須要關心「鏈接」級別的狀態的。
LVS 的工做模式主要有 4 種:
DR
NAT
TUNNEL
Full-NAT
這裏挑選經常使用的 DR、NAT、Full-NAT 來簡單介紹一下。
一、DR
請求由 LVS 接受,由真實提供服務的服務器(RealServer, RS)直接返回給用戶,返回的時候不通過 LVS。
DR 模式下須要 LVS 和綁定同一個 VIP(RS 經過將 VIP 綁定在 loopback 實現)。
一個請求過來時,LVS 只須要將網絡幀的 MAC 地址修改成某一臺 RS 的 MAC,該包就會被轉發到相應的 RS 處理,注意此時的源 IP 和目標 IP 都沒變,LVS 只是作了一下移花接木。
RS 收到 LVS 轉發來的包,鏈路層發現 MAC 是本身的,到上面的網絡層,發現 IP 也是本身的,因而這個包被合法地接受,RS 感知不到前面有 LVS 的存在。
而當 RS 返回響應時,只要直接向源 IP(即用戶的 IP)返回便可,再也不通過 LVS。
DR 模式是性能最好的一種模式。
二、NAT
NAT(Network Address Translation)是一種外網和內網地址映射的技術。
NAT 模式下,網絡報的進出都要通過 LVS 的處理。LVS 須要做爲 RS 的網關。
當包到達 LVS 時,LVS 作目標地址轉換(DNAT),將目標 IP 改成 RS 的 IP。RS 接收到包之後,彷彿是客戶端直接發給它的同樣。
RS 處理完,返回響應時,源 IP 是 RS IP,目標 IP 是客戶端的 IP。
這時 RS 的包經過網關(LVS)中轉,LVS 會作源地址轉換(SNAT),將包的源地址改成 VIP,這樣,這個包對客戶端看起來就彷彿是 LVS 直接返回給它的。客戶端沒法感知到後端 RS 的存在。
三、Full-NAT
不管是 DR 仍是 NAT 模式,不可避免的都有一個問題:LVS 和 RS 必須在同一個 VLAN 下,不然 LVS 沒法做爲 RS 的網關。
這引起的兩個問題是:
一、同一個 VLAN 的限制致使運維不方便,跨 VLAN 的 RS 沒法接入。
二、LVS 的水平擴展受到制約。當 RS 水平擴容時,總有一天其上的單點 LVS 會成爲瓶頸。
Full-NAT 由此而生,解決的是 LVS 和 RS 跨 VLAN 的問題,而跨 VLAN 問題解決後,LVS 和 RS 再也不存在 VLAN 上的從屬關係,能夠作到多個 LVS 對應多個 RS,解決水平擴容的問題。
Full-NAT 相比 NAT 的主要改進是,在 SNAT/DNAT 的基礎上,加上另外一種轉換,轉換過程以下:
在包從 LVS 轉到 RS 的過程當中,源地址從客戶端 IP 被替換成了 LVS 的內網 IP。
內網 IP 之間能夠經過多個交換機跨 VLAN 通訊。
當 RS 處理完接受到的包,返回時,會將這個包返回給 LVS 的內網 IP,這一步也不受限於 VLAN。
LVS 收到包後,在 NAT 模式修改源地址的基礎上,再把 RS 發來的包中的目標地址從 LVS 內網 IP 改成客戶端的 IP。
Full-NAT 主要的思想是把網關和其下機器的通訊,改成了普通的網絡通訊,從而解決了跨 VLAN 的問題。採用這種方式,LVS 和 RS 的部署在 VLAN 上將再也不有任何限制,大大提升了運維部署的便利性。
四、Session
客戶端與服務端的通訊,一次請求可能包含多個 TCP 包,LVS 必須保證同一鏈接的 TCP 包,必須被轉發到同一臺 RS,不然就亂套了。爲了確保這一點,LVS 內部維護着一個 Session 的 Hash 表,經過客戶端的某些信息能夠找到應該轉發到哪一臺 RS 上。
五、LVS 集羣化
採用 Full-NAT 模式後,能夠搭建 LVS 的集羣,拓撲結構以下圖:
六、容災
容災分爲 RS 的容災和 LVS 的容災。
RS 的容災能夠經過 LVS 按期健康檢測實現,若是某臺 RS 失去心跳,則認爲其已經下線,不會在轉發到該 RS 上。
LVS 的容災能夠經過主備+心跳的方式實現。主 LVS 失去心跳後,備 LVS 能夠做爲熱備當即替換。
容災主要是靠 KeepAlived 來作的。
硬件負載均衡
硬件負載均衡在國外比較流行。硬件負載均衡解決方案是直接在服務器和外部網絡間安裝負載均衡設備,這種設備咱們一般稱之爲負載均衡器,因爲專門的設備完成專門的任務,獨立於操做系統,總體性能獲得大量提升,加上多樣化的負載均衡策略,智能化的流量管理,可達到最佳的負載均衡需求。
下面就來了解一下市場中,比較主流的幾類產品。
◆F5 BIG-IP負載均衡器(LTM)
BIG-IP系列產品受到了用戶的普遍承認,使用的人也不少。它的強大之處是基於簡單的Web管理界面,包括其餘F5設備也是如此。同時,這個負載均衡器還能夠處理SSL證書。F5的主要特色之一是其廣域網優化管理器,具有高可用的加密通道,同時具備廣域網傳輸速度,優化與數據中心的傳輸道路。根據這一優點,幾乎是自動地就產生了一個簡單的基於廣域網的災難恢復解決方案。
F5 BIG-IP LTM的官方名稱叫作本地流量管理器,能夠作4-7層負載均衡,具備負載均衡、應用交換、會話交換、狀態監控、智能網絡地址轉換、通用持續性、響應錯誤處理、IPv6網關、高級路由、智能端口鏡像、SSL加速、智能HTTP壓縮、TCP優化、第7層速率整形、內容緩衝、內容轉換、鏈接加速、高速緩存、Cookie加密、選擇性內容加密、應用攻擊過濾、拒絕服務(DoS)攻擊和SYN Flood保護、防火牆-包過濾、包消毒等功能。
◆思科
思科幾乎每一個IOS路由器都具備負載均衡功能。這是很是使人激動的,由於咱們沒必要去添加額外的硬件產品,基於現有設備,只須要添加負載均衡規則就能夠了。思科是路由器領域的老大,固然負載均衡功能只是其緣由中的一個。
思科的IOS包括不少負載均衡功能,好比端口綁定,會話交換,TCP優化,NAT和服務器負載均衡器算法,等等。
思科的服務很是到位,在國外,很多技術人員都說,若是你購買了思科的產品就永遠不會被公司解僱。
◆Radware的AppDirector系列
Radware的AppDirector (AD)在服務器負載均衡應用方面能夠作到本地的服務器負載均衡(AD)和廣域的全局服務器負載均衡(AD -Global)。它的單價比較便宜,並具備高擴展性和智能化服務。同時也擁有網絡監控和檢測功能,全局負載均衡和緩解必定的DDoS攻擊等。
另外,Radware設備還有一些特色是比較容易更新和升級,可以感知應用服務,智能化是其宣傳的理念之一,也是這個產品的一大特點。
◆梭子魚負載均衡
梭子魚的負載均衡器的最大特色是包含了網絡安全功能。它具備入侵防護功能,而不是單單檢測入侵。這可以更全面地保護你的網絡,即便你錯過了一個關鍵的更新和漏洞的修補,梭子魚的更新服務也能讓你的系統自動地更新起來。
此外,梭子魚的負載均衡也是Web界面操做的,全局負載以及內容緩存也是它的顯著特色。