AlwaysOn SQL Server 2012-有任何真正的主动/主动选项吗?

AlwaysOn SQL Server 2012-有任何真正的主动/主动选项吗?

我即将升级并整合一组 SQL Server 2008R2 为单个 SQL Server 2012。我希望具有高可用性并寻找不同的选项。数据库数量相当多(150+),因此 DBMirroring 是不可能的。

现在我正在查看“AlwaysOn 可用性组”和“AlwaysOn 故障转移群集”,但我真的不知道该怎么做.....也许还有更多可用选项。

集群可能是一种很好的处理方式,但是如果一个强大的服务器什么都不做,只是等待主服务器发生故障,那就太烦人了。

有没有办法在 SQL Server 中实现真正的主动/主动集群(真正的负载平衡)?

答案1

Microsoft SQL Server 不支持开箱即用的“真正”负载平衡方案。据我所知,SQL Server 2012 仍然如此。(如果我错了,请有人指正。)无论我们谈论的是数据库镜像、AlwaysOn 还是集群,这都无关紧要。

(为了强调这一点,MS 最近似乎将 SQL Server 群集称为“SQL Server 故障转移群集”。很迂腐。)

如果要平衡数据库负载,您必须自己完成一些艰苦的工作,例如分片、联合或复制。(请注意,联合(通过视图)自 SQL Server 2000 以来就已存在于产品中,只是不太流行。)当然,这意味着修改数据库或应用程序本身,这几乎总是工作量太大或违反供应商协议。对于 150 个数据库,这更加难以克服。

您可以拥有一个主动-主动集群,但问题是您必须小心地将数据库分布在节点上以分担负载。如果拥有 150 个数据库,这可能比只有 5 个数据库时更细致,但如果您有一个数据库负载很大,而其他 149 个数据库负载很轻或很少使用,您可能仍会发现一台机器陷入困境,而另一台则不会。而且,有些数据库有时很忙,有时几乎不忙。这意味着一切都可能取决于用户何时决定运行一些繁重的进程。

当然,无论出于何种原因,即使只是修补 Windows 这样平凡的事情,在故障转移时您都必须能够在单个节点上支持所有负载。如果您只在已知的流量低迷期修补,那就太好了。如果您没有流量低迷期,或者由于硬件故障而发生故障转移,则另一个节点可能不会承担负载,您的用户将很不幸。如果您这样想,让第二台机器“什么也不做”就没那么令人恼火了。至少您知道它将承担主计算机通常承担的所有流量。

答案2

AlwaysOn 可用性组还支持只读副本 - 这将允许读取的负载平衡,据我所知,这是 SQL Server 2012 首次提供这样的功能。

2012 还支持经常提到的经典集群主动/主动(如果添加 2 个以上的节点,主动/主动/主动会发生什么情况!),但请记住,它有局限性,因为它提供 2 个实例,一旦一个实例发生故障,剩下的另一个服务器就有可能承受双倍甚至更多的负载。

除了负载平衡的只读副本之外,可用性组还提供了更大的灵活性,特别是可以位于远程 DR 站点的第三个异步见证服务器。

答案3

您可以做的另一件事是在每个节点上设置多个 SQL Server 实例,并对每个实例进行集群。在每个实例上拆分数据库。每个实例本身都是主动/被动的,但如果您在单独的节点上运行每个实例,则可以有效地分配负载。您仍然需要确保如果您进行故障转移,单个节点可以支持资源

相关内容