Windows .NET Server 2003 中的 Microsoft 羣集服務 (MSCS) 簡介

Windows .NET Server 2003 中的 Microsoft 羣集服務 (MSCS) 簡介
Mohan Rao Cavale
Microsoft Corporation
2002年11月

適用於:Microsoft® Windows® .NET Server 2003 Enterprise Edition
    Microsoft Windows .NET Server 2003 Datacenter Edition
    Microsoft 羣集服務

摘要:瞭解如何在羣集環境中對應用程序輕鬆執行性能檢查,而無需更改應用程序代碼。本文着重介紹三個支持羣集的 Microsoft 服務器技術之一:羣集服務。本文包含英文的屏幕拍圖。

目錄

簡介

在任何情況下,僅僅交付一個具有豐富功能集的高質量應用程序是不夠的,越來越多的情況下它還必須滿足高可用性條件。您是否因爲羣集技術看起來過於高深,難於理解和使用而沒有將應用程序升級?隨着 Microsoft® 羣集服務(在 Windows® NT™ 4 中引入,在 Windows .NET Server 2003、Enterprise Edition 和 Datacenter Edition 中可用)的出現,開發人員可使用一些簡單工具在羣集環境中部署應用程序。這些工具能夠將羣集中的應用程序登記爲一般應用程序,並能夠藉助 Windows 腳本控制應用程序的配置。

羣集將兩個或多個服務器連接在一起,使其對客戶端呈現爲單個計算機。將服務器連結到一個羣集中可以分擔負載、啓用單點操作/管理,併爲滿足日益增長的需求進行相應的調整提供了途徑。因此,通過羣集可以生成高可用性的應用程序。

本文着重介紹三個支持羣集的 Microsoft 服務器技術之一:羣集服務。我們將介紹如何在羣集環境中對應用程序輕鬆執行性能檢查,而無需更改應用程序代碼。

三種羣集技術

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

網絡負載平衡

網絡負載平衡充當前端羣集,用於在服務器羣集中分配傳入的 IP 流量,是爲電子商務 Web 站點實現增量可伸縮性和顯著可用性的理想選擇。可將最多 32 個 Windows .NET Enterprise Server 連結在一起共享一個虛擬 IP 地址。NLB 通過在羣集內的多個服務器之間分配客戶端請求增強了可伸縮性。隨着流量的增加,可以向羣集中添加更多的服務器,任何一個羣集最多可容納 32 個服務器。NLB 在爲用戶提供連續服務的同時還提供了高可用性,即自動檢測服務器故障,並在 10 秒鐘內在其餘服務器中重新分配客戶端流量。

組件負載平衡

組件負載平衡可以在多個運行站點業務邏輯的服務器之間分配負載。它在最多包含八個等同服務器的服務器集中提供 COM+ 組件的動態平衡。在 CLB 中,COM+ 組件位於單獨的 COM+ 羣集中的服務器上。激活 COM+ 組件的調用是平衡到 COM+ 羣集中的不同服務器的負載。CLB 通過作用於多層羣集網絡的中間層與 NLB 和羣集服務配合工作。CLB 是作爲 Application Center 2000 的功能提供的,可與 Microsoft 羣集服務在同一組計算機上運行。

羣集服務

羣集服務充當後端羣集,可爲數據庫、消息以及文件和打印服務等應用程序提供高可用性。當任一節點(羣集中的服務器)發生故障或脫機工作時,MSCS 將嘗試最大程度地減少故障對系統的影響。

圖 1:三種支持羣集的 Microsoft 服務器技術

通過 Microsoft 羣集服務實現的故障轉移功能

MSCS 故障轉移功能是通過羣集中連接的多臺計算機中的冗餘實現的,每臺計算機都具有獨立的故障狀態。冗餘要求在羣集中的多臺計算機上安裝應用程序。但是,應用程序任何時刻只在一個節點上處於聯機狀態。當該應用程序出現故障或該服務器停機時,此應用程序將在另一個節點上重新啓動。Windows .NET Server 2003 Datacenter Edition 支持在一個羣集中最多包含 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 地址、數據庫、站點、應用程序和任何其他可以聯機和脫機的實體。資源可按類型進行組織。資源類型包括物理硬件(例如磁盤驅動器)和邏輯項(例如 IP 地址、文件共享和一般應用程序)。

每個資源都使用資源 DLL,它主要是資源監視器和資源之間的被動轉換層。資源監視器調用資源 DLL的入口點函數查看資源的狀態並使資源聯機和脫機。資源 DLL 負責通過便利的 IPC 機制與其資源進行通信,以實現這些方法。

