天天看點

Microsoft 群集服務 (MSCS) 簡介

簡介

在任何情況下,僅僅傳遞一個具有豐富功能集的高品質應用程式是不夠的,在越來越多的時候,它還必須滿足高可用性标準。您是否因為群集技術看起來過于高深、難于了解和使用而沒有使應用程式再提高一個層次? 随着 Microsoft 的群集服務在 Windows NT? 4 中引入以及在 Windows Server 2003 系列中正式提供,開發人員可使用一些簡單工具在群集環境中部署應用程式。這些工具能夠将群集中的應用程式登記為一般應用程式,并且能夠通過編寫 Windows 腳本的方式來控制應用程式的配置。

群集将兩個或多個伺服器連接配接在一起,使其對用戶端呈現為單個計算機。在一個群集中連接配接伺服器可以分擔工作負載、實作單點操作/管理,并為滿足增長的需求進行相應的調整提供了一種途徑。是以,通過群集可以産生具有高可用性的應用程式。

本文着重介紹三種支援群集的 Microsoft 伺服器技術之一:群集服務。我們将說明如何在群集環境中對應用程式輕松執行性能檢查,而無需更改應用程式代碼。

三種群集技術

Microsoft 伺服器提供了三種支援群集的技術: 網絡負載平衡 (NLB)、元件負載平衡 (CLB) 和 Microsoft 群集服務 (MSCS)。

網絡負載平衡

網絡負載平衡充目前端群集,用于在整個伺服器群集中配置設定傳入的 IP 流量,是為電子商務 Web 站點實作增量可伸縮性和出色可用性的理想選擇。 最多可以将 32 個運作 Windows Server 2003 系列産品的計算機連接配接在一起共享一個虛拟 IP 位址。NLB 通過在群集内的多個伺服器之間配置設定其用戶端請求來增強可伸縮性。随着流量的增加,可以向群集添加更多的伺服器,任何一個群集最多可容納 32 個伺服器。NLB 在為使用者提供連續服務的同時還提供了高可用性,即自動檢測伺服器故障,并在 10 秒内在其餘伺服器中重新配置設定用戶端流量。

元件負載平衡

元件負載平衡可以在多個運作站點業務邏輯的伺服器之間配置設定負載。它在最多包含八個等同伺服器的伺服器群集中實作了 COM+ 元件的動态平衡。在 CLB 中,COM+ 元件位于單獨的 COM+ 群集中的伺服器上。激活 COM+ 元件的調用是平衡到 COM+ 群集中的不同伺服器的負載。CLB 通過作用于多層群集網絡的中間層與 NLB 和群集服務配合工作。 CLB 是作為 Application Center 2000 的特性提供的,可與 Microsoft 群集服務在同一組計算機上運作。

群集服務

群集服務充當後端群集,可為資料庫、消息傳遞以及檔案和列印服務等應用程式提供高可用性。當任一節點(群集中的伺服器)發生故障或脫機時,MSCS 将嘗試最大程度地減少故障對系統的影響。

 

Microsoft 群集服務 (MSCS) 簡介

圖 1. 三種支援群集的 Microsoft 伺服器技術

通過 Microsoft 群集服務實作故障轉移

MSCS 故障轉移功能是通過群集中連接配接的多個計算機中的備援實作的,每台計算機都具有獨立的故障狀态。為了實作備援,需要在群集中的多個伺服器上安裝應用程式。但在任一時刻,應用程式隻在一個節點上處于聯機狀态。當該應用程式出現故障或該伺服器停機時,此應用程式将在另一個節點上重新啟動。 Windows Server 2003 資料中心版支援在一個群集中最多包含 8 個節點。

每個節點都具有自己的記憶體、系統磁盤、作業系統和群集資源的子集。如果某一節點出現故障,另一個節點将接管故障節點的資源(此過程稱為“故障轉移”)。然後,Microsoft 群集服務将在新節點上注冊資源的網絡位址,以便将用戶端流量路由至目前擁有該資源的可用系統。當故障資源恢複聯機狀态時,MSCS 可配置為适當地重新配置設定資源和用戶端請求(此過程稱為“故障恢複”)。要使應用程式恢複到發生故障轉移時的那一點,節點必須能夠通路保持應用程式狀态的共享存儲區。

