服务器重新启动后,SQL Server 分布式可用性组数据库不同步

Tar*_*ryn 22 sql-server upgrade availability-groups sql-server-2017 distributed-availability-groups

我们正准备对我们的 SQL Server执行大规模升级,并注意到分布式可用性组的一些异常行为,我正试图在继续之前解决这些问题。

上个月,我将远程辅助服务器从 SQL Server 2016 升级到 SQL Server 2017。该服务器是多个分布式可用性组 (DAG)和一个单独的可用性组 (AG) 的一部分。当我们升级这台服务器时,我们没有意识到它会进入一个不可读的状态,所以在过去的一个月里,我们一直完全依赖于主服务器。

作为即将进行的升级的一部分,我将CU 4补丁应用到服务器并重新启动它。当服务器重新上线时,刚刚打补丁的辅助服务器显示所有 DAG/AG 都在同步,没有任何问题。

然而,初选展示了一个非常不同的故事。报道称

  • 单独的 AG 同步没有任何问题
  • 但 DAG 处于不同步/不健康状态

在最初感到恐慌之后,我尝试了以下方法来使 DAG 中的事物再次同步:

  • 从主数据库中,我停止并恢复了数据移动。这并没有开始同步数据。
  • 在二级(我刚刚修补的那个)上我跑了ALTER DATABASE [<database] SET HADR RESUME;- 执行没有错误,但没有恢复任何同步

我最后一次再次同步数据的尝试是登录到辅助服务器,然后手动重新启动 SQL Server 服务。手动重新启动服务似乎有点极端,因为我希望重新启动服务器就足够了。

有没有人遇到过重启后 DAG 没有开始同步到辅助节点的问题?如果有,是如何解决的?

我检查了 SQL Server 错误日志和辅助服务器上的事件查看器,没有发现任何异常。

Sea*_*ser 9

请注意,这不是一个确定的答案,但它是与Taryn聊天后的最佳答案。

然而,初选展示了一个非常不同的故事。它报告说单独的 AG 同步没有任何问题,但 DAG 处于不同步/不健康状态

如果分布式 ag 下的各个数据库和 AG 表示它们运行良好且正在同步,则很有可能这只是 DMV 和/或 SSMS 仪表板中的一个小问题。由于错误日志中没有任何内容表明副本未连接或处于断开连接状态。

不幸的是,由于问题已经解决,所以很难确切地说出它是什么......但如果将来有人发生这种情况:

  • 检查所有集群上的sys.dm_hadr_database_replica_states以寻找任何不健康的东西。如果一切正常,则 DMV 可能尚未更新
  • 如果不健康,请检查错误日志/DMV 是否存在连接问题(例如无法连接到转发器/全局主服务器)
  • Dan 的回答提到了数据库启动可能出现的问题 - 尽管在这种情况下无法读取实例,因此很可能不是问题,但可能是您的情况
  • 如果数据库可读,请使用虚拟表/插入或...
  • 使用 DEBUG 通道项目扩展事件会话sqlserver.hadr_dump_log_blocksqlserver.hadr_apply_log_block查看辅助节点是否实际接收/应用日志块或...
  • 性能对象 SQLServer:Database Replica\Log Bytes Received/sec

如果您在该辅助节点上接收数据,但分布式 ag 仍然显示不同步或不健康,那么我会让它稍微看看 DMV 值是否发生变化,因为它显然正在接收和处理日志块。

但是,如果不是,那么我们需要进一步调查哪个超出了答案的范围。