天天看點

WSFC 服務啟動開關詳解

  clussvc是Windows故障轉移群集的托管系統服務,運作于每個群集節點,是WSFC的主服務,負責群集元件之間的通信,處理故障轉移操作和管理配置等任務,clussvc也和群集其它元件,如RHS,NetFT元件相協同,節點的硬體,群內建員資格,心跳檢測結果,第三方軟體幹擾,将決定節點的群集服務能否正常啟動

   如下圖所示為clussvc主服務包括的元件,可以看到幾乎所有的群集元件都寄生于clussvc下面,是以clussvc的服務啟停至關重要,一旦clussvc服務停止,則該節點将無法使用群集功能,如果群集所有節點clussvc服務關閉,則群集将停止對外服務。

下圖為Clussvc在群集架構中扮演的位置,可以看到,clussvc負責接收API傳來的操作,再将使用者的請求傳給其它群集元件進行工作,同時也負責群集内部元件的協同通信,RHS和CPrepSrv的檢測也将回報給Clussvc

由于clussvc作為群集的托管主服務,是以它比較特殊,不同的場景會需要不同的啟動開關,啟動指令如下 net start clussvc /啟動參數

從2000到2003時代,clussvc群集服務的啟動參數如下

Fixquorum:适用于2000與2003時代,該開關主要适用于處理,因為仲裁裝置而導緻群集服務無法啟動的場景,例如被挂載的群集見證磁盤不穩定,經常出現脫機情況,使用fixquorum參數啟動後可以讓群集服務啟動,但是不聯機群集仲裁裝置,僅聯機群集IP和群集名稱,同時關閉日志記錄存儲到仲裁裝置功能,通過該模式啟動後,群集應用資源和仲裁資源将被脫機,管理者可以手動聯機仲裁資源以觀察日志進行診斷

該啟動參數最好用于群集隻剩下一個節點的場景,通過該參數啟動後,将在該節點挂載群集資料庫,群集IP,群集名稱,便于排錯,如果群集其它節點正在運作,建議排除仲裁裝置問題前,為其它節點停止群集服務,以防止搶奪群集IP,群集名稱。

排除問題後重新以正常開關net start clussvc啟動節點

NoQuorumLogging :透過該參數啟動後群集将關閉日志記錄存儲到仲裁裝置功能,用于診斷仲裁裝置中的仲裁日志和檢查點問題,通常情況下,該開關僅在一個節點上使用,主要用于2003時代當仲裁裝置日志檔案或檢查點檔案損壞,并且您想手動将這些檔案替換為備份副本時使用。

需要注意,通過該參數啟動群集有可能引發時間分區問題,通過NoQuorumlogging啟動的節點最好不要修改群集資訊

在2008之前,群集隻有“仲裁裝置”會儲存一份群集資料庫的最新副本,各個節點都需要和仲裁盤進行同步,由仲裁盤複制群集資料庫到各節點,各節點在關機重新開機後也必須連接配接到仲裁盤同步下載下傳群集資料庫,如果仲裁盤出現故障,則群集将無法啟動,是以在2008之前,仲裁磁盤成為了單一故障點,2008開始,群集引入了paxos标記的機制,每個節點本身都可以儲存群集資料庫最新副本,如果仲裁裝置出現問題,最快的解決辦法,新加入一個仲裁磁盤,把舊的替換掉,仲裁磁盤檢測到群集節點的資料庫paxos标記比較新,會自動同步新的群集資料庫過來。

Debug:在2003時代群集日志僅包含群集服務啟動後的群集日志,而不包含群集服務啟動過程的日志,是以,如果要排除群集服務啟動過程的故障,需要使用debug開關執行操作,切換到C:\System32\Cluster 目錄下,使用指令提示符執行clussvc /debug > c:\clusdebug.txt,則可以将群集服務以debug的用途啟動,并将捕捉整個啟動過程資訊至日志,主要用于2003時代,因為群集啟動賬号或系統配置而導緻群集服務無法啟動問題,2008之後群集服務啟動日志可在clusterlog看到

Debug參數也支援設定啟動診斷日志級别,方法如下:clussvc / debug loglevel = 3> c:\debug.log

level 0 不記錄

level 1 隻記錄錯誤

level 2 記錄錯誤和警告

level3  記錄所有事件,包括未寫入事件日志的事件

DebugResMon : 用于調試資源螢幕程序,并是以調試由資源螢幕加載的資源動态連結庫(DLL),開發人員可以使用此開關來調試資源螢幕程序及其自定義資源DLL,在資源螢幕程序啟動之前,群集服務程序等待,并等待消息“等待調試器連接配接到resmon程序X”,其中X是資源螢幕程序的程序ID(PID).群集服務會執行此操作,以等待由其建立的所有資源螢幕程序。在使用者将調試器附加到資源螢幕程序并且資源螢幕程序啟動後,群集服務将繼續其初始化。

用法:Clussvc /debug /debugresmon

ResetQuorumLog : 用于2000及2003時代,如果仲裁日志和檢查點檔案未找到或已損壞,則可用于根據本地節點的%SystemRoot%\ Cluster \ CLUSDB系統資料庫配置單元中的資訊來建立檔案,适用于仲裁磁盤仲裁日志,出現損壞的場景,即使用各節點本地檔案系統資料庫建立仲裁日志和檢查點檔案,而後使用fixquorum方式啟動群集,替換仲裁磁盤。

用法:net start clussvc / resetquorumlog,執行該指令後,MSCS會自動檢測仲裁日志損壞,自動使用節點本地系統資料庫配置單元重新生成仲裁日志

ResetQuorumLog 與 NoQuorumLogging 不同适用場景

