![我可以在非镜像 SQL 服务器设置的连接字符串中使用故障转移伙伴吗?](https://linux22.com/image/720218/%E6%88%91%E5%8F%AF%E4%BB%A5%E5%9C%A8%E9%9D%9E%E9%95%9C%E5%83%8F%20SQL%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E8%AE%BE%E7%BD%AE%E7%9A%84%E8%BF%9E%E6%8E%A5%E5%AD%97%E7%AC%A6%E4%B8%B2%E4%B8%AD%E4%BD%BF%E7%94%A8%E6%95%85%E9%9A%9C%E8%BD%AC%E7%A7%BB%E4%BC%99%E4%BC%B4%E5%90%97%EF%BC%9F.png)
我已经设置了两个 SQL 服务器实例,IP 分别为 xxxx 和 yyyy。在应用程序级别指定与 SQL 服务器的连接时,我可以指定如下连接字符串吗?
<connection-url>jdbc:sqlserver://x.x.x.x:port; databaseName=productionDB; failoverPartner=jdbc:sqlserver://y.y.y.y:port</connection-url>
我尝试过解决这个问题,但是当我手动禁用 SQL Server 1 数据库时,在应用程序级别,它似乎确实在尝试连接到第二台服务器,但却失败了
连接到主机 yyyy,端口 1433 失败。错误:“null”。验证连接属性,确保 SQL 服务器实例正在主机上运行并在端口接受 TCP/IP 连接。确保到端口的 TCP 连接未被防火墙阻止。
我知道两个 SQL 实例之间的连接属性(例如用户、密码)都是相同的,因为如果我重新启动上面的应用程序并交换两个 IP,一切仍然有效。我还知道故障转移合作伙伴只应在设置数据库镜像时使用。但是,根据这个文章,无需设置底层镜像数据库似乎是可行的。
答案1
SQL 2016 中已弃用镜像
您将使用 SQL 可用性组。
它安装起来非常容易并且运行良好。
这是更好、更完整的演练之一,您需要更改一些内容,但它已经相当不错了。
http://blog.fedenko.info/2016/06/sql-server-2016-always-on-availability.html
您的连接字符串不会有太大变化,只需要更改连接 IP 并在后面添加安全参数。
答案2
使用 AlwaysOn Basic 的 SQL 2016 Standard - 现在,在几个实例中,我们不得不使用故障转移伙伴,因为 SQL 或 DC 响应请求的时间太长。因此,在我们的应用程序的连接字符串中,我们有“数据连接 = SERVERNAME\NAMEDINSTANCE;故障转移伙伴 = SERVERNAME2\NAMEDINSTANCE;”。作为只有两个节点的基本配置,这似乎可以正常运行。