實現其自身資源 DLL 與羣集服務通信的應用程序以及使用羣集 API 請求和更新羣集信息的應用程序都被定義爲羣集相關應用程序。不使用羣集或資源 API 以及羣集控制代碼函數的應用程序和服務都不識別羣集,也無法識別羣集服務是否正在運行。這些羣集無關應用程序通常作爲一般應用程序或服務進行管理。

羣集相關和羣集無關應用程序都可以在羣集節點上運行,並且都可以作爲羣集資源進行管理。但是,只有羣集相關應用程序可以利用羣集服務通過羣集 API 提供的功能。開發羣集相關應用程序需要建立自定義資源類型。通過自定義資源類型,開發人員可以使應用程序在羣集發生各種事件(例如,節點即將脫機,因此會關閉數據庫連接)時,做出必要的響應並採取措施。

對於大多數需要在羣集中運行的應用程序,最好花費一些時間和資源開發自定義資源類型。可先在羣集環境中對應用程序進行測試,而不必修改應用程序的代碼或創建新的資源類型。在 Windows .NET Server 2003 中,未經修改的應用程序可以作爲“羣集相關”應用程序在基礎級別運行。羣集服務專爲此用途提供了一般應用程序資源類型。

羣集管理器擴展 DLL

羣集管理器擴展 DLL 在羣集管理器內提供特定於應用程序的管理功能,允許用戶以同樣的方式管理他們的應用程序,無論該應用程序是在羣集內部還是在羣集外部運行。開發人員可以在羣集管理器框架內提供應用程序管理功能,或只是鏈接到現有的管理工具。

開發人員可通過編寫擴展 DLL 擴展羣集管理器的功能。羣集管理器應用程序通過一組已定義的 COM 接口與擴展 DLL 進行通信。擴展 DLL 必須實現一組特定的接口並且在羣集的每個節點都進行註冊。

圖 3:主要組件:羣集服務、資源監視器和資源 DLL

羣集無關應用程序

不提供其自身資源 DLL 的應用程序或服務仍可以在羣集環境中進行配置。Windows .NET Server 2003 中的羣集服務包括僅用於此目的的一般資源 DLL:一般應用程序資源 DLL 和一般服務資源 DLL。羣集服務將這些應用程序或服務看作是羣集無關的一般應用程序或服務。

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

高可用性記事本

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

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

羣集管理器具有交互式嚮導,使您能夠爲列出的任何資源類型創建資源。羣集服務還提供了 COM 接口,允許以編程方式創建和管理資源。

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

羣集自動化服務器

羣集自動化服務器提供一組自動化對象,用於向腳本語言公開一個完整的羣集管理接口,使您能夠開發基於 Web 的遠程管理工具。羣集自動化服務器能夠簡化和增強創建羣集管理應用程序的進程。

羣集自動化服務器的面向對象的本質意味着幾乎所有羣集編程任務都將執行以下步驟:

  1. 確定需要執行的羣集操作。
  2. 查找具有屬性或方法的羣集自動化服務器對象以完成操作。
  3. 確定如何獲取步驟 2 中的對象。MSDN® 中提供的對象層次結構可用於此目的。
  4. 獲取對象並調用屬性或方法。

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

羣集對象

羣集對象是頂層對象,允許創建新實例。羣集對象的 ProgID 是“MSCLUSTER.CLUSTER”:

    Set oCluster = CreateObject( "MSCluster.Cluster" )

打開羣集

在使用羣集上的任何方法之前,必須先打開與該羣集的連接。Open 方法將打開與羣集的連接。將空字符串 ("") 以參數形式傳遞給 Open 方法將打開 localhost 上與羣集的連接。腳本將在 localhost 服務器上運行:

    oCluster.Open( "" )

創建一個組

羣集組是羣集資源的容器。當組中的一個資源出現故障且必須將資源轉移到其他節點時,該組中的所有資源都將被移動。組還定義了依賴關係邊界。如果資源在同一個組中,則該資源只能建立與另一個資源的依賴關係。在測試中,我們將創建一個名爲“高可用性記事本”的獨特組:

    Set oGroup = oCluster.ResourceGroups.CreateItem( "高可用性記事本" )

創建資源

