【问题标题】:Prepare Database For SQL Server Clustering为 SQL Server 集群准备数据库
【发布时间】:2010-10-18 07:21:40
【问题描述】:
我们计划在未来几个月内实施 sql server 2005 集群。我想知道作为数据库开发人员在尝试实现这一目标时需要采取哪些步骤/预防措施?我们是否需要更改任何 ado.net 代码(在前端)/存储的过程等?有什么可以遵循的最佳实践吗?
我问这个问题的原因是:对于 asp.net 负载平衡,您必须确保会话/应用程序/缓存的代码都符合负载平衡环境。 (因此,如果您使用的是 inproc 会话,则必须重写该代码以使其在负载平衡环境中工作)。现在这是在您的 Web 服务器级别。在尝试在数据库服务器级别进行横向扩展时,我只是想做正确的事情
如果这个问题很愚蠢,我很抱歉。请原谅我对这个主题的有限知识:-)
【问题讨论】:
标签:
sql-server
database
scalability
load-balancing
cluster-computing
【解决方案1】:
您无需对前端进行任何更改即可实现 SQL Server 集群,您只需照常连接到 SQL Server 实例。
但是,SQL Server 故障转移群集不是负载平衡。如果主节点上的任何硬件出现故障,它用于添加冗余。在您的主节点发生故障之前,您的其他(辅助)节点什么都不做,在这种情况下,故障转移会自动发生,并且您的数据库会在 10-20 秒延迟后再次提供连接。
另一个问题是辅助节点上的缓存为空,因此您可能会在故障转移后看到一些性能影响。你可以使用SQL Server database mirroring在你的镜像服务器上实现一个“暖”缓存,但是没有办法对集群做类似的事情。
【解决方案2】:
数据库集群不同于负载平衡。这是高可用性,而不是“向外扩展”
基本上:
- 2 台服务器(或节点)具有共享磁盘(任何时候只能由一个节点拥有)
- 一个是“活动的”运行虚拟 Windows 服务器和 SQL Server 实例
- 一个正在监视另一个(“被动”)
- 您连接到虚拟 Windows 服务器。
如果节点 1 下线,则节点 2 接管。或者可以手动进行故障转移。
这意味着:服务在节点 1 上关闭,节点 2 控制磁盘和服务并启动。任何连接都会中断,并且不会传输任何状态或会话。