1、 LVS簡介
LVS是Linux Virtual Server的簡稱,也就是Linux虛擬服務器, 是一個由章文嵩博士發起的自由軟件項目,它的官方站點是www.linuxvirtualserver.org(版本好久不更新了)。
如今LVS已是 Linux標準內核的一部分,在Linux2.4內核之前,使用LVS時必需要從新編譯內核以支持LVS功能模塊,可是從Linux2.4內核之後,已經徹底內置了LVS的各個功能模塊,無需給內核打任何補丁,能夠直接使用LVS提供的各類功能。
使用LVS技術要達到的目標是:經過LVS提供的負載均衡技術和Linux操做系統實現一個高性能、高可用的服務器羣集,它具備良好可靠性、可擴展性和可操做性。從而以低廉的成本實現最優的服務性能。
LVS自從1998年開始,發展到如今已是一個比較成熟的技術項目了。能夠利用LVS技術實現高可伸縮的、高可用的網絡服務,例如WWW服務、Cache服務、DNS服務、FTP服務、MAIL服務、視頻/音頻點播服務等等,有許多比較著名網站和組織都在使用LVS架設的集羣系統。
例如:Linux的門戶網站(www.linux.com)、向RealPlayer提供音頻視頻服務而聞名的Real公司(www.real.com)、全球最大的開源網站(sourceforge.net)等。前端
2、 LVS體系結構
使用LVS架設的服務器集羣系統有三個部分組成:
最前端的負載均衡層,用Load Balancer表示
中間的服務器羣組層,用Server Array表示
最底端的數據共享存儲層,用Shared Storage表示
在用戶看來,全部的內部應用都是透明的,用戶只是在使用一個虛擬服務器提供的高性能服務。linux
LVS的體系結構git
Load Balancer層:
位於整個集羣系統的最前端,有一臺或者多臺負載調度器(Director Server)組成,LVS模塊就安裝在Director Server上,而Director的主要做用相似於一個路由器,它含有完成LVS功能所設定的路由表,經過這些路由表把用戶的請求分發給Server Array層的應用服務器(Real Server)上。
同時,在Director Server上還要安裝對Real Server服務的監控模塊Ldirectord,此模塊用於監測各個Real Server服務的健康情況。在Real Server不可用時把它從LVS路由表中剔除,恢復時從新加入
從整個LVS結構能夠看出,Director Server是整個LVS的核心,目前,用於Director Server的操做系統只能是Linux和FreeBSD,linux2.6內核不用任何設置就能夠支持LVS功能,而FreeBSD做爲Director Server的應用還不是不少,性能也不是很好。
github
調度器是服務器集羣系統的惟一入口點(Single Entry Point),它能夠採用IP負載均衡技術、基於內容請求分發技術或者二者相結合。在IP負載均衡技術中,須要服務器池擁有相同的內容提供相同的服務。當 客戶請求到達時,調度器只根據服務器負載狀況和設定的調度算法從服務器池中選出一個服務器,將該請求轉發到選出的服務器,並記錄這個調度;當這個請求的其 他報文到達,也會被轉發到前面選出的服務器。在基於內容請求分發技術中,服務器能夠提供不一樣的服務,當客戶請求到達時,調度器可根據請求的內容選擇服務器 執行請求。由於全部的操做都是在Linux操做系統核心空間中將完成的,它的調度開銷很小,因此它具備很高的吞吐率。web
Server Array層:
由一組實際運行應用服務的機器組成,Real Server能夠是WEB服務器、MAIL服務器、FTP服務器、DNS服務器、視頻服務器中的一個或者多個,每一個Real Server之間經過高速的LAN或分佈在各地的WAN相鏈接。在實際的應用中,Director Server也能夠同時兼任Real Server的角色。
對於Real Server,幾乎能夠是全部的系統平臺,Linux、windows、Solaris、AIX、BSD系列都能很好的支持。
服務器池的結點數目是可變的。當整個系統收到的負載超過目前全部結點的處理能力時,能夠在服務器池中增長服務器來知足不斷增加的請求負載。對大多數 網絡服務來講,請求間不存在很強的相關性,請求能夠在不一樣的結點上並行執行,因此整個系統的性能基本上能夠隨着服務器池的結點數目增長而線性增加。算法
Shared Storage層:
是爲全部Real Server提供共享存儲空間和內容一致性的存儲區域,在物理上,通常有磁盤陣列設備組成,爲了提供內容的一致性,通常能夠經過NFS網絡文件系統共享數據,可是NFS在繁忙的業務系統中,性能並非很好,此時能夠採用集羣文件系統,例如Red hat的GFS文件系統,oracle提供的OCFS2文件系統等。
共享存儲一般是數據庫、網絡文件系統或者分佈式文件系統。服務器結點須要動態更新的數據通常存儲在數據庫系統中,同時數據庫會保證併發 訪問時數據的一致性。
靜態的數據能夠存儲在網絡文件系統(如NFS/CIFS)中,但網絡文件系統的伸縮能力有限,通常來講,NFS/CIFS服務器只能 支持3~6個繁忙的服務器結點。
對於規模較大的集羣系統,能夠考慮用分佈式文件系統,如AFS[1]、GFS[2.3]、Coda[4]和 Intermezzo[5]等。分佈式文件系統可爲各服務器提供共享的存儲區,它們訪問分佈式文件系統就像訪問本地文件系統同樣,同時分佈式文件系統可提 供良好的伸縮性和可用性。
此外,當不一樣服務器上的應用程序同時讀寫訪問分佈式文件系統上同一資源時,應用程序的訪問衝突須要消解才能使得資源處於一致狀 態。這須要一個分佈式鎖管理器(Distributed Lock Manager),它多是分佈式文件系統內部提供的,也多是外部的。開發者在寫應用程序時,可使用分佈式鎖管理器來保證應用程序在不一樣結點上併發訪 問的一致性。數據庫
負載調度器、服務器池和共享存儲系統經過高速網絡相鏈接,如100Mbps交換網絡、Myrinet和Gigabit網絡等。使用高速的網絡,主要爲避免當系統規模擴大時互聯網絡成爲整個系統的瓶頸。windows
Graphic Monitor是爲系統管理員提供整個集羣系統的監視器,它能夠監視系統的狀態。Graphic Monitor是基於瀏覽器的,因此不管管理員在本地仍是異地均可以監測系統的情況。爲了安全的緣由,瀏覽器要經過HTTPS(Secure HTTP)協議和身份認證後,才能進行系統監測,並進行系統的配置和管理。後端
3、 LVS集羣負載技術跨域
3種IP負載均衡技術 8種鏈接調度算法
1.IP負載均衡技術
負載均衡技術有不少實現方案,有基於DNS域名輪流解析的方法、有基於客戶端調度訪問的方法、有基於應用層系統負載的調度方法,還有基於IP地址的調度方法,在這些負載調度算法中,執行效率最高的是IP負載均衡技術。
LVS的IP負載均衡技術是經過IPVS模塊來實現的,IPVS是LVS集羣系統的核心軟件,它的主要做用是:安裝在Director Server上,同時在Director Server上虛擬出一個IP地址,用戶必須經過這個虛擬的IP地址訪問服務。這個虛擬IP通常稱爲LVS的VIP,即Virtual IP。訪問的請求首先通過VIP到達負載調度器,而後由負載調度器從Real Server列表中選取一個服務節點響應用戶的請求。
當用戶的請求到達負載調度器後,調度器如何將請求發送到提供服務的Real Server節點,而Real Server節點如何返回數據給用戶,是IPVS實現的重點技術,IPVS實現負載均衡機制有三種,分別是NAT、TUN和DR,詳述以下:
VS/NAT: 即(Virtual Server via Network Address Translation)
也就是網絡地址翻譯技術實現虛擬服務器,當用戶請求到達調度器時,調度器將請求報文的目標地址(即虛擬IP地址)改寫成選定的Real Server地址,同時報文的目標端口也改爲選定的Real Server的相應端口,最後將報文請求發送到選定的Real Server。在服務器端獲得數據後,Real Server返回數據給用戶時,須要再次通過負載調度器將報文的源地址和源端口改爲虛擬IP地址和相應端口,而後把數據發送給用戶,完成整個負載調度過程。
能夠看出,在NAT方式下,用戶請求和響應報文都必須通過Director Server地址重寫,當用戶請求愈來愈多時,調度器的處理能力將稱爲瓶頸。
VS/TUN :即(Virtual Server via IP Tunneling)
也就是IP隧道技術實現虛擬服務器。IP隧道(IP tunneling)是將一個IP報文封裝在另外一個IP報文的技術,這可使得目標爲一個IP地址的數據報文能被封裝和轉發到另外一個IP地址。IP隧道技 術亦稱爲IP封裝技術
它的鏈接調度和管理與VS/NAT方式同樣,只是它的報文轉發方法不一樣,VS/TUN方式中,調度器採用IP隧道技術將用戶請求轉發到某個Real Server,而這個Real Server將直接響應用戶的請求,再也不通過前端調度器.
此外,對Real Server的地域位置沒有要求,能夠和Director Server位於同一個網段,也能夠是獨立的一個網絡。所以,在TUN方式中,調度器將只處理用戶的報文請求,集羣系統的吞吐量大大提升。
真實服務器將響應直接返回給客戶,因此調度器只處理請求報文。因爲通常網絡服務應答比請求報文大許多,採用 VS/TUN技術後,集羣系統的最大吞吐量能夠提升10倍。
VS/DR: 即(Virtual Server via Direct Routing)
也就是用直接路由技術實現虛擬服務器。它的鏈接調度和管理與VS/NAT和VS/TUN中的同樣,但它的報文轉發方法又有不一樣,VS/DR經過改寫請求報文的MAC地址,將請求發送到Real Server,而Real Server將響應直接返回給客戶,免去了VS/TUN中的IP隧道開銷。
這種方式是三種負載調度機制中性能最高最好的,可是必需要求Director Server與Real Server都有一塊網卡連在同一物理網段上。
工做模式 |
VS/NAT |
VS/TUN |
VS/DR |
Real server (節點服務器) |
Config dr gw |
Tunneling |
Non-arp device/tie vip |
Server Network |
Private |
LAN/WAN |
LAN |
Server number (節點數量) |
Low 10-20 |
High 100 |
High 100 |
Real server gateway |
Load balance |
Own router |
Own router |
優勢 |
地址和端口轉換 |
Wan環境加密數據 |
性能最高 |
缺點 |
效率低 |
須要隧道支持 |
不能跨域LAN |
2.負載調度算法
上面咱們談到,負載調度器是根據各個服務器的負載狀況,動態地選擇一臺Real Server響應用戶請求,那麼動態選擇是如何實現呢,其實也就是咱們這裏要說的負載調度算法,根據不一樣的網絡服務需求和服務器配置,IPVS實現了以下八種負載調度算法,這裏咱們詳細講述最經常使用的四種調度算法,剩餘的四種調度算法請參考其它資料。
輪叫調度(Round Robin)
「輪叫」調度也叫1:1調度,調度器經過「輪叫」調度算法將外部用戶請求按順序1:1的分配到集羣中的每一個Real Server上,這種算法平等地對待每一臺Real Server,而無論服務器上實際的負載情況和鏈接狀態。
加權輪叫調度(Weighted Round Robin)
「加權輪叫」調度算法是根據Real Server的不一樣處理能力來調度訪問請求。能夠對每臺Real Server設置不一樣的調度權值,對於性能相對較好的Real Server能夠設置較高的權值,而對於處理能力較弱的Real Server,能夠設置較低的權值,這樣保證了處理能力強的服務器處理更多的訪問流量。充分合理的利用了服務器資源。同時,調度器還能夠自動查詢Real Server的負載狀況,並動態地調整其權值。
最少連接調度(Least Connections)
「最少鏈接」調度算法動態地將網絡請求調度到已創建的連接數最少的服務器上。若是集羣系統的真實服務器具備相近的系統性能,採用「最小鏈接」調度算法能夠較好地均衡負載。
加權最少連接調度(Weighted Least Connections)
「加權最少連接調度
」是「最少鏈接調度」的超集,每一個服務節點能夠用相應的權值表示其處理能力,而系統管理員能夠動態的設置相應的權值,缺省權值爲1,加權最小鏈接調度在分配新鏈接請求時儘量使服務節點的已創建鏈接數和其權值成正比。
其它四種調度算法分別爲:
基於局部性的最少連接(Locality-Based Least Connections)、
帶複製的基於局部性最少連接(Locality-Based Least Connections with Replication)、
目標地址散列(Destination Hashing)
源地址散列(Source Hashing),
對於這四種調度算法的含義,本文再也不講述,若是想深刻了解這其他四種調度策略的話,能夠登錄LVS中文站點zh.linuxvirtualserver.org,查閱更詳細的信息。
3.高可用性
LVS是一個基於內核級別的應用軟件,所以具備很高的處理性能,用LVS構架的負載均衡集羣系統具備優秀的處理能力,每一個服務節點的故障不會影響整個系統的正常使用,同時又實現負載的合理均衡,使應用具備超高負荷的服務能力,可支持上百萬個併發鏈接請求。
如配置百兆網卡,採用VS/TUN或VS/DR調度技術,整個集羣系統的吞吐量可高達1Gbits/s;如配置千兆網卡,則系統的最大吞吐量可接近10Gbits/s。
4. 高可靠性
LVS負載均衡集羣軟件已經在企業、學校等行業獲得了很好的普及應用,國內外不少大型的、關鍵性的web站點也都採用了LVS集羣軟件,因此它的可靠性在實踐中獲得了很好的證明。有不少以LVS作的負載均衡系統,運行很長時間,從未作太重新啓動。這些都說明了LVS的高穩定性和高可靠性。
5.適用環境
LVS對前端Director Server目前僅支持Linux和FreeBSD系統,可是支持大多數的TCP和UDP協議,支持TCP協議的應用有:HTTP,HTTPS ,FTP,SMTP,,POP3,IMAP4,PROXY,LDAP,SSMTP等等。支持UDP協議的應用有:DNS,NTP,ICP,視頻、音頻流播放協議等。
LVS對Real Server的操做系統沒有任何限制,Real Server可運行在任何支持TCP/IP的操做系統上,包括Linux,各類Unix(如FreeBSD、Sun Solaris、HP Unix等),Mac/OS和Windows等。
6. 開源軟件
LVS集羣軟件是按GPL(GNU Public License)許可證發行的自由軟件,所以,使用者能夠獲得軟件的源代碼,而且能夠根據本身的須要進行各類修改,可是修改必須是以GPL方式發行。
7.補充:keepaliver
Keepalived 起初是 LVS 設計的,專門用來監控集羣系統中各個服務節點的狀態,後來又加入了 VRRP( 虛擬路由冗餘協議 )解決靜態路由出現的單點故障問題,
經過 VRRP 協議能夠實現網絡不間斷穩定運行。
所以,Keepalived 不只具備服務器狀態檢測和故障隔離功能,還具備 HA Cluster 功能。
Keepalived 做爲 LVS 的擴展項目,所以。Keepalived 能夠與 LVS 無縫整合,輕鬆構建一套高性能的負載均衡集羣系統。
四:擴展
阿里巴巴對LVS進行了優化並開源 ali-LVS開源地址https://github.com/alibaba/LVS;
整個SLB系統由3部分構成:四層負載均衡,七層負載均衡 和 控制系統,以下圖所示;
LVS是全球最流行的四層負載均衡開源軟件,由章文嵩博士(當前阿里雲產品技術負責人)在1998年5月創立,能夠實現LINUX平臺下的負載均衡。
LVS是 基於linux netfilter框架實現(同iptables)的一個內核模塊,名稱爲ipvs;其鉤子函數分別HOOK在LOCAL_IN和FORWARD兩個HOOK點,以下圖所示;
在雲計算大規模網絡環境下,官方LVS存在以下問題;
爲了解決上述問題,咱們在官方LVS基礎上進行了定製化;
FULLNAT實現主要思想:引入local address(內網ip地址),cip-vip轉換爲lip->rip,而 lip和rip均爲IDC內網ip,能夠跨vlan通信;
IN/OUT的數據流所有通過LVS,爲了保證帶寬,採用萬兆(10G)網卡;
FULLNAT轉發模式,當前僅支持TCP協議;
LVS針對TCP標誌位DDOS攻擊,採起以下策略;
LVS集羣部署方式實現的主要思想:LVS和上聯交換機間運行OSPF協議,上聯交換機經過ECMP等價路由,將數據流分發給LVS集羣,LVS集羣再轉發給業務服務器;
健壯性:lvs和交換機間運行ospf心跳,1個vip配置在集羣的全部LVS上,當一臺LVS down,交換機會自動發現並將其從ECMP等價路由中剔除;
可擴展:若是當前LVS集羣沒法支撐某個vip的流量,LVS集羣能夠進行水平擴容;
集羣部署方式極大的保證了異常狀況下,負載均衡服務的穩定性;
對LVS管理軟件keepalived進行了全面優化;
綜上所述,四層負載均衡產品有以下特色;