天天看點

LVS DR模式 + keepalived 負載均衡配置詳解(基礎篇)

1 IP虛拟伺服器軟體IPVS

      在排程器的實作技術中,IP負載均衡技術是效率最高的。在已有的IP負載均衡技術中有通過網絡位址轉換(Network Address Translation)将一組伺服器構成一個高性能的、高可用的虛拟伺服器,我們稱之為VS/NAT技術(Virtual Server via Network Address Translation),大多數商品化的IP負載均衡排程器産品都是使用此方法,如Cisco的LocalDirector、F5的Big/IP和 Alteon的ACEDirector。在分析VS/NAT的缺點和網絡服務的非對稱性的基礎上,我們提出通過IP隧道實作虛拟伺服器的方法VS/TUN (Virtual Server via IP Tunneling),和通過直接路由實作虛拟伺服器的方法VS/DR(Virtual Server via Direct Routing),它們可以極大地提高系統的伸縮性。是以,IPVS軟體實作了這三種IP負載均衡技術,它們的大緻原理如下:

      1.    Virtual Server via Network Address Translation(VS/NAT)

通過網絡位址轉換,排程器重寫請求封包的目标位址,根據預設的排程算法,将請求分派給後端的真實伺服器;真實伺服器的響應封包通過排程器時,封包的源位址被重寫,再傳回給客戶,完成整個負載排程過程。

      2.    Virtual Server via IP Tunneling(VS/TUN)

采用NAT技術時,由于請求和響應封包都必須經過排程器位址重寫,當客戶請求越來越多時,排程器的處理能力将成為瓶頸。為了解決這個問題,排程器把請求封包通過IP隧道轉發至真實伺服器,而真實伺服器将響應直接傳回給客戶,是以排程器隻處理請求封包。由于一般網絡服務應答比請求封包大許多,采用 VS/TUN技術後,叢集系統的最大吞吐量可以提高10倍。

      3.    Virtual Server via Direct Routing(VS/DR)

VS/DR通過改寫請求封包的MAC位址,将請求發送到真實伺服器,而真實伺服器将響應直接傳回給客戶。同VS/TUN技術一樣,VS/DR技術可極大地提高叢集系統的伸縮性。這種方法沒有IP隧道的開銷,對叢集中的真實伺服器也沒有必須支援IP隧道協定的要求,但是要求排程器與真實伺服器都有一塊網卡連在同一實體網段上。

2、針對不同的網絡服務需求和伺服器配置,IPVS排程器實作了如下八種負載排程算法:

     1.    輪叫(Round Robin)

排程器通過"輪叫"排程算法将外部請求按順序輪流配置設定到叢集中的真實伺服器上,它均等地對待每一台伺服器,而不管伺服器上實際的連接配接數和系統負載。

      2.    權重輪叫(Weighted Round Robin)

排程器通過"權重輪叫"排程算法根據真實伺服器的不同處理能力來排程通路請求。這樣可以保證處理能力強的伺服器處理更多的通路流量。排程器可以自動問詢真實伺服器的負載情況,并動态地調整其權值。

     3. 最少連結(Least Connections)

排程器通過"最少連接配接"排程算法動态地将網絡請求排程到已建立的連結數最少的伺服器上。如果叢集系統的真實伺服器具有相近的系統性能,采用"最小連接配接"排程算法可以較好地均衡負載。

      4. 權重最少連結(Weighted Least Connections)

在叢集系統中的伺服器性能差異較大的情況下,排程器采用"權重最少連結"排程算法優化負載均衡性能,具有較高權值的伺服器将承受較大比例的活動連接配接負載。排程器可以自動問詢真實伺服器的負載情況,并動态地調整其權值。

      5.    基于局部性的最少連結(Locality-Based Least Connections)

