可用性组可以提供无缝的故障转移(没有查询失败)吗?


9

我一直在测试SQL Server 2012中的“可用性组”功能,发现主服务器故障转移到辅助服务器时大约有15秒的停机时间。在此期间执行的所有SQL查询都将失败,直到完成故障转移转换为止。

有什么办法可以将其降低到0秒并防止在故障转移过渡期间查询失败?

换句话说,是否有一种方法可以使故障期间运行的所有查询都重定向到主服务器而不是失败...,并且有任何方法可以使新的数据库连接立即连接到辅助服务器,而不会失败在故障转移过渡期间连接?

我目前在可用性组中设置了2台服务器。


1
检查此问题(及其答案):dba.stackexchange.com/questions/25124/…–
Max Vernon

只有Oracle RAC可以做到这一点。
理查德·布朗

或者您应该在sql server前面的适当设置中使用linux loadballancer,例如HAproxy。
kakaz

Answers:


9

不,无法使用AlwaysOn(或据我所知一般在SQL Server中)进行零停机故障转移。为此,您所连接的SQL Server必须在查询中将状态转移到另一个节点,并且由于许多故障转移是意外的,因此这是不可能的。

但是,您可以在AlwaysOn中启用“只读辅助副本”,然后,当主服务器故障转移时,您的读者的停机时间将为零-由于他们始终连接到辅助副本以执行SELECT查询,因此不会甚至注意到故障转移。打开“写入”连接的用户仍然会受到干扰,但是您的用户群中至少有一部分不会受到干扰。


启用“只读辅助节点”后,是否在主节点上发生任何读取请求,还是始终在辅助节点上完成读取请求?如果备用服务器在这种情况下出现故障,该怎么办?
约翰·

仅当您将客户端配置为连接到辅助服务器时,才会对辅助服务器进行读取。
Max Vernon

1
我知道了,因此需要更智能的客户端应用程序。
约翰(John John)

@JohnHughes:查阅此Microsoft文档(第5页的中间):tinyurl.com/9dtvndv和此博客文章:tinyurl.com/8cyr9za。您不一定需要更智能的应用程序-启用该功能后,您可以指定任何应用程序都可以连接到可读的辅助文件,但是任何进行DDL / DML事务的尝试都会失败。如果使用的是较新的本机客户端,则可以指定“ ReadIntent”,这意味着较新的客户端将从辅助服务器读取数据,而较旧的客户端将继续对主服务器进行所有事务。一个选项,但需要一些阅读。
SqlRyan 2012年

SqlRyan是正确的,在没有断开客户端连接的情况下,无法使用AlwaysOn可用性组对SQL Server实例进行故障转移。
mrdenny 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.