您好,登錄后才能下訂單哦!
通過測試SQL Server數據庫數據和日志驅動器增強AlwaysOn故障轉移策略
譯者注:
該腳本適合在SQL Server 2012\2014中配置為自動故障轉移的副本中部署。
前言
在SQL Server 2012和2014,在自動故障轉移模式的AlwaysOn可用性組不會在數據庫級別錯誤觸發故障轉移。例如:如果用戶數據庫的數據或日志文件失敗,或者用戶數據庫損壞并導致狀態從在線變為其他狀態(如置疑),數據庫群集不會自動故障轉移可用性組。
在SQL Server 2016,我們在創建和修改可用性組命令的部分添加了一個額外的配置設置叫做DB_FAILOVER,如果在主副本的一個數據處于非在線狀態將觸發故障轉移。意思是,如果AG配置為自動故障轉移,并且處于同步狀態的數據庫遇到失敗,數據庫級別的錯誤將會觸發自動故障轉移。
添加這個腳本的方法,使你你可以再遇到磁盤故障時讓群集執行自動故障轉移。該VB腳本在腳本中指定的路徑執行文件寫入。如果寫入失敗,意味著磁盤失敗并且腳本失敗。失敗的腳本導致群集中的腳本資源失敗。如果在腳本資源上的依賴恰當配置,這將導致由于磁盤/VB腳本失敗的群集觸發故障轉移。
因為這個腳本不需要連接或以任何方式利用SQL Server,你可以針對SQL Server 2012\2014\2016部署。但在2016中的收益不如配置啟用參數DB_FAILOVER,因為一個數據庫級別的失敗導致自動故障轉移。
翻譯自:
https://blogs.msdn.microsoft.com/alwaysonpro/2016/01/14/enhance-alwayson-failover-policy-to-test-sql-server-database-data-and-log-drives/
在SQL Server 2012和2014,AlwaysOn健康診斷以多種方式檢測SQL Server進程的健康。然而,沒有在AlwaysOn可用性組上的數據庫的可訪問性或存活性的健康檢測。如果承載可用性組數據庫或日志文件的磁盤丟失,AlwaysOn健康診斷不會檢測該事件,并且應用程序運行時錯誤訪問數據庫失敗。丟失驅動器或訪問承載可用性數據庫數據和日志文件的驅動器錯誤,會影響訪問你的生產數據的訪問。
正如可用性組的自動故障轉移的彈性故障轉移策略所描述:
“損壞的數據庫和置疑的數據庫不會在任何失敗條件級別上檢測。因此,一個數據庫損壞或置疑(是否由于硬件失敗、數據故障或其他問題)絕不會觸發自動故障轉移。”
注意:SQL Server 2016增強數據庫健康檢測的AlwaysOn健康診斷。如果你的AlwaysOn可用性組開啟數據庫健康檢測,并且數據庫狀態轉化為非ONLINE狀態(sys.databases.state_desc),整個可用性組將自動故障轉移。可參考MSDN關于“CREATE AVAILABILITY GROUP”的“DB_FAILOVER”部分。
你可以通過檢測磁盤健康來增強數據庫的可用性。添加一個普通的腳本資源到你的可用性組資源組,做基本的針對承載可用性組數據庫數據和日志文件的驅動器的讀或寫測試。以下描述如何添加一個普通腳本資源作為一個可用性組資源的依賴,通過甲苯的磁盤健康檢查來增強AlwaysOn健康檢測。
使用一個普通腳本資源來做基本的SQL Server數據和日志驅動器健康檢查
這是一個高級別的描述關于部署普通的腳本資源來檢測可用性組數據庫驅動器健康。
添加一個普通的腳本集群資源到可用性組資源組。讓可用性組資源依賴于普通資源腳本。這樣,如果腳本資源報告IsAlive失敗,Windows群集會嘗試重啟或者故障轉移可用性組資源。
普通腳本集群資源IsAlive測試在特定的數據驅動器位置創建一個文本文件、在特定的日志驅動器位置創建一個文本文件。如果文件存在,腳本將會覆蓋它。
該腳本打包為GenericScript_SQLIsAlive.zip,包括:
Sqlisalive.vbs
這個普通的腳本用Visual Basic腳本編寫,并部署Windows群集IsAlive。
Add_SQLIsAliveScript.ps1
這個PowerShell腳本添加普通腳本資源到你的可用性組資源組,并設置可用組依賴于你的普通腳本資源。
Readme.txt
部署普通腳本資源的按步驟的指南,和如何測試腳本的額外指南。
部署普通腳本資源
I. 配置普通腳本sqlisalive.vbs。
數據和日志驅動器路徑:
當前,普通腳本配置為測試一下驅動器和路徑:c:\temp\data和c:\temp\log。對于測試目的,在每個副本的本地驅動器上創建這些路徑(主副本和自動故障轉移伙伴輔助副本)。之后,你可以修改它們為適當的你的數據庫數據和日志文件位于的驅動器和路徑。
DataDriveFile=”c:\temp\data\ScriptFileData.txt”
LogDriveFile=”c:\temp\log\ScriptFileLog.txt”
II. 配置和執行PowerShell腳本來部署普通腳本到你的可用性組。
注意:這個普通腳本只部署每60秒運行的IsAlive。
1. 確保你的可用性組有兩個副本配置為自動故障轉移。
2. 拷貝普通腳本文件到相同的本地存儲路徑,像配置為自動故障轉移的副本的所有服務器的“C:\temp\sqlisalive.vbs”。
3. 創建用于健康檢查的路徑,C:\temp\data和C:\temp\log。
4. Add_SQLIsAliveScript.ps1腳本添加普通腳本資源到你的可用性組,并在普通腳本資源上添加一個依賴到你的可用性組資源。在Add_SQLIsAliveScript.ps1,修改如下變量:
設置$ag為你的可用性組名稱。
設置$listener為你的可用性組監聽器名稱。如果你的可用性組沒有監聽器,設置$listener為””。
設置$scriptfilepath為你的sqlisalive.vbs腳本的路徑和文件名。
5. 在承載主副本的服務器上,運行PowerShell腳本Add_SQLIsAliveScript.ps1去添加普通腳本資源到你的可用性組資源組。
6. 打開故障轉移群集管理器,并檢查可用性組資源組來確認添加了普通腳本資源到可用性組資源組。普通腳本應該出現在資源頁面,并在可用性組資源組為在線狀態。
7. 確認可用性組資源中在普通腳本資源上創建了依賴。
注意:
額外的readme.txt包含如何測試腳本資源來確認它可以故障轉移到你的可用性組資源的指南。
通過普通腳本資源診斷失敗檢測
對承載主副本的節點生成群集日志,并搜索“Data Drive Create File”或“Log Drive Create File”,以定位普通腳本資源IsAlive成功或失敗的報告:
00001b04.00002924::2015/12/07-17:16:41.798 INFO [RES] Generic Script <sqlisalive>: Entering IsAlive
00001b04.00002924::2015/12/07-17:16:41.801 INFO [RES] Generic Script <sqlisalive>: Data Drive Create File Succeeded
00001b04.00002924::2015/12/07-17:16:41.801 INFO [RES] Generic Script <sqlisalive>: Log Drive Create File Succeeded
或者例如,你設置\Data目錄為只讀:
00001b04.00002924::2015/12/07-17:17:41.801 INFO [RES] Generic Script <sqlisalive>: Entering IsAlive
00001b04.00002924::2015/12/07-17:17:41.804 INFO [RES] Generic Script <sqlisalive>: Data Drive Create File Succeeded
00001b04.00002924::2015/12/07-17:17:41.804 INFO [RES] Generic Script <sqlisalive>: Data Drive Create File Failed
00001b04.00002924::2015/12/07-17:17:41.804 INFO [RES] Generic Script <sqlisalive>: Permission denied
00001b04.00002924::2015/12/07-17:17:41.804 ERR [RES] Generic Script <sqlisalive>: 'IsAlive' script entry point returned FALSE.'
00001b04.00002924::2015/12/07-17:17:41.804 INFO [RES] Generic Script <sqlisalive>: Return value of 'IsAlive' script entry point caused HRESULT to be set to 0x00000001.
00001b04.00002298::2015/12/07-17:17:41.804 WARN [RHS] Resource sqlisalive IsAlive has indicated failure.
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。