LVS組成與失效管理

        LVS是Linux Virtual Server的簡寫,意即Linux虛擬服務器,是一個虛擬的服務器集羣系統。目前有三種IP負載均衡技術(VS/NAT、VS/TUN和VS/DR),八種調度算法(rr,wrr,lc,wlc,lblc,lblcr,dh,sh)。

        目前,LVS項目已提供了一個實現可伸縮網絡服務的Linux Virtual Server框架,如圖所示。在LVS框架中,提供了含有三種IP負載均衡技術的IP虛擬服務器軟件IPVS基於內容請求分發的內核Layer-7交 換機KTCPVS集羣管理軟件。可以利用LVS框架實現高可伸縮的、高可用的Web、Cache、Mail和Media等網絡服務;在此基礎上,可以開 發支持龐大用戶數的、高可伸縮的、高可用的電子商務應用。 
                                                              

  總的來說:

 LVS是一種集羣(Cluster)技術,採用IP負載均衡技術和基於內容請求分發技術。調度器具有很好的吞吐率,將請求均衡地轉移到不同的服務器上執行,且調度器自動屏蔽掉服務器的故障,從而將一組服務器構成一個高性能的、高可用的虛擬服務器。整個服務器集羣的結構對客戶是透明的,而且無需修改客戶端和服務器端的程序。 

LVS主要組成部分

        負載調度器(load balancer/ Director),它是整個集羣對外面的前端機,負責將客戶的請求發送到一組服務器上執行,而客戶認爲服務是來自一個IP地址(我們可稱之爲虛擬IP地址)上的。

      調度器是服務器集羣系統的唯一入口點(Single Entry Point),它可以採用IP負載均衡技術、基於內容請求分發技術或者兩者相結合。當客戶請求到達時,調度器只根據服務器負載情況和設定的調度算法從服務器池中選出一個服務器,將該請求轉發到選出的服務器,並記錄這個調度;當這個請求的其他報文到達,也會被轉發到前面選出的服務器。在基於內容請求分發技術中,服務器可以提供不同的服務,當客戶請求到達時,調度器可根據請求的內容選擇服務器執行請求。因爲所有的操作都是在Linux操作系統核心空間中將完成的,它的調度開銷很小,所以它具有很高的吞吐率。

       服務器池(server pool/ Realserver),是一組真正執行客戶請求的服務器,執行的服務一般有WEB、MAIL、FTP和DNS等。 

       服務器池的結點數目是可變的。當整個系統收到的負載超過目前所有結點的處理能力時,可以在服務器池中增加服務器來滿足不斷增長的請求負載。對大多數網絡服務來說,請求間不存在很強的相關性,請求可以在不同的結點上並行執行,所以整個系統的性能基本上可以隨着服務器 池的結點數目增加而線性增長。  

        共享存儲(shared storage),它爲服務器池提供一個共享的存儲區,這樣很容易使得服務器池擁有相同的內容,提供相同的服務。

        共享存儲通常是數據庫網絡文件系統或者分佈式文件系統。服務器結點需要動態更新的數據一般存儲在數據庫系中,同時數據庫會保證併發訪問時數據的一致性。靜態的數據可以存儲在網絡文件系統(如NFS/CIFS協議)中,但網絡文件系統的伸縮能力有限,一般來說,NFS/CIFS服務器只能支持3~6個繁忙的服務器結點。  

        對於規模較大的集羣系統,可以考慮用分佈式文件系統(如AFS,GFS)分佈式文件系統可爲各服務器提供共享的存儲區,它們訪問分佈式文件系統就像訪問本地文件系統一樣,同時分佈式文件系統可提供良好的伸縮性和可用性。此外,當不同服務器上的應用程序同時讀寫訪問分佈式文件系統上同一資源時,應用程序的訪問衝突需要消解才能使得資源處於一致狀態。這需要一個分佈式鎖管理(Distributed Lock Manager),它可能是分佈式文件系統內部提供的,也可能是外部的。開發者在寫應用程序時,可以使用分佈式鎖管理器來保證應用程序在不同結點上併發訪問的一致性。 集羣系統可實現不間斷實時數據處理,分佈式鎖管理可以爲集羣系統中的相互操作的進程提供同步訪問共享資源的機制。同時避免死鎖的發生。

NFS與ASF區別:      

       NFS和AFS的區別在於對併發寫操作的處理方法上。當一個客戶機向服務器請求一個文件(或數據庫記錄),文件被放在客戶工作站的高速緩存中,若另一個用戶也請求同一文件,則它也會被放入那個客戶工作站的高速緩存中。當兩個客戶都對文件進行修改時,從技術上而言就存在着該文件的三個版本(每個客戶機一個,再加上服務器上的一個)。有兩種方法可以在這些版本之間保持同步:
  無狀態系統在這個系統中,服務器並不保存其客戶機正在緩存的文件的信息。因此,客戶機必須協同服務器定期檢查是否有其他客戶改變了自己正在緩存的文件。這種方法在大的環境中會產生額外的LAN通信開銷,但對小型LAN來說,這是一種令人滿意的方法。NFS就是個無狀態系統。
  回呼(Callback)系統在這種方法中,服務器記錄它的那些客戶機的所作所爲,並保留它們正在緩存的文件信息。服務器在一個客戶機改變了一個文件時使用一種叫回叫應答(callbackpromise)的技術通知其它客戶機。這種方法減少了大量網絡通信。AFS(及OSFDCE的DFS)就是回叫系統。客戶機改變文件時,持有這些文件拷貝的其它客戶機就被回叫並通知這些改變。
  無狀態操作在運行性能上有其長處,但AFS通過保證不會被回叫應答充斥也達到了這一點。方法是在一定時間後取消回叫。客戶機檢查回叫應答中的時間期限以保證回叫應答是當前有效的。回叫應答的另一個有趣的特徵是向用戶保證了文件的當前有效性。換句話說,若一個被緩存的文件有一個回叫應答,則客戶機就認爲文件是當前有效的,除非服務器呼叫指出服務器上的該文件已改變了。       

