Linux 叢集技術(轉)

gugu99發表於2007-08-10
Linux 叢集技術(轉)[@more@]

  目前,越來越多的網站採用Linux作業系統,提供郵件、Web、檔案儲存、資料庫等服務。 也有非常多的公司在企業內部網中利用Linux伺服器提供這些服務。隨著人們對Linux伺服器依賴的加深,對其可靠性、負載能力和計算能力也倍加關注。Linux叢集技術應運而生,可以以低廉的成本,很好地滿足人們的這些需要。

  Linux競爭力很強的原因之一,是它可以執行於極為普及的PC機上,不需要購買昂貴的專用硬體裝置。在幾臺執行Linux的PC機上,只要加入相應的叢集軟體,就可以組成具有超強可靠性、負載能力和計算能力的Linux叢集。叢集中的每臺伺服器稱為一個節點。

  按照側重點的不同,可以把Linux叢集分為三類。一類是高可用性叢集,執行於兩個或多個節點上,目的是在系統出現某些故障的情況下,仍能繼續對外提供服務。高可用性叢集的設計思想就是要最大限度地減少服務中斷時間。這類叢集中比較著名的有Turbolinux TurboHA、Heartbeat、Kimberlite等。第二類是負載均衡叢集,目的是提供和節點個數成正比的負載能力,這種叢集很適合提供大訪問量的Web服務。負載均衡叢集往往也具有一定的高可用性特點。Turbolinux Cluster Server、Linux Virtual Server都屬於負載均衡叢集。另一類是超級計算叢集,按照計算關聯程度的不同,又可以分為兩種。一種是任務片方式,要把計算任務分成任務片,再把任務片分配給各節點,在各節點上分別計算後再把結果彙總,生成最終計算結果。另一種是平行計算方式,節點之間在計算過程中大量地交換資料,可以進行具有強耦合關係的計算。這兩種超級計算叢集分別適用於不同型別的資料處理工作。有了超級計算叢集軟體,企業利用若干臺PC機就可以完成通常只有超級計算機才能完成的計算任務。這類軟體有Turbolinux EnFusion、SCore等。

  高可用性叢集與負載均衡叢集的工作原理不同,適用於不同型別的服務。通常,負載均衡叢集適用於提供靜態資料的服務,如HTTP服務;而高可用性叢集既適用於提供靜態資料的服務,如HTTP服務,又適用於提供動態資料的服務,如資料庫等。高可用性叢集之所以能適用於提供動態資料的服務,是由於節點共享同一儲存介質,如RAIDBox。也就是說,在高可用性叢集內,每種服務的使用者資料只有一份,儲存在共用儲存裝置上,在任一時刻只有一個節點能讀寫這份資料。

  以Turbolinux TurboHA為例,叢集中有兩個節點A和B,設這個叢集只提供Oracle服務,使用者資料存放於共用儲存裝置的分割槽/dev/sdb3上。在正常狀態下,節點A提供Oracle資料庫服務,分割槽/dev/sdb3被節點A載入在/mnt/oracle上。當系統出現某種故障並被TurboHA軟體檢測到時,TurboHA會將Oracle服務停止,並把分割槽/dev/sdb3解除安裝。之後,節點B上的TurboHA軟體將在節點B上載入該分割槽,並啟動Oracle服務。對於Oracle服務有一個虛擬的IP地址,當Oracle服務從節點A切換到節點B上時,虛擬的IP地址也會隨之繫結到節點B上,因此使用者仍可訪問此服務。

  由以上分析可以看出,高可用性叢集對一種服務而言不具有負載均衡功能,它可以提高整個系統的可靠性,但不能增加負載的能力。當然,高可用性叢集可以執行多種服務,並適當分配在不同節點上,比如節點A提供Oracle服務,同時節點B提供Sybase服務,這也可以看成是某種意義上的負載均衡,不過這是對多種服務的分配而言。

  負載均衡叢集適用於提供相對靜態的資料的服務,比如HTTP服務。因為通常負載均衡叢集的各節點間通常沒有共用的儲存介質,使用者資料被複製成多份,存放於每一個提供該項服務的節點上。

  下面以Turbolinux Cluster Server為例簡要介紹一下負載均衡叢集的工作機制。在叢集中有一個主控節點,稱為高階流量管理器(ATM)。假設這一叢集僅被用來提供一項HTTP服務,其餘各節點均被設定為HTTP的服務節點。使用者對於頁面的請求全部傳送到ATM上,因為ATM上繫結了這項服務對外的IP地址。ATM把接受到的請求再平均傳送到各服務節點上,服務節點接收到請求之後,直接把相應的Web頁面傳送給使用者。這樣一來,假如在1秒內有1000個HTTP頁面請求,而叢集中有10個服務節點,則每個節點將處理100個請求。這樣,在外界看來,好象有一臺10倍速度的高速計算機在處理使用者的訪問。這也就是真正意義上的負載均衡。

  但是ATM要處理所有1000個頁面請求,它會不會成為叢集處理速度的瓶頸呢?由於對於頁面的請求的資料量相對較少,返回頁面內容的資料量相對較大,因此這種方式還是很有效率的。ATM發生故障,也不會導致整個系統無法工作。Turbolinux Cluster Server可以設定一臺或多臺計算機為後備ATM節點,當主ATM節點故障時,在後備ATM中會產生出一個新的主ATM,接替它的工作。可以看出,這種負載均衡叢集也具有一定的高可用性。

  HTTP頁面相對是靜態的,但有時也需要改動。Turbolinux Cluster Server提供了資料同步工具,可以很方便的把對頁面的改動同步到所有提供該項服務的節點上。

  下面介紹一下對於高可用性叢集與負載均衡叢集的組合使用。如果使用者有一個由兩個節點組成的最小叢集,是否可以同時獲得高可用性叢集和負載均衡叢集的效益呢?答案是肯定的。由於高可用性叢集適用於提供動態資料的服務,而負載均衡叢集適用於提供靜態資料的服務,所以我們不妨假設要同時提供Oracle和HTTP服務。使用者要在節點A和B上安裝TurbolinuxTurboHA和TurbolinuxClusterServer軟體。把節點A作為Oracle正常工作的節點,節點B作為Oracle服務的後備節點,這是對TurboHA軟體而言。對於ClusterServer軟體而言,要設定節點B為主ATM節點,節點A為後備ATM節點,而節點A和節點B同時又都是HTTP的服務節點。

  這樣一來,節點A和節點B都是身兼兩職,而使用者同時得到了一個具有高可用性的Oracle服務和一個具有負載均衡功能的HTTP服務。即使有一個節點發生故障,Oracle服務和HTTP服務都不會因此而中斷。

  但對於同一種服務,是不能同時獲得高可用性與負載均衡能力的。對一種服務,要麼是隻有一份資料,放在共用儲存裝置上,一次被一個節點訪問,獲得高可用性;要麼是把資料複製為多份,儲存於每個節點的本地硬碟上,使用者的請求同時傳送到多個節點上,獲得負載均衡能力。

  對於高可用性叢集,由於它在設計時的目的就是為了最大可能地減少服務中斷時間,因此服務的切換受到很大的關注。當一個節點上的服務故障時,會被很快地檢測到並被切換到其他節點上。但在切換時,不能忽略對資料完整性的保護。

