Windows Server 2003 系列中的 Microsoft 叢集服務 (MSCS) 簡介

來源:互聯網
上載者:User

簡介

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

群集將兩個或多個伺服器串連在一起,使其對用戶端轉譯為單個電腦。在一個群集中串連伺服器可以分擔工作負載、實現單點操作/管理,並為滿足增長的需求進行相應的調整提供了一種途徑。因此,通過群集可以產生具有高可用性的應用程式。

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

三種群集技術

Microsoft 伺服器提供了三種支援群集的技術: 網路Server Load Balancer (NLB)、組件Server Load Balancer (CLB) 和 Microsoft 叢集服務 (MSCS)。

網路Server Load Balancer

網路Server Load Balancer充當前端群集,用於在整個伺服器叢集中分配傳入的 IP 流量,是為電子商務 Web 網站實現增量延展性和出色可用性的理想選擇。 最多可以將 32 個運行 Windows Server 2003 系列產品的電腦串連在一起共用一個虛擬 IP 位址。NLB 通過在群集內的多個伺服器之間分配其用戶端請求來增強延展性。隨著流量的增加,可以向群集添加更多的伺服器,任何一個群集最多可容納 32 個伺服器。NLB 在為使用者提供連續服務的同時還提供了高可用性,即自動偵測伺服器故障,並在 10 秒內在其餘伺服器中重新分配用戶端流量。

組件Server Load Balancer

組件Server Load Balancer可以在多個運行網站商務邏輯的伺服器之間分配負載。它在最多包含八個等同伺服器的伺服器叢集中實現了 COM+ 組件的動態平衡。在 CLB 中,COM+ 組件位於單獨的 COM+ 群集中的伺服器上。啟用 COM+ 組件的調用是平衡到 COM+ 群集中的不同伺服器的負載。CLB 通過作用於多層叢集網路的中介層與 NLB 和叢集服務配合工作。 CLB 是作為 Application Center 2000 的特性提供的,可與 Microsoft 叢集服務在同一組電腦上運行。

叢集服務

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

圖 1. 三種支援群集的 Microsoft 伺服器技術
通過 Microsoft 叢集服務實現容錯移轉

MSCS 容錯移轉功能是通過群集中串連的多個電腦中的冗餘實現的,每台電腦都具有獨立的故障狀態。為了實現冗餘,需要在群集中的多個伺服器上安裝應用程式。但在任一時刻,應用程式只在一個節點上處於聯機狀態。當該應用程式出現故障或該伺服器停機時,此應用程式將在另一個節點上重新啟動。 Windows Server 2003 資料中心版支援在一個群集中最多包含 8 個節點。

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

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

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 必須實現一組特定的介面並且在群集的每個節點上都進行註冊。

圖 3. 關鍵組件: 叢集服務、資源監視器和資源 DLL
不識別群集的應用程式

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

一般資源 DLL 只提供最基本的控制。例如,一般應用程式資源 DLL 通過確定應用程式的進程是否仍然存在來檢查應用程式是否發生故障,並通過終止進程使應用程式離線工作。但它並不依賴於其他資源,而是提供一個在群集環境中測試應用程式的簡單方法。
高可用性記事本

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

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

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

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

群集Automation 伺服程式

群集Automation 伺服程式提供一組Automation 物件,用於向指令碼語言公開一個完整的群集管理介面,使您能夠開發基於 Web 的遠端管理工具。群集Automation 伺服程式能夠簡化和增強建立群集管理應用程式的過程。

群集Automation 伺服程式的本質是物件導向的,這意味著幾乎所有群集編程任務都會涉及以下步驟:

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

尋找具有屬性或方法的群集Automation 伺服程式對象以完成操作。

確定如何擷取步驟 2 中的對象。MSDN® 中提供的對象階層可用於此目的。

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

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

群集對象

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

    Set oCluster = CreateObject( "MSCluster.Cluster" )

開啟群集

在使用群集上的任何方法之前,必須先開啟到該群集的串連。Open 方法可開啟到群集的串連。將Null 字元串 ("") 作為參數傳遞給 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 ExplicitMain''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''   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 10End 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.SaveChangesEnd Sub'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' Wait for a specified number of time.'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''Sub Sleep( PauseTime )    Dim Start    Start = Timer    Do While Timer < Start + PauseTime    LoopEnd Sub

通過運行這個簡單的指令碼,將建立新的 “Notepad” 資源,並將其放入自身的組(“High Availability Notepad”)中。

驗證結果

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

圖 5. Notepad 資源參數

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.