- LVS簡介
- Linux Virtual Server項目
- 網絡分層
- IP虛擬服務器軟件
- IP調度算法
- 內核Layer-7交換機KTCPVS
- LVS集羣特點
- LVS與Nginx對比
LVS的英文全稱是Linux Virtual Server,即Linux虛擬服務器。它是我們國家章文嵩博士的一個開源項目,在Linux內核2.6中,它已經成爲內核的一部分,在此之前的內核版本則需要重新編譯內核。
LVS主要用於多服務器的負載均衡。它工作在網絡4層,可以實現高性能,高可用的服務器集羣技術。它廉價,可把許多低性能的服務器組合在一起形成一個超級服務器。它易用,配置非常簡單,且有多種負載均衡方法。它穩定可靠,即使在集羣的服務器中某臺服務器無法正常工作,也不影響整體效果。另外可擴展性非常好。
Linux Virtual Server項目
針對高可伸縮、高可用網絡服務的需求,給出了基於IP層和基於內容請求分發的負載均衡調度解決方法,並在Linux內核中實現了這些方法,將一組服務器構成一個實現可伸縮的、高可用網絡服務的虛擬服務器。
一組服務器通過高速的局域網或者地理分佈的廣域網相互連接,在它們的前端有一個負載調度器(Load Balancer)。負載調度器能無縫地將網絡請求調度到真實服務器上,從而使得服務器集羣的結構對客戶是透明的,客戶訪問集羣系統提供的網絡服務就像訪問一臺高性能、高可用的服務器一樣。由於LVS的負載調度技術是在Linux內核中實現的,稱之爲Linux虛擬服務器(Linux Virtual Server)。
LVS項目的目標:使用集羣技術和Linux操作系統實現一個高性能、高可用的服務器,它具有很好的可伸縮性(Scalability)、可靠性(Reliability)、和可管理性(Manageability)。
目前,LVS項目提供了一個實現可伸縮網絡服務的LinuxVirtualServer框架
- E-Commerce
- General Network Services
- Cluster Management:集羣管理軟件
- KTCPVS:基於內容請求分發的內核Layer-7交換機
- IPVS:提供了含有三種IP負載均衡技術的IP虛擬服務器軟件
可以利用LVS框架實現高可伸縮的、高可用的Web、Cache、Mail和Media等網絡服務;在此基礎上,可以開發支持龐大用戶數的、高可伸縮的、高可用的電子商務應用。
Nginx工作在OSI7層模型下,LVS工作在下四層
IP虛擬服務器軟件IPVS
在調度器的實現技術中,IP負載技術是效率最高的。IPVS軟件實現了三種IP負載均衡技術。它們的大致原理如下:
Virtual Server via Direct Routing (VS/DR)
VS/DR通過改寫請求報文的MAC地址,將請求發送到真實服務器,而真實服務器將響應直接返回給客戶。同VS/TUN技術一樣,VS/DR技術可極大地提高集羣系統的伸縮性。這種方法沒有IP隧道的開銷,對集羣中的真實服務器也沒有必須支持IP隧道協議的要求,但是要求調度器與真實服務器都有一塊網卡連在同一物理網段上。
Virtual Server via Network Address Translation (VS/NAT)
通過網絡地址轉換,調度器重寫請求報文的目標地址,根據預設的調度算法,將請求分派給後端的真實服務器;真實服務器的響應報文通過調度器時,報文的源地址被重寫,再返回給客戶,完成整個負載調度過程。
Virtual Server via IP Tunneling (VS/TUN)
採用NAT技術時,由於請求和響應報文都必須經過調度器地址重寫,當客戶請求越來越多時,調度器的處理能力將成爲瓶頸。爲了解這個問題,調度器把請求報文通過IP隧道轉發至真實的服務器,而真實服務器將響應直接返回給客戶,所以調度器只處理請求報文。由於一般網絡服務應答比請求報文大許多,採用VS/TUN技術後,集羣系統的最大吞吐量可以提高10倍。
IPVS 8種調度算法
- 輪叫 Round Robin
- 加權輪叫 Weighted Round Robin
- 最少鏈接 Least Connections
- 加權最少鏈接 Weighted Least Connections
- 基於局部性的最少鏈接 Locality-Based Least Connections
- 帶複製的基於局部性的最少鏈接 Locality-Based Least Connections with Replication
- 目標地址散列 Destination Hashing
- 源地址散列 Source Hashing
內核Layer-7交換機KTCPVS
在基於IP負載調度技術中,當一個TCP連接的初始SYN報文到達時,調度器就選擇一臺服務器,將報文轉發給它。此後通過查發報文的IP和TCP頭地址,保證此連接的後繼報文被轉發到該服務器。這樣,IPVS無法檢查到請求的內容再選擇服務器,這就要求後端服務器組提供相同的服務,不管請求被髮送到哪一臺服務器,返回結果都是一樣的,但是,在有些應用中後端服務器功能不一,有的提供HTML文檔,有的提供圖片,有的提供CGI,這就需要基於內容的調度(Content-Based Scheduling)
LVS集羣特點
- 有三種IP負載均衡和八種連接調度算法的IPVS軟件
- 在IPVS內部實現上,採用了高效的Hash函數和垃圾回收機制,能正確處理所調度報文相關的ICMP消息
- 虛擬服務的設置數目沒有限制,每個虛擬服務有自已的服務器集。
- 它支持持久虛擬服務(如HTTP Cookie和HTTPS等需要該功能的支持),並提供詳盡的統計數據,如連接的處理速率和報文的流量等。
- 針對大規模拒絕服務(Deny of Service)攻擊,實現了三種防衛策略。
- 有基於內容請求分發的應用層交換軟件KTCPVS,它也是在Linux內核中實現。
- 有相關的集羣管理軟件對資源進行監測,能及時將故障屏蔽,實現系統的高可用性。
- 主、從調度器能週期性地進行狀態同步,從而實現更高的可用性。
LVS與Nginx對比
負載均衡 | 4層負載均衡 | 7層負載均衡 |
---|---|---|
技術原理 | IP+TCP端口 | URL應用層(內容交換) |
典型代表 | LVS | Ngin、Haproxy、MySQL Proxy |
優點和缺點 | 不理解mysql、ftp、http等應用協議,滿足不了特定需求,如動靜分離,緩存自定義等,但是配置簡單,效率也很高 | 對負載均衡設備要求很高,處理七層能力一般低於四層模式的部署方式,但比較智能化,比如動態分離,根據不同請求定義圖片,緩存,可以對客戶端請求和服務器的相應進行自定義修改,極大提升了應用系統在網絡層的靈活性 |
安全性 | SYNFlood攻擊,有的軟四層應用則會轉發到後端服務器,有的則可以防止攻擊,這個和設備(軟硬)有一定關係。 | 一般可以在七層進行攔截,不影響後臺服務器正常運營,可以設置多種策略,過濾特定報文。 |
應用 | 對應TCP應用 比如c/s開發的ERP | 應用廣發HTTP協議,應用主要是網站或內部信息平臺等B/S開發的系統 |
案例 | 接受客戶的syn請求,通過上述方式選擇後端指定服務器,並對報文中目標IP地址進行修改,改爲後端服務器IP,TCP連接是直接建立,而負載均衡類似路由器作用 | 如果要根據真正的應用層內容在選擇服務器,則先代理最終服務器和客戶端建立連接(三次握手)後,纔可能接受到客戶端發送的真正應用層內容報文,然後根據該報文中特定字段,加上負載均衡設備的服務器選擇方式,決定最終選擇的內部服務器。此時充當了代理服務器 |