Exchannge 2013数据库副本频繁自动切换
為保證業務系統的安全和穩定性,定期為操作系統更新補丁是目前系統管理員經常經常要做的一項工作。但是根據運行的業務,并不是所有補丁都是可以進行更新的。比如小編最近遇到的一個問題,就是因為客戶更新了一個不該更新的系統補丁導致的。
?
客戶是一套Exchange Server 2013的環境,2個前端服務器,3個后端服務器,3臺后端服務器同屬于一個DAG中,有十多個個數據庫,都有3個副本,最近發現有一臺郵箱服務器上的數據庫主動副本,經常自動的切換到其它郵箱服務器,其它2臺服務器不存在這個問題。
?
為了重現這個問題來查找原因,我們手動將幾個主副本切換到了這臺服務器上,過來大概一天左右的時間,竟然真的自動切換到其他服務器上了。
通過分析最近一次切換的事件日志,我們發現有以下一些日志似乎與這個故障相關:
<font color=#00F00 size=3 >事件 ID:164
來源: ExchangeStoreDB
描述:在 '2017/12/11 11:23:12',此服務器上的 Exchange 存儲數據庫 'xxxxx' 副本在定期狀態檢查時超時。有關失敗的詳細信息,請查詢服務器上其他存儲和 "ExchangeStoreDb" 事件的事件日志。成功的故障轉移已還原了服務。</font>
<font color=#00F00 size=字號 >事件 ID: 1002
來源:MSExchangeIS
描述:Unhandled exception (System.Threading.LockRecursionException: 此模式下不允許以遞歸方式獲取讀取鎖定。</font>
<font color=#00F00 size=字號 > 事件 ID:1013
來源: MSExchangeIS
描述:The mailbox with mailboxguid "fb9e5930-0ea8-4cca-9a92-406fbc874451" caused crash or resource outage on database (GUID="5d7bf16f-f22c-4615-9ee9-177bc59e1032"). Description: LockRecursionException: </font>
<font color=#00F00 size=字號 > 事件 ID:164 </font>
<font color=#00F00 size=字號 > 事件 ID:1021 </font>
<font color=#00F00 size=字號 > 事件 ID:1007</font>
<font color=#00F00 size=字號 > 事件 ID:2157</font>
根據以上日志分析,我們基本發現了自動切換的過程是由于系統對數據庫自動運維期間出現的,比如對副本的定期檢查,存儲維護助理。隨后就會產生索引失敗,副本停止,自動切換等日志。
?
因此,我們在排錯的最初階段一直關注的是自動運維期為什么會造成自動切換,是性能的問題呢,還是數據庫本身出現了問題。根據對相關日志的分析和資料搜索,很多預想的可能性都被一一的排除掉了,而且,通過上述日志的分析,我們發現有一個KB3095369,如下:
<font color=#00F00 size=字號 > Mailboxes are quarantined and databases fail over unexpectedly in Exchange Server 2013
https://support.microsoft.com/en-us/help/3095369/mailboxes-are-quarantined-and-databases-fail-over-unexpectedly-in-exch?sd=rss&spid=16662</font>;
?
包括了好幾個事件的ID,但是仔細閱讀這個KB,我們發現它解決的是郵箱被頻繁鎖定的問題。造成的原因是操作系統安裝了 .NET Framework 4.6。
?
為了驗證我們的問題是否和此有關,我們分別在四臺服務器上利用了KB中提到的一個檢查當前系統 .NET Framework版本的Powshell腳本,進行了驗證,<font color=#00F00 size=字號 >發現有故障的郵箱服務器的版本為:4.6 or later:</font>
<font color=#00F00 size=字號 >其它三臺則為:4.5.1:</font>
<font color=#00F00 size=字號 >這個情況,似乎正好反映了當前環境四臺服務器只有一臺出問題?</font>
腳本如下:
$Reg =[Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey('LocalMachine', $Server)$RegKey=$Reg.OpenSubKey("SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full")[int]$NetVersionKey=$RegKey.GetValue("Release")if($NetVersionKey -ge 381029){"4.6 or later"return}switch ($NetVersionKey){{($_ -ge 378389) -and ($_ -lt 378675)}{"4.5"}{($_ -ge 378675) -and ($_ -lt 379893)}{"4.5.1"}{$_ -ge 379893} {"4.5.2"}default {"Unable to Determine"}}?
<font color=#00F7F size=5>確定是否安裝 .NET Framework 4.6</font>
- 檢查系統是否已安裝以下兩個補丁或其一或通過PowerShell腳本查詢(腳本詳見上面):
Update forMicrosoft Windows (KB3045562)
Update forMicrosoft Windows (KB3045563) - 確定那一臺服務器安裝了 .NET Framework 4.6,則嘗試卸載已安裝的相關補丁并重啟服務器:
- 再次使用腳本查詢.Net的版本:
?
- 將部分數據庫的主動副本在該服務器激活,觀察是否不在出現自動切換至其它服務器的情況。
?
<font color=#00F00 size=5 >總結:</font>這個故障原因,可以發現,主要是因為在系統中安裝的補丁,使.NET Framework 版本的升級,造成了系統的不穩定。所以,我們在以后打補丁時需要進行必要的審核,測試和驗證,以免不適當的補丁被更新。
本文轉自 ?zyliday ? 51CTO博客,原文鏈接:http://blog.51cto.com/itsoul/2049643
總結
以上是生活随笔為你收集整理的Exchannge 2013数据库副本频繁自动切换的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: mySql存储过程,简单实现实例
- 下一篇: PostgreSQL数据类型-枚举类型、