【问题标题】:MS SQL Availiability Group Failover behavior?MS SQL 可用性组故障转移行为?
【发布时间】:2021-02-18 07:34:33
【问题描述】:

我有一个使用 MS SQL 和可用性组的客户端。我开发了一个基于 java 的软件并以以下方式连接到服务器:jdbc:sqlserver://[serverName[:portNumber]]

每当 DBA 对服务器进行更新时,我们都会断开与服务器的连接(我们会关闭连接)。根据 DBA 的说法,这是 SQL-Server 中的正常行为,我们的软件应该重试一次。

sql server 在故障转移的情况下关闭所有连接真的正常吗?它不应该只是将所有连接重定向到新实例吗?

不幸的是,我不是 SQL 专家,DBA 也没什么帮助,他只是声称我们的软件应该在收到关闭的连接后简单地重新连接。我是否遗漏了什么或者这真的是 sql server 中想要的体验?

【问题讨论】:

  • 取决于驱动程序,有些驱动程序你可以在连接字符串中给它故障转移服务器的地址,不确定JDBC。我认为如果它已经连接,那么您可能总是会收到错误。

标签: sql-server connection-string high-availability


【解决方案1】:

sql server 在故障转移的情况下关闭所有连接真的正常吗?它不应该只是将所有连接重定向到新实例吗?

是的。假设可用性组(以下简称为“AG”)建立在 Windows 故障转移群集†之上,AG 侦听器将脱机,转移到 AG 的新所有者,然后重新联机。此外,主副本和所有辅助副本上的 AG 中的数据库都从在线 → 恢复挂起 → 以新的(可能与旧的)容量作为读/写或只读容量转换。

仅这些现象中的任何一种都会导致您的应用程序失去与之前已建立连接的数据库的通信。而且,the fallacies of distributed computing 中的两个是:

  1. 网络可靠。
  2. 拓扑不会改变。

无论违反这些假设的原因是什么,如果您的应用程序不能适应它们,就会出现问题。

† - 虽然在技术上可以在没有 Windows 集群的情况下构建 AG(即基本 AG 或者如果 AG 在 Linux 上并使用 Pacemaker 作为协调器),但我认为大多数实现 确实 em> 使用 Windows 集群。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多