您好,登錄后才能下訂單哦!
通過測試SQL Server數(shù)據(jù)庫數(shù)據(jù)和日志驅(qū)動器增強AlwaysOn故障轉(zhuǎn)移策略
譯者注:
該腳本適合在SQL Server 2012\2014中配置為自動故障轉(zhuǎn)移的副本中部署。
前言
在SQL Server 2012和2014,在自動故障轉(zhuǎn)移模式的AlwaysOn可用性組不會在數(shù)據(jù)庫級別錯誤觸發(fā)故障轉(zhuǎn)移。例如:如果用戶數(shù)據(jù)庫的數(shù)據(jù)或日志文件失敗,或者用戶數(shù)據(jù)庫損壞并導致狀態(tài)從在線變?yōu)槠渌麪顟B(tài)(如置疑),數(shù)據(jù)庫群集不會自動故障轉(zhuǎn)移可用性組。
在SQL Server 2016,我們在創(chuàng)建和修改可用性組命令的部分添加了一個額外的配置設(shè)置叫做DB_FAILOVER,如果在主副本的一個數(shù)據(jù)處于非在線狀態(tài)將觸發(fā)故障轉(zhuǎn)移。意思是,如果AG配置為自動故障轉(zhuǎn)移,并且處于同步狀態(tài)的數(shù)據(jù)庫遇到失敗,數(shù)據(jù)庫級別的錯誤將會觸發(fā)自動故障轉(zhuǎn)移。
添加這個腳本的方法,使你你可以再遇到磁盤故障時讓群集執(zhí)行自動故障轉(zhuǎn)移。該VB腳本在腳本中指定的路徑執(zhí)行文件寫入。如果寫入失敗,意味著磁盤失敗并且腳本失敗。失敗的腳本導致群集中的腳本資源失敗。如果在腳本資源上的依賴恰當配置,這將導致由于磁盤/VB腳本失敗的群集觸發(fā)故障轉(zhuǎn)移。
因為這個腳本不需要連接或以任何方式利用SQL Server,你可以針對SQL Server 2012\2014\2016部署。但在2016中的收益不如配置啟用參數(shù)DB_FAILOVER,因為一個數(shù)據(jù)庫級別的失敗導致自動故障轉(zhuǎn)移。
翻譯自:
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可用性組上的數(shù)據(jù)庫的可訪問性或存活性的健康檢測。如果承載可用性組數(shù)據(jù)庫或日志文件的磁盤丟失,AlwaysOn健康診斷不會檢測該事件,并且應用程序運行時錯誤訪問數(shù)據(jù)庫失敗。丟失驅(qū)動器或訪問承載可用性數(shù)據(jù)庫數(shù)據(jù)和日志文件的驅(qū)動器錯誤,會影響訪問你的生產(chǎn)數(shù)據(jù)的訪問。
正如可用性組的自動故障轉(zhuǎn)移的彈性故障轉(zhuǎn)移策略所描述:
“損壞的數(shù)據(jù)庫和置疑的數(shù)據(jù)庫不會在任何失敗條件級別上檢測。因此,一個數(shù)據(jù)庫損壞或置疑(是否由于硬件失敗、數(shù)據(jù)故障或其他問題)絕不會觸發(fā)自動故障轉(zhuǎn)移。”
注意:SQL Server 2016增強數(shù)據(jù)庫健康檢測的AlwaysOn健康診斷。如果你的AlwaysOn可用性組開啟數(shù)據(jù)庫健康檢測,并且數(shù)據(jù)庫狀態(tài)轉(zhuǎn)化為非ONLINE狀態(tài)(sys.databases.state_desc),整個可用性組將自動故障轉(zhuǎn)移??蓞⒖糓SDN關(guān)于“CREATE AVAILABILITY GROUP”的“DB_FAILOVER”部分。
你可以通過檢測磁盤健康來增強數(shù)據(jù)庫的可用性。添加一個普通的腳本資源到你的可用性組資源組,做基本的針對承載可用性組數(shù)據(jù)庫數(shù)據(jù)和日志文件的驅(qū)動器的讀或?qū)憸y試。以下描述如何添加一個普通腳本資源作為一個可用性組資源的依賴,通過甲苯的磁盤健康檢查來增強AlwaysOn健康檢測。
使用一個普通腳本資源來做基本的SQL Server數(shù)據(jù)和日志驅(qū)動器健康檢查
這是一個高級別的描述關(guān)于部署普通的腳本資源來檢測可用性組數(shù)據(jù)庫驅(qū)動器健康。
添加一個普通的腳本集群資源到可用性組資源組。讓可用性組資源依賴于普通資源腳本。這樣,如果腳本資源報告IsAlive失敗,Windows群集會嘗試重啟或者故障轉(zhuǎn)移可用性組資源。
普通腳本集群資源IsAlive測試在特定的數(shù)據(jù)驅(qū)動器位置創(chuàng)建一個文本文件、在特定的日志驅(qū)動器位置創(chuàng)建一個文本文件。如果文件存在,腳本將會覆蓋它。
該腳本打包為GenericScript_SQLIsAlive.zip,包括:
Sqlisalive.vbs
這個普通的腳本用Visual Basic腳本編寫,并部署Windows群集IsAlive。
Add_SQLIsAliveScript.ps1
這個PowerShell腳本添加普通腳本資源到你的可用性組資源組,并設(shè)置可用組依賴于你的普通腳本資源。
Readme.txt
部署普通腳本資源的按步驟的指南,和如何測試腳本的額外指南。
部署普通腳本資源
I. 配置普通腳本sqlisalive.vbs。
數(shù)據(jù)和日志驅(qū)動器路徑:
當前,普通腳本配置為測試一下驅(qū)動器和路徑:c:\temp\data和c:\temp\log。對于測試目的,在每個副本的本地驅(qū)動器上創(chuàng)建這些路徑(主副本和自動故障轉(zhuǎn)移伙伴輔助副本)。之后,你可以修改它們?yōu)檫m當?shù)哪愕臄?shù)據(jù)庫數(shù)據(jù)和日志文件位于的驅(qū)動器和路徑。
DataDriveFile=”c:\temp\data\ScriptFileData.txt”
LogDriveFile=”c:\temp\log\ScriptFileLog.txt”
II. 配置和執(zhí)行PowerShell腳本來部署普通腳本到你的可用性組。
注意:這個普通腳本只部署每60秒運行的IsAlive。
1. 確保你的可用性組有兩個副本配置為自動故障轉(zhuǎn)移。
2. 拷貝普通腳本文件到相同的本地存儲路徑,像配置為自動故障轉(zhuǎn)移的副本的所有服務(wù)器的“C:\temp\sqlisalive.vbs”。
3. 創(chuàng)建用于健康檢查的路徑,C:\temp\data和C:\temp\log。
4. Add_SQLIsAliveScript.ps1腳本添加普通腳本資源到你的可用性組,并在普通腳本資源上添加一個依賴到你的可用性組資源。在Add_SQLIsAliveScript.ps1,修改如下變量:
設(shè)置$ag為你的可用性組名稱。
設(shè)置$listener為你的可用性組監(jiān)聽器名稱。如果你的可用性組沒有監(jiān)聽器,設(shè)置$listener為””。
設(shè)置$scriptfilepath為你的sqlisalive.vbs腳本的路徑和文件名。
5. 在承載主副本的服務(wù)器上,運行PowerShell腳本Add_SQLIsAliveScript.ps1去添加普通腳本資源到你的可用性組資源組。
6. 打開故障轉(zhuǎn)移群集管理器,并檢查可用性組資源組來確認添加了普通腳本資源到可用性組資源組。普通腳本應該出現(xiàn)在資源頁面,并在可用性組資源組為在線狀態(tài)。
7. 確認可用性組資源中在普通腳本資源上創(chuàng)建了依賴。
注意:
額外的readme.txt包含如何測試腳本資源來確認它可以故障轉(zhuǎn)移到你的可用性組資源的指南。
通過普通腳本資源診斷失敗檢測
對承載主副本的節(jié)點生成群集日志,并搜索“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
或者例如,你設(shè)置\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.
免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。