MS SQL 可用性组故障转移行为?

时间:2021-02-18 07:34:33

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

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

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

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

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

1 个答案:

答案 0 :(得分:0)

<块引用>

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

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

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

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

无论违反这些假设的原因是什么,如果您的应用程序对它们没有弹性,就会出现问题。

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

相关问题