圖1 Linux虛擬服務器結構圖 調度算法 LVS提供了四種調度算法:輪轉調度,加權輪轉調度,最少連接調度,加權最少連接調度。 輪轉調度(Round Robin Scheduling) 輪轉調度不考慮服務器的連接數和響應時間,它將所有的服務器都看作是相同的。當以輪轉的形式將連接分發到不同的服務器上。 加權輪轉調度(Weighted Round Robin Scheduling) 根據每個機器的處理能力的不同給每個機器分配一個對應的權重,然後根據權重的大小以輪轉的方式將請求分發到各台機器。這種調度算法的耗費比其它的動態調度算法小,但是當負載變化很頻繁時,它會導致負載失衡,而且那些長請求會發到同一個服務器上。 最少連接調度(Least Connection Scheduling) 最少連接調度將用戶請求發送到連接數最少的機器上。最少連接調度是一種動態調度方法,如果集群中各台服務器的處理能力相近,則當負載的變化很大時也不會導致負載失衡,因為它不會把長請求發送到同一台機器上。但是當處理器的處理能力差異較大時,最少連接調度就不能很好的發揮效能了。 加權最小連接調度(Weighted Least Connection Scheduling) 根據服務器的性能不同而給它們分配一個相應的權重,權重越大,獲得一個連接的機會就越大。有如下的運算方法:(假設共有n台機器,每一台服務器i的權重為Wi (i=1,..,n),活躍連接數為Ci (i=1,..,n), 所有的連接數為Ci (i=1,..,n)的總和,下一個連接會發送給服務器j,服務器j滿足以下的要求): (Cj/ALL_CONNECTIONS)/Wj = min { (Ci/ALL_CONNECTIONS)/Wi } (i=1,..,n) 由於ALL_CONNECTIONS是一個常數,因此上面的式子可以優化為: Cj/Wj = min { Ci/Wi } (i=1,..,n) 負載平衡方法 LVS提供了三種IP級的負載平衡方法:Virtual Server via NAT 、Virtual Server via IP Tunneling、Virtual Server via Direct Routing。 Virtual Server via NAT方法使用了報文雙向重寫的方法, Virtual Server via IP Tunneling采用的是報文單向重寫的策略, Virtual Server via Direct Routing采用的是報文轉發策略,這些策略將在以後的文章中詳細描述。 MOSIX MOSIX為Linux核心增添了集群計算的功能。它支持的操作系統平台有BSD/OS 和Linux,它允許任意多個基於X86/Pentium的服務器和工作站協同工作。在MOSIX集群環境中,用戶無需對應用程序進行修改,或將應用程序與庫連接起來,或將應用程序分配到不同的節點上運行。MOSIX會自動將這些工作透明地交給別的節點來執行。 MOSIX的核心是適應性的資源管理算法,它對各節點的負載進行監測並做出相應的回應,從而提高所有進程的整體性能。它使用搶先的進程遷移方法來在各節點中分配和再分配進程,從而充分利用所有的資源。適應性的資源管理算法具體上又包括適應性的負載平衡算法、內存引導算法和文件I/O的優化算法。這些算法都對集群中的資源使用情況的變化做出響應。如:節點上的不平衡的負載分布或由於內存不足而導致的過多的磁盤換入換出。在這種情況下,MOSIX將進程從一個節點遷移到另外一個節點上,從而來均衡負載或將進程遷移到有足夠的內存空間的節點上。 由於MOSIX是在Linux的核心中實現的,因此它的操作對應用程序而言是完全透明的。可以用它來定義不同的集群類型,這些集群中的機器可以相同也可以不同。 與Turbocluster、Linux Virtual Server、Lsf等集群系統不同的是,MOSIX集群中的每個節點既是主節點又是服務節點,不存在主控節點。對於那些在本地節點創建的進程而言,該節點就是一個主節點;對於那些從遠方節點遷移過來的進程而言,該節點就是服務節點。這意味著可以在任意時刻向集群中增加節點或從集群中刪除節點,而不會對正在運行的進程產生不良的影響。MOSIX的另外一個特性就是它的監測算法能夠監測每個節點的速度、負載、可用內存、IPC 以及I/O rate 。系統使用這些信息來決定將進程發送到哪個具體的節點上。當在某個節點上創建了一個進程以後,該進程就在這個節點上執行。當該節點的負載超過了一定的閥值以後,就將該進程透明地遷移到別的節點上繼續執行。 MOSIX文件系統采用直接文件系統訪問的方法,它可以允許遷移到別的節點的進程在本地進行I/O操作。這樣就減少了需要進行I/O操作的進程與創建該進程的節點之間的通訊,從而允許這些進程更加自由地在集群中的節點中進行遷移。MOSIX文件系統使所有節點都可以像訪問本地文件系統一樣透明地訪問其它節點上的所有目錄和文件。 一個低端的MOSIX配置可以包含通過以太網連接起來的多台PC機。一個較大的配置可以包含通過快速以太網連接起來的多台工作站和服務器。高端的MOSIX配置可以包含通過Gigabit-Ethernet連接起來的多台SMP 或非SMP工作站和服務器。 5.EDDIE Eddie的主要目的是提供一些供那些進行重要任務處理的網站使用的工具,從而使這些網站能夠提供持續的高級服務。Eddie創建了一個真正的分布式web服務器結構,它支持分布於不同的物理地點的web服務器。它的結構如圖5-1所示。 圖2所示的分布式服務器包含兩個集群,它們分別是site 1 和site 2。每個集群都包含著一台域名服務器和若干台運行web服務器軟件的實際的服務器。當用戶敲入一個域名時,首先在Local DNS上對這個域名進行解析,找出與其對應的IP地址。如果Local DNS無法對這個域名進行解析,就將此域名發送到Authoritative DNS上,Authoritative DNS返回應該訪問的服務器的IP地址,然後用戶就可以訪問指定的服務器上的內容了。
圖 2 Eddie集群結構圖 Eddie主要包含兩個軟件包:HTTP網關和增強的DNS服務器。如圖3所示,在每個站點上增加一個新的服務器(即前端機),在其上運行HTTP網關來接受外界發來的請求並且將請求調度到合適的後端機上執行,DNS服務器上運行增強的DNS服務器軟件,通過該軟件可以在多個地理上分散的網址上均衡負載。
圖 3 Eddie主要有以下與眾不同的特點: 提高了web服務器的吞吐量。通過提供強大的負載平衡能力,Eddie使用戶可以充分利用分布式web服務器中的所有資源。主要在兩個地方使用了負載平衡。首先後端機將本機上的負載信息如CPU負載、內存、磁盤延遲、運行隊列數據以及頁面錯等信息發送給前端機,前端機根據負載輕重將外界請求發送到合適的服務器上。另外在增強DNS服務器軟件中也提供了負載平衡的功能,前端機和後端機的綜合負載信息都發送到Authoritative DNS服務器上,然後Local DNS可以根據各個Authoritative DNS上的負載的輕重來決定將域名解析的任務發送到哪一台Authoritative DNS上。這樣就可以充分利用分布式服務器環境中的所有資源,增強了web服務器的吞吐量。 提供很好的服務質量。首先Eddie通過使用靜態和動態負載平衡策略提高了web服務器的吞吐量,減少了用戶請求的響應時間;其次,當用戶發一個請求時,系統就要檢查是否來自該用戶的連接已經存在,如果存在,就將請求繼續發送到上次對該請求提供服務的服務器上,這樣就保證了用戶對web訪問的持續性。如果沒有足夠的資源,則將用戶請求加入等待隊列,並且告訴用戶它的請求要等待一會兒才會被處理。