叢集的可擴充性及其分布式體繫結構(4)

來源:互聯網
上載者:User

LVS體繫結構分析

林凡 (iamafan@21cn.com)

辰訊軟體工作室研發部經理
2002 年 3 月

在之前的三篇文章中,我們介紹了叢集的分布式體繫結構,各大要素以及考量、設計叢集的一些要點。其實僅有這些理論基礎知識還遠遠不夠。叢集技術的任何一點都足以寫出幾本書來。重要的是,通過全面的介紹,我們能夠為接下來的案例討論打好基礎。本文將主要介紹基於Linux的叢集技術――IPVS(based IP Virtual Server)也叫做LVS(Linux Virtual Server)。通過對LVS的具體分析,瞭解LVS在體繫結構設計,技術實現細節和應用中可能遇到的一些問題的詳細分析討論,逐步掌握在Linux下實現叢集系統的基本知識。

問題
如今,無論在企業網、園區網還是在廣域網路如Internet上,業務量的發展都超出了過去最樂觀的估計;同時,使用者不斷地追求更高的機器效能,而升級單一的伺服器系統,往往造成過高的投入和維護成本,性價比大大低於預期。這一切,不僅對硬體,也對軟體平台提出了更高的要求:

  • 可擴充性:良好可擴充性的電腦系統能夠使得效能隨著成本的增加而線性增長。並且很容易對其進行精簡或者擴充。
  • 全天候的可用性支援:嚴格的商業環境需要軟硬體系統提供透明的、自動適應的可用性支援,保證24×7的系統正常運行。
  • 可管理性:系統可以很龐大,但是要能夠易於管理。
  • 相對的成本/效能優勢:構造這樣的系統,在投入成本上是經濟的,容易根據具體的需求定製合適價位的目標系統。

解決
通過之前的分析我們知道,叢集系統在成本、效益上的的高度可擴充性正是解決這個問題的有效思路。通過相對總體成本較低的電腦群集,可以實現單一系統無法提供的強大效能。這裡我們針對互連網的應用情況提出具備以下特性的系統:

  • 高可擴充性
  • 高可用性
  • 高效能

不妨稱之為"三高"系統。

LVS體繫結構介紹
Linux Virtual Server項目是由章文嵩博士開放源碼及Linux核心的開發人員。著名的Linux叢集項目--LVS(Linux Virtual Server) 的創始人和主要開發人員。他目前工作於國家並行與分散式處理重點實驗室,主要從事叢集技術、作業系統、Object Storage Service與資料庫的研究。他還在自由軟體的開發上花費了大量時間,並以此為樂。)主持的著名開放源碼項目,一個實現"三高"系統的解決方案。LVS旨在解決高速發展的Web商務中日益凸現的問題:如何在有限資金投入的情況下,最大幅度的提高Web網站的潛在服務效能。

LVS是一個Linux平台下的軟體工具。通過LVS,你可以快捷方便的組建一個帶有第四層負載平衡功能的叢集系統。並且,藉助第三方的工具包,還可以實現對LVS叢集進行可用性支援的功能擴充。首先讓我們來看一下LVS的體繫結構:


圖一:LVS的三層體繫結構

從我們看出,LVS的抽象體繫結構分為三個層次。第一層是負載平衡器,這是叢集的唯一入口。從用戶端的角度看,叢集通過這層的服務體現為一個基於IP地址的單一系統映像(SSI),整個叢集共用這個虛擬位址,通過它用戶端可以把整個叢集看作一個獨立的具有合法IP地址的主機系統,用戶端的所有訪問都發往這個虛擬IP地址。

但我們也發現,如果僅有一台負載平衡器,容易造成負載平衡器成為叢集的單點失效,使其成為叢集中最脆弱的環節。因此,有必要提供容錯機制,能夠在負載平衡器失效的時候進行自動檢測並平滑替換,也就是常說的HA技術。在的結構中,有一個以備份均衡身份啟動並執行結點即時地監控負載平衡器的運行狀態,並根據檢測到的狀態做出響應:警示、接管、恢複。具體細節將在HA章節討論。

第二層是提供實際服務的伺服器群。用戶端發出的服務要求經過均衡器處理以後,轉交到服務池由具體的伺服器響應請求並返回資料。通常我們會在服務結點池上提供Web服務、FTP服務或者ApsaraVideo for VOD服務。由於單一系統無法應付高峰值得資料訪問,那麼通過多台伺服器分擔這些負載就比較經濟可行了。

