Linux負載平衡軟體LVS之一(概念篇)
一、 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)等。
二、 LVS體繫結構
使用LVS架設的伺服器叢集系統有三個部分組成:最前端的負載平衡層,用Load Balancer表示,中間的伺服器群組層,用Server Array表示,最底端的資料共用儲存層,用Shared Storage表示,在使用者看來,所有的內部應用都是透明的,使用者只是在使用一個虛擬伺服器提供的高效能服務。
LVS體繫結構如圖1所示:
圖1 LVS的體繫結構
下面對LVS的各個組成部分進行詳細介紹:
Load Balancer層:位於整個叢集系統的最前端,有一台或者多台負載調度器(Director Server)組成,LVS模組就安裝在Director Server上,而Director的主要作用類似於一個路由器,它含有完成LVS功能所設定的路由表,通過這些路由表把使用者的請求分發給Server Array層的應用伺服器(Real Server)上。同時,在Director Server上還要安裝對Real Server服務的監控模組Ldirectord,此模組用於監測各個Real Server服務的健康情況。在Real Server不可用時把它從LVS路由表中剔除,恢複時重新加入。
Server Array層:由一組實際運行應用服務的機器組成,Real Server可以是WEB伺服器、MAIL伺服器、FTP伺服器、DNS伺服器、視頻伺服器中的一個或者多個,每個Real Server之間通過高速的LAN或分布在各地的WAN相串連。在實際的應用中,Director Server也可以同時兼任Real Server的角色。
Shared Storage層:是為所有Real Server提供共用儲存空間和內容一致性的儲存地區,在物理上,一般有磁碟陣列裝置群組成,為了提供內容的一致性,一般可以通過NFS網路檔案系統共用資料,但是NFS在繁忙的業務系統中,效能並不是很好,此時可以採用叢集檔案系統,例如Red hat的GFS檔案系統,oracle提供的OCFS2檔案系統等。
從整個LVS結構可以看出,Director Server是整個LVS的核心,目前,用於Director Server的作業系統只能是Linux和FreeBSD,linux2.6核心不用任何設定就可以支援LVS功能,而FreeBSD作為Director Server的應用還不是很多,效能也不是很好。
對於Real Server,幾乎可以是所有的系統平台,Linux、windows、Solaris、AIX、BSD系列都能很好的支援。
三、 LVS叢集的特點
3.1 IP負載平衡與負載調度演算法
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隧道技術實現虛擬伺服器。它的串連調度和管理與VS/NAT方式一樣,只是它的報文轉寄方法不同,VS/TUN方式中,調度器採用IP隧道技術將使用者請求轉寄到某個Real Server,而這個Real Server將直接響應使用者的請求,不再經過前端調度器,此外,對Real Server的地區位置沒有要求,可以和Director Server位於同一個網段,也可以是獨立的一個網路。因此,在TUN方式中,調度器將只處理使用者的報文請求,叢集系統的輸送量大大提高。
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都有一塊網卡連在同一物理網段上。
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.2 高可用性
LVS是一個基於核心層級的應用軟體,因此具有很高的處理效能,用LVS構架的負載平衡叢集系統具有優秀的處理能力,每個服務節點的故障不會影響整個系統的正常使用,同時又實現負載的合理均衡,使應用具有超高負荷的服務能力,可支援上百萬個並發串連請求。如配置百兆網卡,採用VS/TUN或VS/DR調度技術,整個叢集系統的輸送量可高達1Gbits/s;如配置千兆網卡,則系統的最大輸送量可接近10Gbits/s。
3.3 高可靠性
LVS負載平衡叢集軟體已經在企業、學校等行業得到了很好的普及應用,國內外很多大型的、關鍵性的web網站也都採用了LVS叢集軟體,所以它的可靠性在實踐中得到了很好的證實。有很多以LVS做的負載平衡系統,運行很長時間,從未做過重新啟動。這些都說明了LVS的高穩定性和高可靠性。
3.4 適用環境
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等。
3.5 開源軟體
LVS叢集軟體是按GPL(GNU Public License)許可證發行的自由軟體,因此,使用者可以得到軟體的原始碼,並且可以根據自己的需要進行各種修改,但是修改必須是以GPL方式發行。
原創作品,允許轉載,轉載時請務必以超連結形式標明文章 原始出處 、作者資訊和本聲明。否則將追究法律責任。http://ixdba.blog.51cto.com/2895551/552947