我的理解是,要在总是在AG环境中发生自动故障转移,只需将副本配置为“自动故障转移”、“同步提交”,并且环境必须具有适当的仲裁(即有表决权成员的奇数)。
然而,根据PeterA.Carter的教科书“SQLServer2019总是关于”,自动故障转移要起作用,辅助设备不能是主动的,必须是被动的。被动表示可读的辅助设置设置为“否”,因此无法直接连接或读取访问,显然也不能对它们进行备份。
以下是教科书中的确切陈述:
“虽然我们可以通过GUI更改可读的备用文件的值,同时也可以为自动故障转移配置副本,但这只是向导的一个怪癖。事实上,由于在配置为自动故障转移时不支持活动的备用程序,所以无法访问该副本。”
来源:Pro SQL Server 2019管理:现代DBA指南
这是“怪癖”的截图

注意:根据文本框,如果您希望自动故障转移工作,只读辅助应该设置为“否”。回想起来,我不记得在这个设置中发生过一次成功的自动故障转移,我相信当问题发生时,AG处于解决状态。注意,我们有第三台服务器以获得适当的仲裁。
我已经搜索了微软的文档,以确认作者的声明是否正确,但还没有找到任何明确说明辅助副本必须是被动的,才能自动故障转移才能工作的东西。这篇微软文章(故障转移和故障转移模式(总是在可用性组上))说明了自动故障转移所需的条件,但没有提到需要被动的辅助副本。
那么,作者是正确的,而Microsoft没有做广告吗?或者,当辅助副本处于活动状态/可读性时,作者是否不正确,自动故障转移是否有效?我的目标是拥有一个高度可用的具有自动故障转移的环境,但是为了实现这一点,我们是否需要牺牲卸载读操作呢?添加另一台服务器不是一个选项。
发布于 2021-03-29 19:34:39
您可能会失败,转到可读的辅助设备。作者要么错了,要么只是使用了一些令人困惑的术语。读了你的原话,我倾向于前一种解释。但我不知道这句话的全部背景。
这里我有一个AG -所有副本都被配置为在处于次要角色时是可读的,并且NODE2被设置为自动故障转移:

下面是AG仪表板上的当前状态:

我将继续直接连接到NODE2 (同步辅助),并开始运行一些查询:
SELECT COUNT_BIG(*)
FROM dbo.A;
WAITFOR DELAY '00:00:01';
GO 100然后做一些事情,使自动故障转移到NODE2。在本例中,我将在当前主服务器(NODE1)上终止Server服务。
现在,我将检查AG仪表板,可以看到NODE2自动成为新的主要功能。

注意,在故障转移期间,在NODE2上运行查询的SSMS窗口收到了以下消息:
Msg 596、级别21、状态1、行0 无法继续执行,因为会话位于state. Msg 0、级别20、状态0、0当前命令上发生严重错误。如果有任何结果,则应予以放弃。
这是正常的(客户端断开连接,而数据库作为主要功能的一部分进行恢复)。我重新尝试了查询,它继续运行。如果我是通过只读意图连接到听者,我就不用那么做了。
https://dba.stackexchange.com/questions/288905
复制相似问题