1

我正在编写我的第一个 .NET MVC 应用程序,并且正在使用 Code-First 方法。我最近学习了如何使用镜像数据库和见证(不要与故障转移集群混淆)来配置两个 SQL Server 安装以实现高可用性,以执行故障转移过程。我认为这将是通过将我的 Web 应用程序安装到高可用性数据库中来实践这两件事的好时机。

现在,对于我在镜像配置中学到的知识(如果我错了,请纠正我),如果第一个数据库出现故障,您可以将见证故障转移到辅助数据库......但您的应用程序还需要更改连接字符串以引用辅助服务器。

在 Web.config (或其他地方)中拥有两个地址并选择正确的连接字符串的最佳方法是什么?

4

2 回答 2

1

我对连接到镜像数据库的经验为零,所以这都是异端!:)

简而言之,您可能不必做任何特别的事情,只要您在连接字符串中传递FailoverPartner属性即可。最重要的是,您可能需要额外的错误处理来尝试新连接,因此提供的数据实际上将在新连接中使用FailoverPartner名称。

似乎有一些关于将客户端连接到数据库镜像会话的好信息可以开始。你有机会去看看吗?

如果没有,则在创建初始连接时会引入ConnectionString属性的FailoverPartner属性。

重新连接到数据库镜像会话表明,在任何客户端由于故障转移而断开连接时,客户端将需要捕获此异常并准备重新连接:

应用程序必须意识到错误。然后,应用程序需要关闭失败的连接并使用相同的连接字符串属性打开一个新连接。

如果FailoverPartner属性可用,则此过程对客户端应该是相对透明的。

如果上述方法不起作用,那么您可能需要在应用层实际引入一些逻辑来跟踪谁是主节点、故障转移节点以及每个节点的连接字符串,并准备好将这些信息保存在某个地方——就像数据访问提供商应该为我们做的(睁大眼睛)。

还有一篇关于使用 Sql Server进行数据库镜像的 ServerFault 帖子,从具有附加参考信息的操作角度来看,这可能会引起人们的兴趣。

希望有实际经验的人会支持这些!

于 2011-03-15T02:55:10.163 回答
0

这可能完全不符合实际,但是如果您在 Web 服务器和数据库服务器之间有一个负载平衡器呢?

负载均衡器将使用基本的健康检查技术(例如 ping 等)在其池中拥有两个数据库。

然后,您的配置只需指向负载均衡器的 IP,无需更改。

这就是这些网络设备的优势所在。对服务器的运行状况做出决定不是编程框架 (ASP.NET) 的工作。

于 2011-03-15T02:34:50.000 回答