請注意,Microsoft 群集服務旨在提供高可用性,而不是真正的容錯功能。“容錯”一詞通常用于描述提供更進階别恢複功能的技術。容錯伺服器通常使用結合了特定軟體的進階硬體或資料備援,提供從單個硬體或軟體故障近乎瞬時的恢複。這類解決方案的成本遠遠高于群集解決方案,因為您必須購買備援硬體,而備援硬體隻不過閑置在那裡用于故障恢複。Microsoft 群集服務使用價格适宜的标準硬體提供出色的高可用性解決方案,同時最大程度地利用計算資源。

Microsoft 群集服務基于無共享的群集模型。無共享模型規定,雖然群集中有多個節點可以通路裝置或資源,但該資源在一個時刻隻能由一個系統占有和管理。(在 MSCS 群集中,資源是指任何可以聯機或脫機、可在群集中進行管理、一個時刻隻能以一個節點作為宿主并可以在節點之間移動的實體元件或邏輯元件。)

 

Microsoft 群集服務 (MSCS) 簡介

圖 2. Microsoft 群集服務

群集服務結構

Microsoft 群集服務由三個主要元件構成:群集服務、資源螢幕和資源 DLL。此外,還可以利用群集管理器建立提供管理功能的擴充 DLL。

群集服務

群集服務是核心元件,并作為高優先級的系統服務運作。群集服務控制群集活動并執行如下任務:協調事件通知、加速群集元件之間的通信、處理故障轉移操作和管理配置。 每個群集節點都運作自己的群集服務。

資源螢幕

資源螢幕是群集服務和群集資源之間的接口,并作為獨立程序運作。群集服務使用資源螢幕與資源 DLL 進行通信。DLL 處理所有與資源的通信,是以 DLL 以資源螢幕為宿主可以保護群集服務免受運作不正常或停止工作的資源造成的影響。資源螢幕的多個副本可以在單個節點上運作,進而可以将無法預測的資源與其他資源隔離開。

群集服務在需要對資源執行操作時,向配置設定給該資源的資源螢幕發送請求。如果資源螢幕的程序中沒有可以處理該類型資源的 DLL,則使用注冊資訊加載與該資源類型相關聯的 DLL。然後,将群集服務的請求傳遞至其中一個 DLL 的入口點函數。資源 DLL 将處理操作的細節,以滿足資源的特定需要。

資源 DLL

第三個關鍵的 Microsoft 群集服務元件是資源 DLL。資源螢幕和資源 DLL 使用資源 API 進行通信。資源 API 是用于管理資源的入口點、回調函數和相關結構及宏的集合。

對于群集服務而言,資源是任何可進行管理的實體元件或邏輯元件,例如磁盤、網絡名、IP 位址、資料庫、Web 站點、應用程式以及任何其他可以聯機和脫機的實體。資源可按類型進行組織。資源類型包括實體硬體(例如磁盤驅動器)和邏輯項(例如 IP 位址、檔案共享和一般應用程式)。

每個資源都使用資源 DLL,它主要是資源螢幕和資源之間的被動轉換層。資源螢幕調用資源 DLL 的入口點函數來檢視資源的狀态,使資源聯機和脫機。資源 DLL 負責通過任何友善的 IPC 機制與其資源進行通信,以實作這些方法。

實作其自身資源 DLL 與群集服務通信的應用程式以及使用群集 API 請求和更新群集資訊的應用程式都被定義為識别群集的應用程式。不使用群集或資源 API 以及群集控制代碼函數的應用程式和服務都不識别群集,也不知道群集服務在運作。這些不識别群集的應用程式通常作為一般應用程式或服務進行管理。

識别群集的應用程式和不識别群集的應用程式都可以在群集節點上運作,并且都可以作為群集資源進行管理。但是,隻有識别群集的應用程式可以利用群集服務通過群集 API 提供的功能。開發識别群集的應用程式需要建立自定義資源類型。通過自定義資源類型,開發人員可以使其應用程式在群集内發生各種事件(例如,節點即将脫機,是以會關閉資料庫連接配接)時,作出響應并采取必要的措施。

對于大多數需要在群集中運作的應用程式,最好投入一些時間和資源開發自定義資源類型。不過,可以先在群集環境中對應用程式進行測試,而不必修改應用程式的代碼或建立新的資源類型。在 Windows Server 2003 系列中,未經修改的應用程式可以作為“不識别群集的”應用程式以基本級别運作。群集服務專為此用途提供了一般應用程式資源類型。

群集管理器擴充 DLL

群集管理器擴充 DLL 在群集管理器内提供特定于應用程式的管理功能,允許使用者以同樣的方式管理他們的應用程式,無論該應用程式是在群集内部運作還是在群集外部運作。開發人員可以在群集管理器的架構内提供應用程式管理功能,或隻是将這些功能連結到現有的管理工具。

