我想运行我的 2(两)个 SQL Server 2008 R2 Enterprise Edition,就像运行一台服务器一样。如果一台服务器太忙,系统应该将请求定向到其他服务器。我该怎么做?谢谢。
答案1
SQL Server 不支持开箱即用的扩展功能。这样做实际上相当复杂,通常需要大量重新设计应用程序才能正确完成。
您确定数据库已正确调整,以便数据库中的所有内容都以最高效率运行吗?正确调整数据库(如果尚未调整)将比在多个物理服务器上扩展应用程序工作负载便宜得多。我有一个客户,他认为他们的应用程序将超出其所运行的数据库服务器,因为这家成立 3 年的公司在工作日内已经运行了 24 核 SQL Server,占比超过 60%。通过一些架构更改和少量代码更改,我们能够在完全相同的硬件上将 CPU 工作负载降低到 5% 左右。
您可以使用几种不同的方法将应用程序扩展到多台服务器。
设置一台服务器来处理写入,然后使用 SQL Server 复制将数据提供给其他服务器进行读取。然后,将只读服务器置于负载均衡器后面,以便将只读请求定向到所有只读服务器。这将需要大量的应用程序审查和设计更改。
使用对等复制使多台服务器可写入。然后在 SQL Server 前面放置一个负载平衡器,以将工作负载分散到各个服务器。这可能需要大量的应用程序审查和重新设计,具体取决于当前表布局、标识值的使用方式以及数据插入数据库的方式。
在多台服务器上设置视图,这些视图指向表的本地副本以及一台或多台服务器上的表的远程副本。对物理表施加约束,指定数据的哪些部分将存在于哪台服务器上。每台服务器只保存数据库的一部分。视图被放到每台服务器上,以便任何用户都可以连接到任何服务器。这需要大量的数据移动和非常仔细的规划,以确保模式很少发生变化,因为模式更改必须非常小心地进行。
无论你选择哪条路线,都需要进行大量的规划,以确保选择了正确的选项。我强烈建议与一位在处理此类配置方面经验丰富的顾问合作。好处是,有少数人以前处理过这类事情,缺点是这样的人数不多,而且费用非常昂贵。如果你决定走这条路,请访问我的网站,我会让你与几位顾问(包括我自己)联系,这样你就可以确保你找到了合适的人选。
对于选项 1 和 3,通过 Windows 群集之类的方式实现高可用性很快就变得非常重要。如果选项 1 中的可写服务器脱机,则整个应用程序也会脱机。如果选项 3 中的任何服务器脱机,则整个应用程序也会脱机。使用选项 2,它能够更好地处理服务器故障,但如果应用程序产生如此大的负载,则需要为选项 2 规划 N+1 个节点。
当选择要使用的选项时,您还需要提前规划未来的工作量,因为它会不断增长,因为您需要确保选择了可以长期发挥作用的选项。