什麼是looksalive check和is alive check SQL Server故障轉移集群是建立在windows集群服務上的一種熱備的高可用方案。在集群運行過程中,windows集群服務定期檢測節點的資源健康狀態,如果發生了故障,會根據預先定義的故障轉移策略把SQL Server服務從....
什麼是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檢測的間隔時間可以在“資源屬性”的“高級策略”裡面設置,一般採用預設即可,如需更改,可參考下圖的位置設置。