我知道这个问题在这里已经被问过很多次了,而且我也全部读完了,但我希望听听你对我们的场景的意见。
我们有两台物理服务器,分为 4 个虚拟服务器 web1 web2 sql1 sql2
目前,我们在 sql1 和 2 上启用了镜像,这会导致 sql2 不可用,而 sql1 处于在线状态 - 这是正确的吗?我们的所有项目都为 sql2 设置了故障转移,但如果 sql1 出现故障,我们必须告诉它在复制中使用故障转移。
基本上,我问的是,有没有办法让 sql1 和 sql2 同步并且都可用,这样如果一个出现故障,另一个就可以立即工作,而无需我们进行交互?
还有什么其他的复制替代方案(这些都是大型数据库,可能有 60gb+,并且经常更改)
答案1
使用镜像,您可以将其设置为自动故障转移,这将满足该要求。要让您的应用程序知道这一点,请在连接字符串中设置故障转移伙伴属性。然后,当发生故障转移时,应用程序将连接到伙伴。就“可用”而言,您可以创建故障转移伙伴的只读数据库快照,但无法从伙伴本身读取。这是因为它处于不断恢复的状态。
如果您刚刚开始构建这个功能,那么您可能需要考虑刚刚发布的 SQL 2012。它引入了一项名为“始终在线”的新功能,该功能提供了拥有只读故障转移伙伴的能力。而且随着许可的变化,您已经为此付费了。
答案2
MS SQL 标准提供多种冗余选项:聚类,数据库镜像,复制, 和日志传送。
您应该使用其中哪一个完全取决于系统的预期用途。
集群和数据库镜像都提供自动故障转移;复制提供多主写入功能(尽管不是针对单个 VIP),并且日志传送不会自动执行任何操作,但是用途最广泛,即您可以轻松地从中创建只读从属服务器 - 尽管与主服务器不同步。
看看您的问题,似乎您错误地使用镜像来利用自动故障转移。
这需要一个特定形式的连接字符串Data Source="sql1"; Failover Partner="sql2"
,以及一个正常工作的见证服务器。