我们设置了一个具有2个Windows Server 2019数据中心节点的分布式故障转移群集,每个节点都运行SQL Server 2019 Enterprise+SSMS18。
-
这两个节点位于具有两个不同IP子网的两个不同站点中。
-
每个主机都是只有一个NIC的ESXI VM(子网a中的主机a,子网B中的主机B(。
-
两个站点都通过S2S-VPN连接进行连接,并可在两者之间进行流量路由。
问题
我们仔细检查了每一个可能的问题,但我们无法得到管理,通过SSMS 手动故障转移具有同步DB的AvailabilityGroup
-
实例->始终保持高可用性->可用性组->->;右键单击";故障转移";
- SQL Server错误41131(请参阅附件(
故障排除
-
主机之间的连接已启动;仪表板";显示,两个主机正在进行通信、启动和同步。
-
Defender防火墙规则适用于DAG侦听器、代理和浏览器服务。在站点a的PaloAlto防火墙上,可以在两个SQL主机之间检测到流量,但不会拒绝任何流量。
-
这两个主机都通过SQL Server代理和SQL Server引擎的单独服务用户运行,因此
NT AuthoritySYSTEM
的权限不应该丢失。
对AD-Clusterobject拥有创建和更新任何子对象的权限。创建之后,侦听器的两个DNS条目和集群对象的一个DNS条目也在那里。
即使两台主机之间的自动种子设定都在工作,也只有通过SMS18的故障转移失败(插入的行从主机A复制到主机B(。
问题
有什么想法吗?在什么时候我们可以解决问题?
在此处输入图像描述我附上了错误消息,但无法在线找到任何有用的信息,因为唯一连接的解决方案始终是更改NT帐户的权限,而我们不将其用于代理或引擎。
不确定您是否能够解决此问题,但以下是答案供将来参考。
从这里https://learn.microsoft.com/en-us/troubleshoot/sql/availability-groups/error-41131-create-availability-group
您可以参考以下内容:
[NT AUTHORITY\SYSTEM]帐户由SQL Server始终处于运行状况检测用于连接到SQL Server计算机并监视健康创建可用性组和主复制副本时在可用性组联机时,启动健康检测。如果[NT AUTHORITY\SYSTEM]帐户不存在或有足够的权限、无法启动运行状况检测以及可用性组在创建过程中无法联机。确保这些权限存在于可以承载的每台SQL Server计算机上可用性组的主副本
即使SQL Server实例和SQL Server代理在不同的服务帐户下运行,群集中也有一个进程使用[NT AUTHORITY\SYSTEM]连接到承载主副本的SQL Server实例,并且它将运行名为"的过程;sp_server_diagnostics"其用于健康检测,并且是可用性组的重要组成部分。
如果您在本应担任主要角色的节点上进行故障转移尝试时查看集群日志,您将看到以下内容:
INFO [RES] SQL Server Availability Group: [hadrag] Connect to SQL Server ...
INFO [RES] SQL Server Availability Group: [hadrag] The connection was established successfully
INFO [RES] SQL Server Availability Group: [hadrag] Run 'EXEC sp_server_diagnostics 10' returns following information
ERR [RES] SQL Server Availability Group: [hadrag] ODBC Error: [42000] [Microsoft][SQL Server Native Client 11.0][SQL Server]The user does not have permission to perform this action. (297)
ERR [RES] SQL Server Availability Group: [hadrag] Failed to run diagnostics command. See previous log for error message
INFO [RES] SQL Server Availability Group: [hadrag] Disconnect from SQL Server
基本上,故障转移失败是因为新主服务器上的[NT AUTHORITY\SYSTEM]帐户不存在或没有启动运行状况监视器进程所需的权限。
我希望这能有所帮助!