開發人員可以通過編寫擴充 DLL 來擴充群集管理器的功能。群集管理器應用程式通過一組已定義的 COM 接口與擴充 DLL 進行通信。擴充 DLL 必須實作一組特定的接口并且在群集的每個節點上都進行注冊。

 

Microsoft 群集服務 (MSCS) 簡介

圖 3. 關鍵元件: 群集服務、資源螢幕和資源 DLL

不識别群集的應用程式

不提供其自身資源 DLL 的應用程式或服務仍可以在群集環境中進行配置。Windows Server 2003 系列中的群集服務包括僅用于此目的的一般資源 DLL:一般應用程式資源 DLL 和一般服務資源 DLL。群集服務将這些應用程式或服務看作是不識别群集的一般應用程式或服務。

一般資源 DLL 隻提供最基本的控制。例如,一般應用程式資源 DLL 通過确定應用程式的程序是否仍然存在來檢查應用程式是否發生故障,并通過終止程序使應用程式脫機。但它并不依賴于其他資源,而是提供一個在群集環境中測試應用程式的簡單方法。

高可用性記事本

并非所有應用程式都能在群集中高效地工作。最有效的評估方式就是在群集中實際部署應用程式。執行初次測試的最簡單機制是使用内置的一般應用程式資源類型将應用程式登記到群集中。“Generic Application”(一般應用程式)資源類型作為 Windows Server 2003 系列中群集服務的一部分提供,可以通過檢視 “Cluster Administrator”(群集管理器)工具中 “Cluster Configuration”(群集配置)下的 “Resource Types”(資源類型)節點檢視該類型以及其他内置資源類型(參見圖 4)。

 

Microsoft 群集服務 (MSCS) 簡介

圖 4. 群集管理器工具中的資源類型節點

群集管理器具有互動式向導,使您能夠為列出的任何資源類型建立資源。群集服務還提供了 COM 接口,您可以用程式設計的方式建立和管理資源。

注 最新的群集管理器工具及相關的開發資源可以從 Platform SDK 獲得。

群集自動化伺服器

群集自動化伺服器提供一組自動化對象,用于向腳本語言公開一個完整的群集管理接口,使您能夠開發基于 Web 的遠端管理工具。群集自動化伺服器能夠簡化和增強建立群集管理應用程式的過程。

群集自動化伺服器的本質是面向對象的,這意味着幾乎所有群集程式設計任務都會涉及以下步驟:

确定需要執行的群集操作。

查找具有屬性或方法的群集自動化伺服器對象以完成操作。

确定如何擷取步驟 2 中的對象。MSDN? 中提供的對象層次結構可用于此目的。

擷取對象并調用屬性或方法。

為了進行說明,我們将使用 Windows Scripting Host 和 Microsoft VBScript 以程式設計方式建立一般應用程式資源。

群集對象

群集對象是頂層對象,允許建立新執行個體。群集對象的 ProgID 是 “MSCLUSTER.CLUSTER”:

Set oCluster = CreateObject( "MSCluster.Cluster" )

打開群集

在使用群集上的任何方法之前,必須先打開到該群集的連接配接。Open 方法可打開到群集的連接配接。将空字元串 ("") 作為參數傳遞給 Open 方法,即可打開到 localhost 上的群集的連接配接。腳本将在本地主機伺服器上運作:

oCluster.Open( "" )

建立組

群集組是群集資源的容器。當組中的一個資源發生故障且必須将該資源轉移到其他節點時,該組中的所有資源都将被移動。組還定義了依賴關系邊界。某個資源隻能建立與另一個資源的依賴關系,前提是,該資源在同一個組中。為了進行測試,我們将建立一個獨特的組,名為 “High Availability Notepad”(高可用性記事本):