每個組都包含資源集合。CreateItem 方法創建一個新資源,並將其添加至組集合中。在示例中,我們將創建一個名爲“Notepad”的資源,資源類型爲“Generic Application”:

    Set oResource = oGroupResources.CreateItem( "Notepad", "Generic 
      Application", 0 )

設置資源屬性

每個一般應用程序資源都具有兩個可使資源聯機的基本屬性:CommandLine 和 CurrentDirectory。CommandLine 包含資源聯機時要執行的命令,而 CurrentDirectory 則指定從中執行命令的文件系統目錄。當此腳本執行使資源聯機的語句時,將啓動 Notepad。要查看 Notepad,我們還必須將 InteractWithDesktop 屬性設置爲 1。

    Set oProperties = oResource.PrivateProperties

    ' 設置一般應用程序的屬性
    oProperties.Item("CommandLine") = "notepad" 
    oProperties.Item("CurrentDirectory") = "c:/"
    oProperties.Item("InteractWithDesktop") = 1

    oProperties.SaveChanges

使資源聯機

Online 方法使資源聯機。Online 是一個狀態,用於描述資源對羣集可用。對於我們的一般應用程序,使資源聯機表示啓動 Notepad。

    oResource.Online 10

完整腳本列表

Option Explicit

Main
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
  主子例程。
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
  Sub Main

    Dim oGroup
    Dim oCluster
    Dim oResource

    ' 創建 Cluster 對象。
    Set oCluster = CreateObject( "MSCluster.Cluster" )

    ' 打開羣集。空字符串表示打開本地羣集。
    oCluster.Open( "" )

    ' 創建或打開組。
    AddGroup oCluster, oGroup

    ' 創建或打開資源。
    AddResource oGroup, oResource

    ' 使資源聯機,並在 10 秒內等待
    ' 它實際恢復聯機狀態。
    oResource.Online 10

End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 此子例程將創建或打開組。
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub AddGroup( oCluster, oGroup )
    Set oGroup = oCluster.ResourceGroups.CreateItem( "高可用性記事本" )
End Sub

''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' 
  此子例程將向組添加資源。
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
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

    ' 設置一般應用程序的屬性
    oProperties.Item("CommandLine") = "notepad" 
    oProperties.Item("CurrentDirectory") = "c:/"
    oProperties.Item("InteractWithDesktop") = 1

    oProperties.SaveChanges
End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
' 等待指定的時間。
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Sub Sleep( PauseTime )
    Dim Start

    Start = Timer

    Do While Timer < Start + PauseTime
    Loop

End Sub

通過運行此簡單腳本,將創建新的“Notepad”資源,並將其放入自身的組(“高可用性記事本”)中。

驗證結果

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

圖 5:Notepad 資源參數

查看 Advanced(高級)選項卡,您將看到默認屬性,表明發生故障時應用程序至多重新啓動 3 次。LooksAlive 和 IsAlive 輪詢間隔默認爲資源類型中的值,但也可以指定其他值將其改寫。由於此應用程序沒有特殊代碼使其成爲羣集相關應用程序,因此僅通過在系統中運行的進程存在與否確定其是否處於活動狀態。

圖 6:Notepad 資源 Advanced(高級)選項卡

測試應用程序

Notepad 資源聯機後將在服務器上啓動。如果 Notepad 進程被終止,它將立即再次啓動。這是因爲羣集服務在發揮作用,試圖使應用程序保持打開和運行狀態。作爲一般應用程序資源,羣集服務能夠注意到應用程序進程何時不再運行,並根據策略採取糾正措施。

如果應用程序發生的故障不會導致進程終止(例如,網絡故障、掛起或後臺線程終止),結果會怎樣呢?遺憾的是,對於一般應用程序資源類型,您只能獲得一般故障檢測。大多數編寫在羣集環境中運行的應用程序的開發人員都傾向於生成自定義資源 DLL,來處理應用程序特定的問題。要不是作爲在羣集中評估應用程序的快捷方法,一般應用程序資源類型不會得到應用。

小結

Microsoft 羣集服務使用價格適宜的標準硬件提供高可用性,同時最大程度地利用計算資源。Windows .NET Server 2003 中的羣集服務提供了強大的工具,使您的應用程序具有較高的可用性。對於某些開發人員而言,編寫羣集相關應用程序可能要花費很大成本,且難度較大。爲了向開發人員提供使用低投入實現集羣的好處,羣集服務提供了一般應用程序資源類型,允許在羣集內對應用程序進行便捷配置。儘管一般應用程序資源類型可能不會提供生產應用程序所需的複雜性,但是它提供了一個檢查方法,可以查看應用程序在羣集內的執行情況。

發佈了66 篇原創文章 · 獲贊 0 · 訪問量 9萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章