SQL Server 2008 负载平衡

SQL Server 2008 负载平衡

到目前为止我在网上找到的信息表明 SQL Server 2008 不支持真正的负载平衡。

这是真的吗?我无法在 MS 网站上找到合适的文档,因此任何链接都非常感谢。

此外,还有主动/主动和主动/被动之间的区别。

我推测您不能让多个 SQL Server 实例连接到同一个数据库,对吗?因为那将指示真正的负载平衡。

那么 Active/Active 就是当您有两个单独的 SQL Server 实例访问两个完全独立的数据库时?如果一个实例失败,那么它只会将负载分摊到剩下的一个实例上?那么,只有当我们确实有两个完全独立的数据库时,这种配置才真正有用?

因此,就我而言,我只有一个数据库,我必须选择主动/被动作为高可用性选项?

这些都是相当基本的问题,但我还没能找到相当基本的答案!

谢谢邓肯

答案1

你基本上描述的是SQL Server 群集。它是指一组两个或多个服务器(节点),它们共同运作,在客户端看来就像一个虚拟服务器。

SQL Server 群集可以配置为主动/主动或者主动/被动在双服务器场景中。Microsoft SQL Server 群集的两个节点要么专用于运行至少一个 SQL 实例(主动-主动),要么这些节点中的至少一个被保留为支持接受故障 SQL Server 实例的故障转移(主动-被动)。

您可以阅读以下一些文章:

一些文章描述了其他选项(尽管是在应用程序级别):

答案2

集群是一种高可用性解决方案,而不是可扩展性解决方案。所谓的“主动/主动”实际上是重复使用备用节点来部署另一个完全独立的实例。

对于读写 Transact-SQL 请求,不存在任何形式的负载平衡。对于仅读写 Transact-SQL(报告),可以选择“可扩展共享数据库“”。

SQL 2005 和 SQL 2008 中唯一支持“开箱即用”负载平衡的技术是 Service Broker,通过部署负载平衡路由来实现。但我怀疑这对你来说没有任何意义。

答案3

简单地向 SQL 群集添加更多节点不会增加处理能力,它只会增加可用性,因为您有更多节点保持在线。读/写查询的处理仅限于一个节点,没有循环负载平衡的概念。

这是微软的白皮书,标题为《SQL Server 2008 性能和规模》 http://www.microsoft.com/sqlserver/2008/en/us/wp-sql-2008-performance-scale.aspx

本白皮书讨论了 SQL Server 的扩展和扩展之间的区别。正如 Remus 所指出的,只读数据库(例如大型数据仓库)有一个可扩展共享数据库的概念。

如果适合您的需求,您可以使用点对点复制进行分布式处理。当然,这会带来其他复杂情况。

答案4

首先:SQL Server 不支持开箱即用的负载平衡,因此让 Windows 操作系统来做这项工作。您可以安装 2 个 SQL Server 实例并配置“对等复制”,以便在两台服务器上拥有一致的数据。然后您实际上使用 2 个 (!) 不同的数据库。但是,在 2 个用户(一个恰好在服务器 1 上,另一个在服务器 2 上......)对同一记录执行 DML 语句期间可能会发生冲突。您的任务是通过您的规划和前端编程来避免此类冲突。不幸的是,SQL Server 无法接管此任务。另一方面,当所有参与节点都使用共享存储时,“故障转移群集”是可能的。因此,系统将在一个不同的数据库上工作,没有负载平衡 (!),只有故障转移。反映出这是不一样的!如果一个节点发生故障,另一个节点将立即接管其任务。到目前为止,我希望这能对您有所帮助。托马斯

相关内容