叢集與分布式
轉自:http://blog.csdn.net/tanghongru1983/archive/2009/04/27/4130356.aspx
叢集概念
1. 兩大關鍵特性
叢集是一組協同工作的服務實體,用以提供比單一服務實體更具擴充性與可用性的服務平台。在用戶端看來,一個叢集就象是一個服務實體,但事實上叢集由一組服務實體組成。與單一服務實體相比較,叢集提供了以下兩個關鍵特性:
· 可擴充性--叢集的效能不限於單一的服務實體,新的服務實體可以動態地加入到叢集,從而增強叢集的效能。
· 高可用性--叢集通過服務實體冗餘使用戶端免於輕易遇到out of service的警告。在叢集中,同樣的服務可以由多個服務實體提供。如果一個服務實體失敗了,另一個服務實體會接管失敗的服務實體。叢集提供的從一個出錯的服務實體恢複到另一個服務實體的功能增強了應用的可用性。
2. 兩大能力
為了具有可擴充性和高可用性特點,叢集的必須具備以下兩大能力:
· 負載平衡--負載平衡能把任務比較均衡地分布到叢集環境下的計算和網路資源。
· 錯誤恢複--由於某種原因,執行某個任務的資源出現故障,另一服務實體中執行同一任務的資源接著完成任務。這種由於一個實體中的資源不能工作,另一個實體中的資源透明的繼續完成任務的過程叫錯誤恢複。
負載平衡和錯誤恢複都要求各服務實體中有執行同一任務的資源存在,而且對於同一任務的各個資源來說,執行任務所需的資訊視圖(資訊上下文)必須是一樣的。
3. 兩大技術
實現叢集務必要有以下兩大技術:
· 叢集地址--叢集由多個服務實體組成,叢集用戶端通過訪問叢集的叢集地址擷取叢集內部各服務實體的功能。具有單一叢集地址(也叫單一影像)是叢集的一個基本特徵。維護叢集地址的設定被稱為負載平衡器。負載平衡器內部負責管理各個服務實體的加入和退出,外部負責叢集地址向內部服務實體地址的轉換。有的負載平衡器實現真正的負載平衡演算法,有的只支援任務的轉換。只實現任務轉換的負載平衡器適用於支援ACTIVE-STANDBY的叢集環境,在那裡,叢集中只有一個服務實體工作,當正在工作的服務實體發生故障時,負載平衡器把後來的任務轉向另外一個服務實體。
· 內部通訊--為了能協同工作、實現負載平衡和錯誤恢複,叢集各實體間必須時常通訊,比如負載平衡器對服務實體心跳測試資訊、服務實體間任務執行內容資訊的通訊。
具有同一個叢集地址使得用戶端能訪問叢集提供的計算服務,一個叢集地址下隱藏了各個服務實體的內部地址,使得客戶要求的計算服務能在各個服務實體之間分布。內部通訊是叢集能正常運轉的基礎,它使得叢集具有均衡負載和錯誤恢複的能力。
叢集分類
Linux叢集主要分成三大類( 高可用叢集, 負載平衡叢集,科學計算叢集)
高可用叢集( High Availability Cluster)
負載平衡叢集(Load Balance Cluster)
科學計算叢集(High Performance Computing Cluster)
================================================
具體包括:
Linux High Availability 高可用叢集
(普通兩節點雙機熱備,多節點HA叢集,RAC, shared, share-nothing叢集等)
Linux Load Balance 負載平衡叢集
(LVS等....)
Linux High Performance Computing 高效能科學計算叢集
(Beowulf 類叢集....)
分布式儲存
其他類linux叢集
(如Openmosix, rendering farm 等..)
詳細介紹
1. 高可用叢集(High Availability Cluster)
常見的就是2個節點做成的HA叢集,有很多通俗的不科學的名稱,比如"雙機熱備", "雙機互備", "雙機".
高可用叢集解決的是保障使用者的應用程式持續對外提供服務的能力。 (請注意高可用叢集既不是用來保護業務資料的,保護的是使用者的業務程式對外不間斷提供服務,把因軟體/硬體/人為造成的故障對業務的影響降低到最小程度)。
2. 負載平衡叢集(Load Balance Cluster)
負載平衡系統:叢集中所有的節點都處於活動狀態,它們分攤系統的工作負載。一般Web伺服器叢集、資料庫叢集和應用伺服器叢集都屬於這種類型。
負載平衡叢集一般用於相應網路請求的網頁伺服器,資料庫伺服器。這種叢集可以在接到請求時,檢查接受請求較少,不繁忙的伺服器,並把請求轉到這些伺服器上。從檢查其他伺服器狀態這一點上看,負載平衡和容錯叢集很接近,不同之處是數量上更多。
3. 科學計算叢集(High Performance Computing Cluster)
高效能運算(High Perfermance Computing)叢集,簡稱HPC叢集。這類叢集致力於提供單個電腦所不能提供的強大的計算能力。
高效能運算分類
高吞吐計算(High-throughput Computing)
有一類高效能運算,可以把它分成若干可以並行的子任務,而且各個子任務彼此間沒有什麼關聯。象在家搜尋外星人( SETI@HOME -- Search for Extraterrestrial Intelligence at Home )就是這一類型應用。這一項目是利用Internet上的閑置的計算資源來搜尋外星人。SETI項目的伺服器將一組資料和資料模式發給Internet上參加SETI的計算節點,計算節點在給定的資料上用給定的模式進行搜尋,然後將搜尋的結果發給伺服器。伺服器負責將從各個計算節點返回的資料彙集成完整的資料。因為這種類型應用的一個共同特徵是在海量資料上搜尋某些模式,所以把這類計算稱為高吞吐計算。所謂的Internet計算都屬於這一類。按照 Flynn的分類,高吞吐計算屬於SIMD(Single Instruction/Multiple Data)的範疇。
分布計算(Distributed Computing)
另一類計算剛好和高吞吐計算相反,它們雖然可以給分成若干並行的子任務,但是子任務間聯絡很緊密,需要大量的資料交換。按照Flynn的分類,分布式的高效能運算屬於MIMD(Multiple Instruction/Multiple Data)的範疇。
4. 分布式(叢集)與叢集的聯絡與區別
分布式是指將不同的業務分布在不同的地方。
而叢集指的是將幾台伺服器集中在一起,實現同一業務。
分布式中的每一個節點,都可以做叢集。
而叢集並不一定就是分布式的。
舉例:就比如新浪網,訪問的人多了,他可以做一個群集,前面放一個響應伺服器,後面幾台伺服器完成同一業務,如果有業務訪問的時候,響應伺服器看哪台伺服器的負載不是很重,就將給哪一台去完成。
而分布式,從窄意上理解,也跟叢集差不多, 但是它的組織比較鬆散,不像叢集,有一個組織性,一台伺服器垮了,其它的伺服器可以頂上來。
分布式的每一個節點,都完成不同的業務,一個節點垮了,哪這個業務就不可訪問了。