伺服器結點也有可能出現暫時失效的情況,特別是在結點提供多種服務的時候,系統的隨機故障或外部環境的突變都可能造成該節點的某個服務暫時不可用。因此,由負載平衡擴充出的容錯機制要能夠識別這種錯誤,及時進行處理。同樣,當錯誤排除後,叢集能夠自動識別恢複事件,把好的結點重新納入叢集繼續運行。

第三層是儲存服務系統,為整個叢集內部運行提供穩定、一致的檔案存取服務。這一層作為LVS叢集的擴充,可以為叢集節點池提供單一的檔案系統入口,即在每一台服務結點上都共用同一個根(/);並且自動完成不同結點訪問檔案系統所引發的檔案鎖定、負載平衡、容錯、內容一致、讀寫事務等底層功能,對應用程式層提供一個透明的檔案訪問服務。

LVS叢集屬於松耦合叢集系統。由於LVS在IP層上實現了SSI,因此不需要在叢集中部署特殊的中介軟體層或者OS擴充,對伺服器結點OS的相容性比較好。對於部署LVS的內部結點而言,基本上可以相容多數的IP應用,不需要做複雜的移植和安裝工作,每個內部結點可以看成相對獨立的伺服器系統。即使在負載平衡器上,IPVS的核心功能也是透明的提供給使用者空間,不影響原生正常的網路應用。

其實在現實中,有許多技術能夠實現這樣的系統。它們藉助在某個層面上的負載平衡,將網路請求化整為零,由大量叢集的服務結點來共同分擔,以實現效能最大化的一項叢集技術。

負載平衡技術
其實,負載平衡並非傳統意義上的"均衡",一般來說,它只是把有可能擁塞於一個地方的負載交給多個地方分擔。如果將其改稱為"負載分擔",也許更好懂一些。說得通俗一點,負載平衡在網路中的作用就像輪流值日制度,把任務分給大家來完成,以免讓一個人累死累活。不過,這種意義上的均衡一般是靜態,也就是事先確定的"輪值"策略 。

與輪流值日制度不同的是,動態負載平衡通過一些工具即時地分析資料包,掌握網路中的資料流量狀況,把任務合理分配出去。結構上分為本地負載平衡和地區負載平衡(全域負載平衡),前一種是指對本地的伺服器叢集做負載平衡,後一種是指對分別放置在不同的地理位置、在不同的網路及伺服器叢集之間作負載平衡。

負載平衡體系中,每個服務結點運行一個所需伺服器程式的獨立拷貝,諸如Web、FTP、Telnet或e-mail伺服器程式。對於某些服務(如運行在Web伺服器上的那些服務)而言,程式的一個拷貝運行在群集內所有的主機上,而網路負載平衡則將工作負載在這些主機間進行分配。對於其他服務(例如e-mail),只有一台主機處理工作負載,針對這些服務,網路負載平衡允許網路通訊量流到一個主機上,並在該主機發生故障時將通訊量移至其他主機。

負載平衡實現結構
總的來說,在現有網路結構之上,負載平衡提供了一種廉價有效方法擴充伺服器頻寬和增加輸送量,加強網路資料處理能力,提高網路的靈活性和可用性。主要任務如下:

  • 解決網路擁塞問題,服務就近提供,實現地理位置無關性
  • 為使用者提供更好的訪問品質
  • 提高伺服器響應速度
  • 提高伺服器及其他資源的利用效率
  • 避免了網路關鍵部位出現單點失效

對這樣一個網路的負載平衡技術,我們從網路的不同實現層次入手,針對具體的效能瓶頸進行分析。從用戶端應用為起點縱向考量,可以把負載平衡技術分為用戶端負載平衡技術、應用伺服器技術、高層協議交換、網路接入協議交換等幾個不同層次的實現方式:


負載平衡的層次

