SQL Server 2019 DAG WFC手动故障转移失败(MSSQL错误41131)
环境概述
- 分布式故障转移集群:2台Windows Server 2019 Datacenter节点,均为单网卡ESXI虚拟机
- SQL配置:每节点运行SQL Server 2019 Enterprise + SSMS18
- 网络:节点分属不同站点的不同IP子网,站点间通过S2S-VPN连接,路由正常
故障现象
通过SSMS执行同步数据库的可用性组手动故障转移时失败,操作路径:【实例→Always On高可用性→可用性组→右键“故障转移”】,触发SQL Server错误41131
已完成排查项
- 节点间连通性正常,集群仪表盘显示节点通信正常且数据库同步状态正常
- 已配置DAG监听器、SQL Server代理、Browser服务的Windows Defender防火墙规则;站点A的PaloAlto防火墙未检测到SQL主机间流量被拒绝
- SQL Server引擎和Agent使用独立服务账户,AD集群对象具备创建/更新子对象权限
- 监听器及集群对象的DNS条目已正常生成
- 自动种子生成功能正常,主节点数据可同步至辅助节点
新增排查方向
1. 错误41131的详细日志分析
- 查看SQL Server错误日志(默认路径:
C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\Log\ERRORLOG),定位错误41131的上下文信息,确认是否伴随其他关联错误(如权限、网络超时、资源依赖问题) - 查看Windows集群事件日志(通过
Failover Cluster Manager→日志→集群事件),排查故障转移过程中集群资源的操作记录,是否存在资源离线/在线失败的情况
2. 可用性组同步状态细节验证
- 在主节点执行以下查询,确认所有数据库的同步状态:
确保所有数据库的SELECT ag.name, ar.replica_server_name, drs.synchronization_state_desc, drs.last_hardened_lsn, drs.last_redone_lsn FROM sys.dm_hadr_database_replica_states drs JOIN sys.availability_groups ag ON drs.group_id = ag.group_id JOIN sys.availability_replicas ar ON drs.replica_id = ar.replica_id;synchronization_state_desc为SYNCHRONIZED,且主备节点的last_hardened_lsn、last_redone_lsn无明显差异,排除同步未完全完成的情况
3. 跨站点网络质量检测
- 在两个节点间持续执行
ping -t <对方IP>和tracert <对方IP>,同时用Test-NetConnection <对方IP> -Port 5022(AG端点默认端口)排查是否存在间歇性丢包或端口连通性波动 - 检查VPN链路的带宽占用情况,确认故障转移期间无带宽耗尽导致的操作超时
4. 服务账户权限与身份验证检查
- 验证SQL Server服务账户是否具备对方节点的Windows管理权限(如远程登录、读取集群资源权限),故障转移过程需跨节点执行资源操作
- 执行
klist命令查看服务账户的Kerberos票据状态,排除票据过期或无效导致的身份验证失败
5. 可用性组监听器配置验证
- 检查监听器的多子网IP状态:通过
Failover Cluster Manager→角色→监听器→IP地址,确认两个子网的IP均处于在线状态 - 执行
nslookup <监听器名称>,确认返回两个子网的IP地址,且SSMS所在客户端能正常解析
6. SQL Server实例配置检查
- 确认两个节点的SQL Server实例均启用
Always On可用性组功能(通过服务器属性→高级→Always On可用性组) - 检查主备节点的远程访问配置:
确保SELECT name, value_in_use FROM sys.configurations WHERE name = 'remote access';value_in_use为1
7. 集群仲裁与资源状态检查
- 检查集群仲裁配置(如有见证资源),确认所有仲裁资源正常在线,避免仲裁问题阻碍故障转移
- 查看节点磁盘IO负载,排除故障转移期间磁盘高负载导致的操作超时
内容的提问来源于stack exchange,提问作者DevDino
相关产品推荐
相关产品推荐