"基于局部性的最少連結" 排程算法是針對目标IP位址的負載均衡,目前主要用于Cache叢集系統。該算法根據請求的目标IP位址找出該目标IP位址最近使用的伺服器,若該伺服器是可用的且沒有超載,将請求發送到該伺服器;若伺服器不存在,或者該伺服器超載且有伺服器處于一半的工作負載,則用"最少連結"的原則選出一個可用的伺服器,将請求發送到該伺服器。

      6.    帶複制的基于局部性最少連結(Locality-Based Least Connections with Replication)

"帶複制的基于局部性最少連結"排程算法也是針對目标IP位址的負載均衡,目前主要用于Cache叢集系統。它與LBLC算法的不同之處是它要維護從一個目标IP位址到一組伺服器的映射,而LBLC算法維護從一個目标IP位址到一台伺服器的映射。該算法根據請求的目标IP位址找出該目标IP位址對應的伺服器組,按"最小連接配接"原則從伺服器組中選出一台伺服器,若伺服器沒有超載,将請求發送到該伺服器,若伺服器超載;則按"最小連接配接"原則從這個叢集中選出一台伺服器,将該伺服器加入到伺服器組中,将請求發送到該伺服器。同時,當該伺服器組有一段時間沒有被修改,将最忙的伺服器從伺服器組中删除,以降低複制的程度。

      7.    目标位址散列(Destination Hashing)

"目标位址散列"排程算法根據請求的目标IP位址,作為散列鍵(Hash Key)從靜态配置設定的散清單找出對應的伺服器,若該伺服器是可用的且未超載,将請求發送到該伺服器,否則傳回空。

      8.    源位址散列(Source Hashing)

"源位址散列"排程算法根據請求的源IP位址,作為散列鍵(Hash Key)從靜态配置設定的散清單找出對應的伺服器,若該伺服器是可用的且未超載,将請求發送到該伺服器,否則傳回空。

     3 核心Layer-7交換機KTCPVS

在基于IP負載排程技術中,當一個TCP連接配接的初始SYN封包到達時,排程器就選擇一台伺服器,将封包轉發給它。此後通過查發封包的IP和TCP封包頭位址,保證此連接配接的後繼封包被轉發到該伺服器。這樣,IPVS無法檢查到請求的内容再選擇伺服器,這就要求後端伺服器組提供相同的服務,不管請求被發送到哪一台伺服器,傳回結果都是一樣的。但是,在有些應用中後端伺服器功能不一,有的提供HTML文檔,有的提供圖檔,有的提供CGI,這就需要基于内容的排程 (Content-Based Scheduling)。

由于使用者空間TCP Gateway的開銷太大,我們提出在作業系統的核心中實作Layer-7交換方法,來避免使用者空間與核心空間的切換和記憶體複制的開銷。在Linux作業系統的核心中,我們實作了Layer-7交換,稱之為KTCPVS(Kernel TCP Virtual Server)。目前,KTCPVS已經能對HTTP請求進行基于内容的排程,但它還不很成熟,在其排程算法和各種協定的功能支援等方面,有大量的工作需要做。

雖然應用層交換處理複雜,它的伸縮性有限,但應用層交換帶來以下好處:

      •    相同頁面的請求被發送到同一伺服器,可以提高單台伺服器的Cache命中率。

      •    一些研究[5]表明WEB通路流中存在局部性。Layer-7交換可以充分利用通路的局部性,将相同類型的請求發送到同一台伺服器,使得每台伺服器收到的請求具有更好的相似性,可進一步提高單台伺服器的Cache命中率。

      •    後端伺服器可運作不同類型的服務,如文檔服務,圖檔服務,CGI服務和資料庫服務等。

     4. LVS叢集的特點

LVS叢集的特點可以歸結如下:

      1.    功能

有實作三種IP負載均衡技術和八種連接配接排程算法的IPVS軟體。在IPVS内部實作上,采用了高效的Hash函數和垃圾回收機制,能正确處理所排程封包相關的ICMP消息(有些商品化的系統反而不能)。虛拟服務的設定數目沒有限制,每個虛拟服務有自己的伺服器集。它支援持久的虛拟服務(如HTTP Cookie和HTTPS等需要該功能的支援),并提供詳盡的統計資料,如連接配接的處理速率和封包的流量等。針對大規模拒絕服務(Deny of Service)攻擊,實作了三種防衛政策。