在什麼情況下資料完整性會被破壞呢?由於高可用性叢集中至少有兩個節點,連線在一個共用的儲存裝置上,對於非裸分割槽而言,如果被兩個節點同時讀寫,就會造成檔案系統被破壞。因此就需要利用I/O屏障來防止這一事件的發生。

  I/O屏障的目的是為了保證故障節點不能再繼續讀寫某一服務的共用分割槽,實現的方式有多種。Kimberlite使用硬體開關來實現,當一個節點發生故障時,另一節點如果能偵測到,就會透過序列口發出命令,控制連線在故障節點電源上的硬體開關,透過暫時斷電,而後又上電的方式使得故障節點被重啟動。

  I/O屏障有多種形式。對於支援SCSI Reserve/Release命令的儲存裝置,也可以用SG命令實現I/O屏障。正常節點應使用SCSI Reserve命令“鎖住”共用儲存裝置,保證其不被故障節點讀寫。如果故障節點上的叢集軟體仍在執行,如發現共用儲存裝置已被對方鎖住,就應把自己重啟動,以恢復正常工作狀態。

  以上介紹了Linux叢集技術的基本原理,也介紹了幾種著名的軟體。總之,Linux叢集技術最大的發揮了PC機和網路的優勢,可以帶來可觀的效能,是一種大有前途的技術。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10748419/viewspace-940043/,如需轉載,請註明出處,否則將追究法律責任。

相關文章