SQL Server 2016可用性组监听器可用但未出现在sys视图及SSMS中
我之前也碰到过类似的情况——直接通过故障转移集群管理器添加AG监听器后,监听器能正常连接和故障转移,但SQL Server的系统元数据没同步上来,导致SSMS里看不到记录,查询sys.availability_group_listeners也没结果。结合你的场景(之前SQL 2012这么操作没问题,2016出了状况),给你几个针对性的排查和解决思路:
检查集群监听器资源的DNS注册与状态
先打开故障转移群集管理器,找到你的可用性组资源组,确认监听器的网络名称和IP资源都处于在线状态。然后验证DNS注册是否正常:在集群节点或者客户端执行nslookup <你的监听器名称>,看是否能正确解析到对应的IP地址。如果DNS没注册,SQL Server可能无法识别这个监听器。手动刷新AG元数据
直接通过集群添加的监听器,SQL Server的系统视图可能没有自动同步配置。你可以在主副本上执行这条T-SQL命令强制刷新:ALTER AVAILABILITY GROUP [你的AG名称] REFRESH;执行完成后,再查询
SELECT * FROM sys.availability_group_listeners,看看是否能返回监听器的记录。验证SQL Server服务账户的集群权限
SQL Server 2016对AG配置的权限要求比2012更严格。确保SQL Server数据库引擎的服务账户拥有故障转移集群的读取权限,以及对AG资源组的访问权限。你可以检查该账户是否属于集群管理员组,或者在集群管理器的AG资源组权限设置中,给服务账户分配读取权限。查看SQL Server错误日志找线索
去主副本的SQL Server错误日志里搜索availability group listener、cluster这类关键词,看看有没有元数据同步失败、权限不足之类的错误或警告信息,这些日志往往能直接定位问题根源。重启主副本SQL Server服务(谨慎操作)
如果前面的步骤都没效果,可以尝试重启主副本的SQL Server服务——这会强制SQL重新从集群加载AG的全部配置信息。不过注意,重启服务会导致短暂的业务中断,一定要在维护窗口执行。
另外补充个小提醒:SQL Server 2016官方更推荐通过SSMS或者T-SQL来创建AG监听器,直接通过集群管理器添加的方式容易出现元数据不同步的问题,这也是和2012的一个差异点。
内容的提问来源于stack exchange,提问作者Mike