LINUX虛擬服務器

一、IPVS----三種IP負載均衡技術與八種調度算法(大家可以看我這篇博客主要的寫此技術的)

二、內核 Layer-7 交換機 KTCPVS 

       在基於IP負載調度技術中,當一個TCP連接的初始SYN報文到達時,調度器就選擇一臺服務器,將報文轉發給它。此後通過查發報文的IP和TCP報文頭地址,保證此連接的後繼報文被轉發到該服務器。這樣,IPVS無法檢查到請求的內容再選擇服務器,這就要求後端服務器組(可運行不同類型的服務,如文檔服務,圖片服務,CGI服務和數據庫服務等  )提供相同的服務,不管請求被髮送到哪 一臺服務器,返回結果都是一樣的。但是,在有些應用中後端服務器功能不一,有的提供HTML文檔,有的提供圖片,有的提供CGI,這就需要基於內容的調度 (ContentBased Scheduling)。               

       由於用戶空間TCP Gateway的開銷太大,我們提出在操作系統的內核中實現Layer-7交換方法,來避免用戶空間與核心空間的切換和內存複製的開銷。在Linux操作系統的內核中,我們實現了Layer-7交換,稱之爲KTCPVS(Kernel TCP Virtual Server)。目前,KTCPVS已經能對HTTP請求進行基於內容的調度,但它還不很成熟,在其調度算法和各種協議的功能支持等方面,有大量的工作需要做。 

       雖然應用層交換處理複雜,它的伸縮性有限,但應用層交換還是可以帶來一些好處: 相同頁面的請求被髮送到同一服務器,可以提高單臺服務器的Cache命中率。 一些研究表明WEB訪問流中存在局部性。Layer-7交換可以充分利用訪問的局部性,將相同類型的請求發送到同一臺服務器,使得每臺服務器收到的請求具有更好的相似性,可進一步提高單臺服務器的Cache命中率。

三、集羣管理軟件

        有相關的集羣管理軟件對資源進行監測,能及時將故障屏蔽,實現系統的高可用性。主、從調度器能週期性地進行狀態同步,從而實現更高的可用性。 

四、通用網絡服務 

        可以利用LVS框架實現高可伸縮的、高可用的Web、Cache、Mail和Media等網絡服務。 

五、電子商務

        在LVS框架的基礎上,可以開發支持龐大用戶數的、高可伸縮的、高可用的電子商務應用。 

失效管理

服務器失效管理【服務器健康探測】 

      通常,我們在調度器上有資源監測進程來時刻監視各個服務器結點的健康狀況。當服務器對ICMP ping不可達時或者探測它的網絡服務在指定的時間沒有響應時,資源監測進程通知操作系統內核將該服務器從調度列表中刪除或者失效。這樣,新的服務請求就不會被調度到壞的結點。資源監測進程能通過電子郵件或傳呼機向管理員報告故障。一旦監測進程到服務器恢復工作,通知調度器將其加入調度列表進行調度。另外,通過系統提供的管理程序,管理員可發命令隨時可以將新機器加入服務來提高系統的處理性能,也可以將已有的服務器切出服務,以便對服務器進行系統維護。

這篇博客對ICMP ping寫的比較好,大家可以看看:https://blog.csdn.net/xiaokunzhang/article/details/80646662

調度器失效管理【Heartbeat雙機熱備】 

        現在前端的調度器有可能成爲系統的單一失效點(Single Point of Failure)。一般來說,調度器的可靠性較高,因爲調度器上運行的程序較少而且大部分程序早已經遍歷過,但我們不能排除硬件老化、網絡線路或者人爲誤 操作等主要故障。爲了避免調度器失效而導致整個系統不能工作,我們需要設立一個從調度器作爲主調度器的備份。兩個心跳(Heartbeat)進程分別在主、從調度器上運行,它們通過串口線和UDP等心跳線來相互定時地彙報各自的健康狀況。當從調度器不能聽得主調度器的心跳時,從調度器通過ARP欺騙 (Gratuitous ARP)來接管集羣對外的Virtual IP Address,同時接管主調度器的工作來提供負載調度服務。

       當主調度器恢復時,這裏有兩種方法,一是主調度器自動變成從調度器,二是從調度器釋放Virtual IP Address,主調度器收回Virtual IP Address並提供負載調度服務。這裏,多條心跳線可以使得因心跳線故障導致誤判(即從調度器認爲主調度器已經失效,其實主調度器還在正常工作)的概論降到最低。 
        通常,當主調度器失效時,主調度器上所有已建立連接的狀態信息將丟失,已有的連接會中斷。客戶需要向重新連接,從調度器纔會將新連接調度到各個服務器上,這對客戶會造成一定的不便。爲此,IPVS調度器在Linux 內核中實現一種高效狀態同步機制,將主調度器的狀態信息及時地同步到從調度器。當從調度器接管時,絕大部分已建立的連接會持續下去。 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章