揭開 LVS 神秘的面紗
一 前言
作為一名具備多年經驗的老運維,LVS 的名聲可謂如雷貫耳,一直都在尋找一個機會系統化地收集整理相關資料。時至今日,終于有時間詳細地學習和了解 LVS 相關的知識。
LVS 是linux virtual server的簡寫,意為:Linux虛拟伺服器,這是一個由章文嵩博士在1998年5月發起的一個自由軟體項目。Linux 2.4 以後的核心版本,已經內建了 LVS 的各個功能子產品,我們可以直接使用LVS提供的各種功能。
二 認識 LVS
LVS叢集的特點可以歸結如下:
- 功能
有實作三種IP負載均衡技術和八種連接配接排程算法的IPVS軟體。在IPVS内部實作上,采用了高效的Hash函數和垃圾回收機制,能正确處理所排程封包相關的ICMP消息(有些商品化的系統反而不能)。虛拟服務的設定數目沒有限制,每個虛拟服務有自己的伺服器集。它支援持久的虛拟服務(如HTTP Cookie和HTTPS等需要該功能的支援),并提供詳盡的統計資料,如連接配接的處理速率和封包的流量等。針對大規模拒絕服務(Deny of Service)攻擊,實作了三種防衛政策。
有基于内容請求分發的應用層交換軟體KTCPVS,它也是在Linux核心中實作。有相關的叢集管理軟體對資源進行監測,能及時将故障屏蔽,實作系統的高可用性。主、從排程器能周期性地進行狀态同步,進而實作更高的可用性。
- 适用性
後端伺服器可運作任何支援TCP/IP的作業系統,包括Linux,各種Unix(如FreeBSD、Sun Solaris、HP Unix等),Mac/OS和Windows NT/2000等。
負載排程器能夠支援絕大多數的TCP和UDP協定:
協定 | 内容 |
---|---|
TCP | HTTP,FTP,PROXY,SMTP,POP3,IMAP4,DNS,LDAP,HTTPS,SSMTP等 |
UDP | DNS,NTP,ICP,視訊、音頻流播放協定等 |
無需對客戶機和伺服器作任何修改,可适用大多數Internet服務。
- 性能
LVS伺服器叢集系統具有良好的伸縮性,可支援幾百萬個并發連接配接。配置100M網卡,采用VS/TUN或VS/DR排程技術,叢集系統的吞吐量可高達1Gbits/s;如配置千兆網卡,則系統的最大吞吐量可接近10Gbits/s。
- 可靠性
LVS伺服器叢集軟體已經在很多大型的、關鍵性的站點得到很好的應用,是以它的可靠性在真實應用得到很好的證明。有很多排程器運作一年多,未作一次重新開機動。
- 軟體許可證
LVS叢集軟體是按GPL(GNU Public License)許可證發行的自由軟體,這意味着你可以得到軟體的源代碼,有權對其進行修改,但必須保證你的修改也是以GPL方式發行。
根據 LVS 工作模式的不同,LVS 工作模式分為三種:NAT 模式、TUN 模式、DR模式。
三 了解三種模式
3.1 Virtual Server via Network Address Translation(VS/NAT)
通過網絡位址轉換,排程器重寫請求封包的目标位址,根據預設的排程算法,将請求分派給後端的真實伺服器;真實伺服器的響應封包通過排程器時,封包的源位址被重寫,再傳回給客戶,完成整個負載排程過程。架構參考下圖:
![](https://img.laitimes.com/img/__Qf2AjLwojIjJCLyojI0JCLicGcq5CVB5ULTZFTvwlclR3ch12LcV2YpZnclN1ZulGdz9GSldWYtlUeN9CX1RmbhZXay12Lc12bj5CduVGdu92YyV2c1JWdoRXan5ydhJ3Lc9CX6MHc0RHaiojIsJye.jpg)
3.2 Virtual Server via IP Tunneling(VS/TUN)
采用NAT技術時,由于請求和響應封包都必須經過排程器位址重寫,當客戶請求越來越多時,排程器的處理能力将成為瓶頸。為了解決這個問題,排程器把請求封包通過IP隧道轉發至真實伺服器,而真實伺服器将響應直接傳回給客戶,是以排程器隻處理請求封包。由于一般網絡服務應答比請求封包大許多,采用 VS/TUN技術後,叢集系統的最大吞吐量可以提高10倍。架構參考下圖:
3.3 Virtual Server via Direct Routing(VS/DR)
VS/DR通過改寫請求封包的MAC位址,将請求發送到真實伺服器,而真實伺服器将響應直接傳回給客戶。同VS/TUN技術一樣,VS/DR技術可極大地 提高叢集系統的伸縮性。這種方法沒有IP隧道的開銷,對叢集中的真實伺服器也沒有必須支援IP隧道協定的要求,但是要求排程器與真實伺服器都有一塊網卡連在同一實體網段上。架構參考下圖:
四 每種模式的優缺點
4.1 NAT 模式
優點:
- 伺服器可以運作任何支援TCP/IP的作業系統,它隻需要一個IP位址配置在排程器上,伺服器組可以用私有的IP位址。
- 采用内部 IP,服務節點隐蔽,安全性較好。
- 原理、配置簡單,容易了解。
缺點:
- 伸縮能力有限, 當伺服器結點數目升到20時,排程器本身有可能成為系統的新瓶頸,因為在NAT中請求和響應封包都需要通過負載排程器。
4.2 TUN 模式
- 可以排程百台以上的伺服器(同等規模的伺服器),而它不會成為系統的瓶頸。可以用來建構高性能的超級伺服器。
- TUN技術對伺服器有要求,即所有的伺服器必須支援“IP Tunneling”或者“IP Encapsulation”協定。
- 節點暴露,安全性不如 NAT 模式。
4.3 DR 模式
- 跟 TUN 模式相比,這種方法沒有IP隧道的開銷。
- 要求負載排程器與實際伺服器都有一塊網卡連在同一實體網段上,伺服器網絡裝置(或者裝置别名)不作ARP響應,或者能将封包重定向(Redirect)到本地的Socket端口上。
整合一下,得到下表:
模式 | 優點 | 缺點 |
---|---|---|
NAT |
|
|
TUN | | |
DR | | |
五 八種負載排程算法
針對不同的網絡服務需求和伺服器配置,IPVS排程器實作了如下八種負載排程算法:
- 輪詢(Round Robin)
排程器通過"輪詢"排程算法将外部請求按順序輪流配置設定到叢集中的真實伺服器上,它均等地對待每一台伺服器,而不管伺服器上實際的連接配接數和系統負載。
- 權重輪詢(Weighted Round Robin)
排程器通過"權重輪詢"排程算法根據真實伺服器的不同處理能力來排程通路請求。這樣可以保證處理能力強的伺服器處理更多的通路流量。排程器可以自動問詢真實伺服器的負載情況,并動态地調整其權值。
- 最少連結(Least Connections)
排程器通過"最少連接配接"排程算法動态地将網絡請求排程到已建立的連結數最少的伺服器上。如果叢集系統的真實伺服器具有相近的系統性能,采用"最小連接配接"排程算法可以較好地均衡負載。
- 權重最少連結(Weighted Least Connections)
在叢集系統中的伺服器性能差異較大的情況下,排程器采用"權重最少連結"排程算法優化負載均衡性能,具有較高權值的伺服器将承受較大比例的活動連接配接負載。排程器可以自動問詢真實伺服器的負載情況,并動态地調整其權值。
- 基于局部性的最少連結(Locality-Based Least Connections)
"基于局部性的最少連結" 排程算法是針對目标IP位址的負載均衡,目前主要用于 Cache 叢集系統。該算法根據請求的目标IP位址找出該目标IP位址最近使用的伺服器,若該伺服器是可用的且沒有超載,将請求發送到該伺服器;若伺服器不存在,或者該伺服器超載且有伺服器處于一半的工作負載,則用"最少連結"的原則選出一個可用的伺服器,将請求發送到該伺服器。
- 帶複制的基于局部性最少連結(Locality-Based Least Connections with Replication)
"帶複制的基于局部性最少連結"排程算法也是針對目标IP位址的負載均衡,目前主要用于 Cache 叢集系統。它與 LBLC 算法的不同之處是它要維護從一個 目标 IP 位址到一組伺服器的映射,而 LBLC 算法維護從一個目标 IP 位址到一台伺服器的映射。該算法根據請求的目标 IP 位址找出該目标 IP 位址對應的伺服器組,按"最小連接配接"原則從伺服器組中選出一台伺服器,若伺服器沒有超載,将請求發送到該伺服器,若伺服器超載;則按"最小連接配接"原則從這個叢集中選出一台伺服器,将該伺服器加入到伺服器組中,将請求發送到該伺服器。同時,當該伺服器組有一段時間沒有被修改,将最忙的伺服器從伺服器組中删除,以降低複制的程度。
- 目标位址散列(Destination Hashing)
"目标位址散列"排程算法根據請求的目标IP位址,作為散列鍵(Hash Key)從靜态配置設定的散清單找出對應的伺服器,若該伺服器是可用的且未超載,将請求發送到該伺服器,否則傳回空。
- 源位址散列(Source Hashing)
"源位址散列"排程算法根據請求的源 IP 位址,作為散列鍵(Hash Key)從靜态配置設定的散清單找出對應的伺服器,若該伺服器是可用的且未超載,将請求發送到該伺服器,否則傳回空。
六 總結
本文大量引用了章博士原文,并在此基礎之上作了一些延申與總結,旨在學習、交流,也為将來自己查閱資料時節約時間。由于時間倉促,難免疏漏,望諸位多多指教。
七 參考資料
7.1
Linux伺服器叢集系統(一)7.2
Linux伺服器叢集系統(二)7.3
Linux伺服器叢集系統(三)7.4
Linux伺服器叢集系統(四)