目前在每一個層次都有大量的技術實現負載平衡的主要功能,其優缺點也各不相同,而對於我們瞭解LVS的目的而言,只需要關心網路接入協議的負載平衡技術即可。這一層次的負載平衡技術特點是:

  • 執行效率高,因為基於底層的協議,可以通過硬體體系進行部署,也可以在OS的核心層實現。
  • 相容性強,接入協議往往能夠相容大多數現有的主流網路應用,比如IPv4體系中的IP層。
  • 體系實現相對簡單,比起基於內容的高層交換,它不需要複雜的模式比對機制,主要通過連接埠映射進行資料交換,規則簡單。

下面我們就分析一下基於負載平衡技術的LVS架構與實現方法。

LVS的IP負載平衡技術
根本上將,LVS的實現基礎是IP交換,也就是前面提到的接入協議交換技術。但LVS的體繫結構具備一定的可擴充性,可以實現高效能、高可擴充性、易管理性等諸多特點,成為一個以負載平衡為核心的真正意義的叢集系統。

首先我們瞭解一下LVS的負載平衡模型,共有三種:地址轉換(NAT)、IP隧道(IP Tunneling)和直接路由(DR)模型。

◆地址轉換模式NAT


NAT結構圖與NAT包處理流程

我們看到,NAT的網路結構呈現為一種類似防火牆的私人網結構,中間的虛線表示網路隔離帶。通過內部IP地址,將服務結點池同互連網隔離開來。服務結點無法和用戶端直接通訊,不論是請求資料還是應答資料,都需要經過負載平衡器進行IP包處理工作。

NAT中主要的工作就是改寫IP包的源、目的地址資訊,使得發向VIP的請求資料經過改寫後重新指向內部主機;同樣內部的應答資料經過負載平衡器改寫後,以VIP作為源地址發至要求者。這樣的模式也稱作網路位址轉譯(也有叫做IP地址偽裝),我們在Proxy 伺服器、Iptables、透明網關等應用中,都使用到這種模型,可以說這是一件比較成熟的技術。

由於使用NAT方式,要對進入和流出叢集的網路包進行改寫包頭地址的工作,在負荷比較重的時候會影響整個叢集的效能,負載平衡器容易成為瓶頸。

IP隧道模式 IPIP


IPIP結構圖與IPIP包處理流程

IPIP模式採用的是開放的網路結構,服務結點擁有合法的互連網IP地址,可以通過路由路徑將應答包直接返回給用戶端。因此,負載平衡器僅僅處理進入叢集的請求資料包,而返回包不經過路由器。因此,這種模式稱作單工串連模式(單方向串連工作模式)。負載平衡器和服務結點的串連可以是LAN,也可以在不同的網路上,只需要保證負載平衡器能夠將IP包發送至服務結點即可。

負載平衡器收到用戶端的請求包後,通過IPIP協議為該IP包重新處理,形成以選定的服務結點為目的IP的新的IP包,原有的IP包資料則封裝在新的IP包裡。服務結點收到均衡器發來的IPIP資料後,將該包解開,根據其內的用戶端地址(源地址)將處理結果直接返回給用戶端,而應答包的源地址則成為叢集的虛擬位址VIP。

IPIP模式的技術在其他領域也有體現,因為對IP進行重新封裝,整個過程對應用程式層仍然是透明的。PPTP協議就是對IP隧道協議的一種應用。不過目前IPIP僅僅在Linux系統上實現。該協議必須在Kernel中開啟裝置選項支援,通過tunel裝置綁定VIP,服務結點在返回應答資料時,可以以VIP作為源地址構築應答包。

直接路由模式 DR


DR結構圖與DR包處理流程

和IPIP模式一樣,DR模式也是採用單工的串連方式,應答資料不再經過均衡器而直接返回給用戶端。服務結點也必須擁有能夠到達用戶端的合法IP地址。而且,DR模式中,負載平衡器和服務結點必須位於同一個網段。

負載平衡器接收到用戶端請求後,選擇合適的服務結點,然後改寫該請求包的MAC地址部分,使之成為目的服務結點的MAC地址,再將此包廣播到均衡器所在的網段。由於每個服務結點都擁有一個虛擬網括裝置(可以是dummy0或者lo:0),這些裝置上綁定了和均衡器一樣的VIP,只是該裝置並不響應對VIP的RAP解析,不會和均衡器的Vip地址衝突。負載平衡器收到符合自身MAC的IP包後,經過處理後直接將應答資料返回給客戶,而此時的源地址仍然是VIP。這樣,在用戶端看來,訪問的和接受響應的始終是叢集的VIP地址了。

