我创建了以下结构:
- 两台硬件服务器安装了 Windows Server 2012R2,安装了 SQL Server 2012R2。然后 Windows 进行了全面更新,SQL Server 修补到 SP4,当前版本报告为 11.0.7493。
- WSFC 在两台服务器上形成,并在其他地方添加了文件共享见证
- 两个独立的 SQL Server 实例,每台服务器上一个,启用 AlwaysOn
- 一个 AlwaysOn 可用性组,包含一个数据库和一个侦听器
在连接到数据库和 SSMS 驱动(T-SQL 驱动)手动故障转移时,此方法可按预期工作。(由于应用程序使用 SQL Server 身份验证,因此必须解决本地 SQL Server 登录具有不同 SID 的问题,但它可以正常工作)现在我尝试通过停止服务器来模拟 SQL Server 崩溃 - BAM、AAG 完全失败。调查显示 WSFCGet-ClusterLog
说“未故障转移组 XXX,故障转移计数 3,故障转移阈值设置 1,上次故障转移 1601/01/01-00:00:00.000”。好的,我说,让我们等待 6 个小时(WSFC 资源清除故障转移计数的默认超时时间),再试一次 - BAM 故障转移计数增加到 4。然后我尝试将故障转移时间降低到 1 小时并将阈值降低到 5 - 再次没有任何结果,故障转移计数再次超过阈值。我去谷歌搜索,发现一些信息表明这个超时可以降低到零,从而有效地立即重置故障转移计数 - 没办法,每当我尝试模拟故障转移时,它仍然会增加。但是,当我仅重新启动现在的主群集节点和 SQL 服务器时,AAG 就会正确移动到剩余节点,并且本地数据库副本将成为主节点。
那么,如果 SQL Server 发生故障而主机仍正常运行,该怎么办以及如何让 SQL Server 2012 AAG 故障转移到另一个节点?
顺便问一下,为什么上次故障转移时间显示为零?可能是这种情况,或者是症状的一部分,表明需要查看哪里?