NoQuorumLogging:有仲裁裝置備份,暫時停掉寫入,然後把已備份的恢複覆寫

ResetQuorumLog:  沒有仲裁裝置備份,利用各節點本地系統資料庫重建仲裁日志

兩種參數啟動群集服務後,都需使用net start clussvc再正常啟動一次。

NoRepEvtLogging :适用于2000與2003 ,在2000和2003時代cluster log是群集服務實時産生的,此參數可以防止事件日志的複制,如果有大量事件日志條目,則群集服務将複制這些條目,并将它們記錄到cluster.log。這可能會導緻cluster.log快速換行。通過該參數可以阻止節點的cluster log被複制到其它節點,減少網絡通信帶寬,并且可以把該節點未重新整理到cluster log 的日志轉移至本地log中

net start clussvc /norepevtlogging  阻止該節點的事件日志複制到其它節點,但可以正常接收其它節點的資訊

clussvc /debug /norepevtlogging > c:\debugnorep.log  将該節點群集服務還未重新整理至cluster log的日志轉移至本地log

ForceQuorum:最廣為大家熟悉的群集啟動參數,在2003時代引入,2003時代該參數縮寫為FO,FQ是fixquorum,2003時代的forcequorum,主要起到讓少數分區提供服務的作用,和2008時代的forcequorum有一些差別,例如2003時代北京站點4節點,上海站點3節點,兩站點間發生分區,但是北京已知無法對外提供服務,是以需強制啟動上海站點,但起點過程需指定上海站點節點名稱,如net start clussvc / forcequorum / forcequorum node5,node6,node7,使用該指令起點後,上海站點将重新啟動一個群集,這個群集的可用所有者清單隻有 5 6 7 節點。啟動上海站點後應手動停止北京各節點群集服務,防止搶奪資源,當分區恢複時重新正常啟動群集服務

在2008時代WSFC引入了幾個新的參數, PreventQuorum,IgnorePersistentState,以及發生變化的ForceQuorum

正如老王在前面文章可以大家提到過的,ForceQuorum在2008時代發生了變化,引入了paxos标記機制,和之前的作用一樣,幫助群集節點在少數節點的情況下也能強制啟動提供服務,但是卻比之前版本友善了許多,在2008中,我們隻需要在少數節點其中一個節點執行net start clussvc /FQ 即可,2008開始FQ縮寫開始指forcequorum,被執行FQ的節點自身的群集資料庫會被提升為黃金副本,之後其它所有節點如果希望參與群集,都必須和FQ節點同步群集資料庫後,才可以正常參與進群集,在2008時代,如果少數方執行FQ強制仲裁後,需要到多數方執行PQ,阻止多數方形成群集,日後分區解除,多數方将自動與FQ方同步最新群集資料庫

IPS參數于2008R2引入,ForceQuorum為2008起發生改變,PQ為2008R2引入,2008可通過hotfix獲得

IPS開關是一個有意思的參數,類似于2000時代的Fixquorum,不同的是fixquorum僅聯機群集IP和群集名稱,其它資源一律不聯機,而IgnorePersistentState參數可以幫助我們聯機群集IP,群集名稱,仲裁磁盤,這些所有核心組元件,而不聯機任何基于群集的應用,可以幫助管理者先恢複群集正常服務,再排查基于群集的應用問題

在正常情況下,群集服務啟動時,預設行為是将所有資源聯機。IPS開關所做的是忽略目前的資源PersistentState值,并将所有内容保持為離線狀态

使用該參數後群集整體處于聯機狀态,可以對外提供服務,此開關隻會影響群集中的服務和應用程式組

該參數要求群集符合法定人數要求下才可以使用

适用場景

1.群集各節點資源負載飽滿,導緻啟動時群集節點崩潰,可以使用/IPS模式啟動群集,先聯機一部分群集應用,進行排錯,排錯完成後,再聯機其它群集應用。

2.基于群集的第三方應用導緻群集僞挂起,使用IPS參數啟動群集後正常啟動群集,檢查應用問題,修複後再聯機應用。

用法:net start clussvc /ips 或 net start clussvc /ips /fq ,如果在不符合法定仲裁人數運作需添加fq參數

2012開始,阻止仲裁技術發生了改變,多數節點一方檢測到少數節點一方存在強制仲裁會自動執行阻止仲裁操作,即確定承認強制仲裁一方為群集,與其群集資料庫同步至最新後,才會啟動自身群集服務,在之前2008時代,如果遇到強制仲裁的場景下,大多數時間都需要手動去執行阻止仲裁,否則會出現群集資料庫覆寫等情況,到了2012則會自動幫助我們做這件事。

2016 WSFC開始向最新的技術看齊整合了,存儲副本,超融合技術,可以和Azure相配合,實作WSFC on Azure,Azure witness,除了這些還改變了群集預設的檢測機制,新導入了瞬斷機制,防止由于瞬時中斷而導緻群集應用故障轉移,可以設定在指定時間内群集的故障不需要執行故障轉移,如果某時間内發生了某次數的瞬時中斷,則判定節點為檢疫隔離狀态,節點處在檢疫狀态下的時間,預設為7200秒,在這段時間,節點将不承載應用,所有虛拟機被實時遷移走,其它群集資源被移動走,如果節點提前恢複可使用 net start clussvc /CQ 或 Start-ClusterNode -CQ ,執行ClearQuarantine操作,把節點手動恢複正常。

總結到最新2016還剩下的clussvc啟動參數:FQ,PQ,IPS,CQ

本文轉自 老收藏家 51CTO部落格,原文連結:http://blog.51cto.com/wzde2012/2082650