下面是我们在使用AlwaysOn过程中遇到的一个切换案例。这个案例发生在2014年8月,虽然时间相对久远了,但是对我们学习理解AlwaysOn的FailOver原理和过程还是很有帮助的。本次FailOver的触发原因是系统I/O问题。大家需要理解,操作系统I/O出现了问题不一定立即触发SQL Server发生漂移,因为坏的槽点可能不在SQL Server实例所用到的位置,但是随着时间持续 和数据堆积,问题槽点可能扩大升级。我们可以看到在本例中,第一次出现I/O问题到SQL Server 漂移间隔了16分钟,所以大家不要奇怪。我们重点可以FailOver的过程和触发条件设置上,即文章的第二和第三部分。
一 . 系统 I/O 异常 Log追踪1.1 10:36:12 发现I/O异常
1.2 10:45:43 显示个别读写花费时间较长
1.3 10:45:28 看似I/O严重
1.4 10:52:20 出现个别连接Fail现象
(查看表中的最后一笔数据显示为10:53:17)
二 . AlwaysOn FailOver 过程
2.1 系统提示需要FailOver
2.2 高可用性组的本地副本需要离线。
(相关知识:Lease expired event from the cluster. Possible causes include loss of lease, possible network issues and sp_server_diagnostic query timeout. )
2.3 错误提示信息显示,SQL Instance和WSFC连接异常。
2.4 可用性副本的角色发生变换。
2.5 角色为RESOLVING无法访问DB
(相关知识:When the role of an availability replica is indeterminate, such as during a failover, its databases are temporarily in a NOT SYNCHRONIZING state. Their role is set to RESOLVING until the role of the availability replica has resolved.)
此时: 通过SSMS管理器,连接数据也是不可以访问的,显示状态为不同步了。
三 . 相关知识点3.1:什么是resourceDell?resourceDell的用途?
由于AlwaysOn可用性组是建立在Windows故障转移群集之上的,Alwayson可用性组需要一个群集resourceDell来连接Windows群集和SQLServer实例。由于可用性组是一个群集资源,Windows群集需要透过AlwaysOn的resourceDell来控制资源的上线/离线,检查资源是否失败,更改资源的状态和属性,以及发生各种命令给可用性副本实例。(AlwaysOn可用性组的资源类型是“SQLServer Availability Group”)