有基于内容請求分發的應用層交換軟體KTCPVS,它也是在Linux核心中實作。有相關的叢集管理軟體對資源進行監測,能及時将故障屏蔽,實作系統的高可用性。主、從排程器能周期性地進行狀态同步,進而實作更高的可用性。

      2.    适用性

後端伺服器可運作任何支援TCP/IP的作業系統,包括Linux,各種Unix(如FreeBSD、Sun Solaris、HP Unix等),Mac/OS和Windows NT/2000等。

負載排程器能夠支援絕大多數的TCP和UDP協定:

協定

内容

TCP

HTTP,FTP,PROXY,SMTP,POPS,IMAP4,LDAM,DNS,HTTPS,SSMTP等

UDP

NTP,ICP,視訊,音頻流播放協定等

   3.無需對客戶機和伺服器作任何修改,可适用大多數Internet服務。

   4.    性能

LVS伺服器叢集系統具有良好的伸縮性,可支援幾百萬個并發連接配接。配置100M網卡,采用VS/TUN或VS/DR排程技術,叢集系統的吞吐量可高達1Gbits/s;如配置千兆網卡,則系統的最大吞吐量可接近10Gbits/s。

   5.    可靠性

LVS伺服器叢集軟體已經在很多大型的、關鍵性的站點得到很好的應用,是以它的可靠性在真實應用得到很好的證明。有很多排程器運作一年多,未作一次重新開機動。

   6.    軟體許可證

LVS叢集軟體是按GPL(GNU Public License)許可證發行的自由軟體,這意味着你可以得到軟體的源代碼,有權對其進行修改,但必須保證你的修改也是以GPL方式發行。

   二、LVS DR模式簡介。

    VS/DR利用大多數Internet服務的非對稱特點,負載排程器中隻負責排程請求,而伺服器直接将響應傳回給客戶,可以極大地提高整個叢集 系統的吞吐量。該方法與IBM的NetDispatcher産品中使用的方法類似(其中伺服器上的IP位址配置方法是相似的),但IBM的 NetDispatcher是非常昂貴的商品化産品,我們也不知道它内部所使用的機制,其中有些是IBM的專利。

    VS/DR的體系結構如圖7所示:排程器和伺服器組都必須在實體上有一個網卡通過不分斷的區域網路相連,如通過高速的交換機或者HUB相連。VIP位址為排程器和伺服器組共享,排程 器配置的VIP位址是對外可見的,用于接收虛拟服務的請求封包;所有的伺服器把VIP位址配置在各自的Non-ARP網絡裝置上,它對外面是不可見的,隻 是用于處理目标位址為VIP的網絡請求。

<a target="_blank" href="http://blog.51cto.com/attachment/201301/143408542.png"></a>

    VS/DR 的工作流程如圖8所示:它的連接配接排程和管理與VS/NAT和VS/TUN中的一樣,它的封包轉發方法又有不同,将封包直接路由給目标伺服器。在VS/DR 中,排程器根據各個伺服器的負載情況,動态地選擇一台伺服器,不修改也不封裝IP封包,而是将資料幀的MAC位址改為選出伺服器的MAC位址,再将修改後 的資料幀在與伺服器組的區域網路上發送。因為資料幀的MAC位址是選出的伺服器,是以伺服器肯定可以收到這個資料幀,從中可以獲得該IP封包。當伺服器發現 封包的目标位址VIP是在本地的網絡裝置上,伺服器處理這個封包,然後根據路由表将響應封包直接傳回給客戶。

<a target="_blank" href="http://blog.51cto.com/attachment/201301/143725738.png"></a>

本文轉自1594cqb 51CTO部落格,原文連結:http://blog.51cto.com/wolfchen/1122770,如需轉載請自行聯系原作者

繼續閱讀