Set oGroup = oCluster.ResourceGroups.CreateItem( "High Availability

 Notepad" )

建立資源

每個組都包含資源集合。CreateItem 方法建立一個新資源,并将其添加到組的集合中。在本示例中,我們将建立一個名為 “Notepad” 的資源,資源類型為 “Generic Application”:

Set oResource = oGroupResources.CreateItem( "Notepad", "Generic

 Application", 0 )

設定資源屬性

每個一般應用程式資源都具有兩個可使資源聯機的基本屬性: CommandLine 和 CurrentDirectory。CommandLine 包含資源聯機時要執行的指令,而 CurrentDirectory 則指定從中執行指令的檔案系統目錄。當此腳本執行語句使資源聯機時,将啟動 Notepad。要檢視 Notepad,我們還需要将 InteractWithDesktop 屬性設定為 1。

Set oProperties = oResource.PrivateProperties

' Set the properties of the Generic Application

oProperties.Item("CommandLine") = "notepad"

oProperties.Item("CurrentDirectory") = "c:/"

oProperties.Item("InteractWithDesktop") = 1

oProperties.SaveChanges

使資源聯機

Online 方法使資源聯機。Online 是一種狀态,用于描述資源對群集可用。對于一般應用程式,使資源聯機就意味着啟動 Notepad。

oResource.Online 10

完整的腳本清單

Option Explicit

Main

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 Main subroutine.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 Sub Main

Dim oGroup

Dim oCluster

Dim oResource

' Create the Cluster object.

Set oCluster = CreateObject( "MSCluster.Cluster" )

' Open the cluster. Empty string means open the local cluster.

oCluster.Open( "" )

' Create or open the group.

AddGroup oCluster, oGroup

' Create or open the resource.

AddResource oGroup, oResource

' Bring the resource online and wait for up to 10 seconds

' for it to come online.

oResource.Online 10

End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' This subroutine will create or open the group.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub AddGroup( oCluster, oGroup )

Set oGroup = oCluster.ResourceGroups.CreateItem( "High Availability

 Notepad" )

End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

 This subroutine will add the resource to the group.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub AddResource( oGroup, oResource )

Dim oGroupResources

Dim oProperties

Dim oCLProperty

Dim oCDPropery

Set oGroupResources = oGroup.Resources

Set oResource = oGroupResources.CreateItem( "Notepad", "Generic

 Application", 0 ) 'CLUSTER_RESOURCE_DEFAULT_MONITOR

Set oProperties = oResource.PrivateProperties

' Set the properties of the Generic Application

oProperties.Item("CommandLine") = "notepad"

oProperties.Item("CurrentDirectory") = "c:/"

oProperties.Item("InteractWithDesktop") = 1

oProperties.SaveChanges

End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

' Wait for a specified number of time.

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''

Sub Sleep( PauseTime )

Dim Start

Start = Timer

Do While Timer < Start + PauseTime

Loop

End Sub

通過運作這個簡單的腳本,将建立新的 “Notepad” 資源,并将其放入自身的組(“High Availability Notepad”)中。

驗證結果

我們可以使用群集管理器來驗證結果。通過檢視“群集管理器”中 Notepad 資源的屬性,可以看到已經正确設定了參數(見圖 5)。

 

Microsoft 群集服務 (MSCS) 簡介

圖 5. Notepad 資源參數

檢視 “Advanced”(進階)頁籤,您将看到預設屬性,訓示發生故障時應用程式至多重新啟動 3 次。LooksAlive 和 IsAlive 輪詢間隔預設為資源類型中的值,但也可以通過指定其他值将其改寫。由于此應用程式沒有特殊代碼使其成為識别群集的應用程式,是以僅通過在系統中運作的程序存在與否确定它是否處于活動狀态。

Microsoft 群集服務 (MSCS) 簡介

圖 6. Notepad 資源 “Advanced” 頁籤

測試應用程式

Notepad 資源聯機後将在伺服器上啟動。如果 Notepad 程序被終止,它将立即再次啟動。這是因為群集服務在發揮作用,試圖使應用程式保持打開和運作狀态。作為一般應用程式資源,無論什麼時候,隻要應用程式程序不再運作,群集服務就能夠立即注意到,并根據政策采取糾正措施。

如果應用程式發生的故障不會導緻程序終止(例如,網絡故障、挂起或背景線程終止),結果會怎樣呢?遺憾的是,對于一般應用程式資源類型,您隻能進行一般故障檢測。大多數編寫在群集環境中運作的應用程式的開發人員都傾向于生成自定義資源 DLL,來處理與應用程式有關的問題。要不是作為在群集中評估應用程式的快捷方法,一般應用程式資源類型不會得到應用。

結論

Microsoft 群集服務使用價格适宜的标準硬體提供高可用性,同時最大程度地利用計算資源。Windows Server 2003 系列中的群集服務提供了強大的工具,使您的應用程式具有較高的可用性。對于某些開發人員而言,編寫識别群集的應用程式可能要付出很大的代價,且難度較大。為了使開發人員能夠以較低的投入來使用叢集,群集服務提供了一般應用程式資源類型,允許在群集内對應用程式進行簡單配置。雖然一般應用程式資源類型可能不會提供生産型應用程式所需的複雜性,但它提供了一種測試方法,可以檢視應用程式在群集内的執行情況。

繼續閱讀