綜合比較
雖然LVS支援三種負載平衡模式,但是從上面的分析我們發現,根據負載平衡器處理IP包的進出方式,LVS實際上包含了兩種模型:單工處理和雙工(雙向串連工作模式)處理。顯然,NAT地址轉換模式屬於雙工串連處理,在這種模式下,負載平衡器不但需要處理進入叢集的IP包,而且還要處理叢集內部節點返回的應答IP包,一個使用者從發出訪問請求到接受響應,都要經過叢集的核心負載平衡器的處理,因此稱之為雙工串連處理。而其他兩種模式中,負載平衡器僅僅處理進入叢集的IP請求包,而叢集內部結點的響應資料則不再通過負載平衡器返回用戶端,而是通過節點到用戶端的路由通道直接發送到目的地。由於均衡器僅處理一次完整串連的IP請求部分,而對IP的應答資料則不處理,所以稱之為單工串連模式。

二者比較,有什麼有缺點呢。要知道,在現今的Web世界中,大多數的網路請求比較小,無非是一些URL頁面請求,GET或者POST表單,在麼就是某些指令等等,這些資料基本上在幾百到幾K個位元組。對這樣的IP資料包進行處理是比較輕鬆的事。而相反,Web中的應答資料通常很大,一個普通的Web頁面也要幾十K,更何況返回的如果是視頻、音頻流了,加上日益瘋狂的網路下載,即使再強勁的處理器也無法承受這樣大量的IP包處理工作。

因此,在IP負載平衡中,如果使用雙工模式(NAT),不僅要對進入叢集的請求做出處理(改寫IP包的源、目的地址),還要對服務結點返回的大量資料做同樣的工作。那麼,隨著叢集服務節點池規模的增長,負載平衡器的處理能力很快就會達到飽和,也大大影響了LVS叢集的規模可擴充性。而使用IPIP或者DR模式,負載平衡器只需要處理相對很少的IP資料包,對於大量的返回資料,都由服務節點通過路由器、交換器等裝置直接返回給用戶端。因此在規模可擴充性這一點上,單工模式有可擴充性方面的優勢。

事物的存在總有他的道理。作者當初設計這三種負載模型,肯定是各有其有缺點的。NAT也並非一無是處。NAT雖然在效能表現上弱於其它兩種模型,但是叢集結點支援更多的作業系統,在網路安全性方面也比較高一些。以下是三者在各方面的比較:

  NAT模式 IPIP模式 DR模式
對服務結點的要求 服務結點可以是任何作業系統 服務結點必須支援IP隧道協議,目前只有Linux 服務結點支援虛擬網卡裝置,能夠禁用該裝置的ARP響應功能
網路要求 擁有私人IP地址的區域網路絡 擁有合法IP地址的區域網路或者廣域網路 擁有合法IP地址的區域網路,服務結點與均衡器必須在同一個網段
通常支援的結點數量 10~20個,試均衡器的處理能力而定 較高,可以支援到100個服務結點 較高,可以支援到100個服務結點
網關 均衡器即為服務結點的網關 服務結點同自己的網關或者路由器串連,不經過均衡器 服務結點同自己的網關或者路由器串連,不經過均衡器
服務結點安全性 較好,採用內部IP,服務結點隱蔽 較差,採用公用IP地址,結點完全暴露 較差,採用公用IP地址,結點完全暴露
IP要求 僅需要一個合法IP地址作為VIP 除VIP外,每個服務結點需擁有合法的IP地址,可以直接路由至用戶端 除VIP外,每個服務結點需擁有合法的IP地址,可以直接路由至用戶端


三種模式的比較

綜上所述,我們在選擇LVS作為叢集負載平衡解決方案的時候,首先根據單前應用環境的情況確定使用哪一種IP負載平衡結構。如果你只擁有一個合法的IP地址,或者你需要構造一個安全的叢集,又不太擔心效能問題的話,完全可以使用NAT模式;如果對效能有比較高的要求,而應用又是基於Linux的話,使用IPIP或者DR模式一定會給你一個驚喜。

作者簡介:
林凡,現於廈門大學從事Linux相關的科研工作。於叢集技術由很大的興趣,希望能與志同道合的朋友一起交流。您可以通過電子郵件 iamafan@21cn.com 和他聯絡。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.