为保证业务系统的安全和稳定性,定期为操作系统更新补丁是目前系统管理员经常经常要做的一项工作。但是根据运行的业务,并不是所有补丁都是可以进行更新的。比如小编最近遇到的一个问题,就是因为客户更新了一个不该更新的系统补丁导致的。
 
客户是一套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数据库副本频繁自动切换相关推荐

  1. 数据库副本的自动种子设定(自增长)

    原文:数据库副本的自动种子设定(自增长) 背景 在 SQL Server 2012 和 2014 中,初始化 SQL Server Always On 可用性组中的次要副本的唯一方法是使用备份.复制和 ...

  2. yii2_getDb()自动切换数据库

    yii2_getDb()自动切换数据库 class OcButlerTask extends \yii\db\ActiveRecord {//...public static function get ...

  3. mycat定时向mysql存储数据_【实战演练】Linux操作系统20-MyCat实现Mysql数据库读写分离与自动切换...

    #本文欢迎转载,转载请注明出处和作者. 理论部分,详见:繁星亮与鲍包包:[理论研究]业务系统高可用及负载均衡​zhuanlan.zhihu.com 本篇主要实现"8.Mysql读写分离&qu ...

  4. 主数据库宕机怎么办?MHA高可用帮你实现主从服务器自动切换(详细操作与命令详解)

    一.MHA简介 上一篇介绍了MySQL的主从复制.读写分离,实现主从服务器同步的架构,它存在单点故障的隐患,一旦主服务器出现故障,将无法进行写入,为了解决这个问题,可以考虑是否能够让从服务器切换角色, ...

  5. Exchange Server 2016管理系列课件50.DAG管理之激活数据库副本

    激活邮箱数据库副本是将特定被动副本指定为邮箱数据库的新主动副本的过程.我们将此过程称为数据库切换.数据库切换过程是指卸除当前的活动数据库,然后在指定的服务器上将相应的数据库副本作为新的活动邮箱数据库副 ...

  6. Hystrix的应用案例:多短信供应商的自动切换与恢复

    本文转载自公众号:永辉云创技术 该号由我参与维护,欢迎大家关注支持!!! 案例背景 目前的互联网应用几乎都会使用外部供应商的短信接口来实现一些验证.确认或是推广营销的行为.其中,对于验证.确认类的操作 ...

  7. c#获取autocad安装位置_AutoCAD自动切换输入法插件

    昨天有网友评论,问我"有没有打开CAD就让字体(我觉得他想说的是输入法)自动进入英文状态,而不是中文". 今天就给大家送来了两个AutoCAD自动切换输入法的插件,使用方法都比较简 ...

  8. 用java写ods系统_基于数据库的代码自动生成工具,生成JavaBean、生成数据库文档、生成前后端代码等(TableGo v7.0.0版)...

    TableGo是基于数据库的代码自动生成工具,低代码编程技术的实现,可以零代码自动生成SpringBoot项目工程.生成JavaBean.生成前后端分离的CRUD代码.生成MyBaits的Mapper ...

  9. mysql数据库连接不稳定_连接 MySQL 数据库失败频繁的原因探秘

    连接mySQL数据库失败频繁,主要是什么原因造成的? 一年前,我开发了一个网站,租用的是linux下PHP+mySQL的虚拟空间,之前一直工作正常. 近半年来,却频繁出现连接数据库失败错误(一周1~2 ...

最新文章

  1. sdut AOE网上的关键路径(spfa+前向星)
  2. Linux route命令详解和使用示例(查看和操作IP路由表)
  3. HDU 1215 七夕节 数论
  4. 【Docker】网络模式
  5. 微信(QQ)截图时,无法保留鼠标右键菜单选项内容
  6. 玩Weld-Probe –一站式查看CDI的所有方面
  7. Numpy实现酒鬼漫步问题【以及randint()、where()、cumsum()、argmax()的用法详解】
  8. vmware 蓝屏_网络安全小百科--利用微软CVE 2019-0708漏洞让对方系统蓝屏死机
  9. bzoj1593 [Usaco2008 Feb]Hotel 旅馆(线段树)
  10. SAP License:中国集团管控存在的主要问题
  11. JSP中application的用法
  12. Python进行数值计算
  13. whistle抓包工具学习
  14. heeds matlab,Ricardo IGNITE下载-整车性能仿真分析软件Ricardo IGNITE下载v2018.1 最新版-西西软件下载...
  15. 各层电子数排布规则_电子层排布,电子的排布规律
  16. sql注入搞事情(连载一)
  17. vue搭配three.js创建3D旋转方块
  18. 在linux上安装navicat 出现使用一段时间后闪退的情况
  19. python爬取学校题库_Python爬虫实战-获取某网站题库
  20. PCB如何打上自己的logo

热门文章

  1. android 如何使用Parcelable接口
  2. android 监听手机电量变化
  3. malloc,calloc和realloc函数
  4. bzoj4788: [CERC2016]Bipartite Blanket
  5. Spring模板对象之RedisTemplate(Spring整合jedis)
  6. Idea问题:“marketplace plugins are not loaded”解决方案
  7. 关于switch-case问题
  8. SQLServer跟踪相关
  9. 努力将SQL Server像玩游戏一样熟练
  10. 星尘小组第八周翻译-数据页和数据行