標籤:
什麼是looksalive check和is alive check
SQL Server容錯移轉叢集是建立在windows叢集服務上的一種熱備的高可用方案。在叢集運行過程中,windows叢集服務定期檢測節點的資源健康狀態,如果發生了故障,會根據預先定義的容錯移轉策略把SQL Server服務從故障節點切換到可用節點上,從而實現SQL Server的高可用。
而looksalive和isalive就是windows叢集服務定期檢測節點的資源健康情況的兩個方法,它們存在於 resource dll中。
根據資源類型不同,resource dll可分為兩個大類。對於叢集IP、DNS名稱、服務服務(SQL Server)、叢集磁碟等windows內建的資源類型,resource dll就是windows叢集內建的Resource DLL——“clusres.dll”中;而對那些自己的專屬資源類型的資源,他們有專屬的resource dll,如SQL Server和sql server agent的resource dll分別為sqlrvres.dll和sqlatres.dll。
顯示了叢集裡資源的類型及資源DLL與資源的關係:
原圖來自《SQL Server 2012實施與管理實戰指南》
looksalive check和is alive check檢測原理
RHS.exe的進程(windows叢集服務進程clussvc.exe產生的)通過調用定義了looksalive check和is alive check方法 resource dll來實現對資源的健康狀態檢測。
在SQL Server容錯移轉叢集中,對於SQL Server資源,looksalive check和is alive check檢測的原理如下:
looksalive是基本的健康狀態檢測,它通過服務控制管理員(SCM)來檢查SQL Server服務在活躍點是否處於“啟動狀態”,預設每隔5秒檢查一次。
isalive則通過windows叢集服務去執行select @@servername(SQL Server 2012之前的版本)或sp_server_diagnostics(SQL Server 2012),然後根據返回的結果來判斷SQL Server是否可用。它預設每隔60秒檢查一次。
select @@servername是SQL Server 2012之前的版本執行isalive方法的操作。執行的結果返回給容錯移轉叢集,如果容錯移轉叢集收到返回的結果,則說明此資源目前在正常狀態。反之,則說明此資源目前已經發生故障。
這種方法簡單、“粗暴”,能夠適應大多數情境,但如果此時SQL Server負載比較高,沒有在60秒內響應,則可能發生誤判,導致容錯移轉發生。為瞭解決這個問題,在SQL Server 2012及以後的版本上,微軟改進了isalive檢查方法,不再使用select @@servername,取而代之的是使用預存程序sp_server_diagnostics。
相比select @@servername而言,sp_server_diagnostics返回的結果要詳細得多(如)。SQL Server會利用內部演算法來處理sp_server_diagnostics的結果,然後從多個維度來評估SQL Server的健康情況(系統、資源、查詢、IO等),從而作為windows容錯移轉叢集判斷是否需要進行容錯移轉的依據。除此之外,SQL Server 2012還做了特別的最佳化:
執行sp_server_diagnostics的線程使用搶佔模式,且線程的OS優先順序也高於普通線程;
sp_server_diagnostics每隔20秒執行一次,預設情況下如果3次(60秒)執行的結果都顯示SQL Server資源處於故障狀態,才發生容錯移轉
說明:之所以是60秒,是因為“資源屬性”的HealthCheckTimeout預設為60秒,可以人為改變大小,但一般保持預設即可。
配置looksalive check和isalive check
looksalive和isalive檢測的間隔時間可以在“資源屬性”的“進階策略”裡面設定,一般採用預設即可,如需更改,可參考的位置設定。
SQL Server 2012容錯移轉的looksalive check和is alive check