我即将升级并将一组SQL Server 2008R2整合到单个SQL Server 2012中。我希望具有高可用性并寻找不同的选项。 数据库的数量相当高(150+),所以DBMirroring是不可能的。
现在我正在看“AlwaysOn可用性组”和“AlwaysOn故障转移群集”,我真的不知道怎么走…..可能有更多的选项可用。
集群可能是一个很好的方法来做事情,但真正烦人的是,一个大功率服务器什么也不做,只是等待主服务器失败。
有没有办法在SQL Server(真正的负载平衡)做真正的主动/主动群集?
Microsoft SQL Server不支持开箱即用的“真实”负载平衡scheme。 AFAIK,SQL Server 2012仍然如此。(如果我错了,有人会给我启发。)如果我们谈论数据库镜像或AlwaysOn或集群,那并不重要。
(为了将这一点扼杀在家里,MS似乎最近称SQL Server集群为“SQL Server故障转移集群”(Pedantics))。
如果你想负载平衡你的数据库,你必须自己做一些分片,联合或复制。 (请注意,自SQL Server 2000以来,联合(通过视图)已经在产品中,但它并不是非常stream行)。当然,这意味着修改数据库或应用程序本身,这几乎总是要么很多工作或违反您的供应商协议。 拥有150个数据库,这是更难以逾越的。
你可以有一个主动 – 主动的集群,但是,你必须谨慎地在你的节点上分配你的数据库来分配负载。 对于150个数据库,这可能比只有5个数据库更精细,但是如果有一个数据库是一个负载吨,149个是轻量级或很less使用,那么您仍然可能会发现一台机器陷入困境,其他不是。 而且,有些数据库有时候很忙,而其他时间则不太忙。 这意味着当用户决定运行一些繁重的过程时,所有的事情都可能会降下来。
当然,无论出于何种原因,当你故障转移时,你必须能够在单个节点上支持所有的负载,即使它像修补Windows一样普通。 如果你只在已知的缓慢交通期间修补,那太好了。 如果您没有较慢的周期,或者由于硬件实际发生故障而发生故障转移,则其他节点可能无法承受负载,您的用户将失去运气。 如果你这样想,那么让第二台机器“无所事事”并不那么令人烦恼。 至less你知道,它将采取主要通常所有的stream量。
AlwaysOn可用性组还支持只读副本 – 这将允许对读取进行负载平衡,并且据我所知,这是SQL Server 2012第一次提供这样的function。
2012还支持经常提到的经典集群主动/主动(如果添加了2个以上的节点,主动/主动/主动yuck,会发生什么情况),但要记住,它有2个实例的限制,并且尽快当一个人倒下时,剩下的另一台服务器可能会受到双倍的负载或更多的砰砰声。
除了负载平衡的只读副本之外,可用性组提供更多的灵活性,特别是可以位于远程灾难恢复站点中的第三个asynchronous见证服务器。
你可以做的另一件事是在每个节点上设置多个sql server实例,并对每个实例进行聚类。 将每个实例的数据库分开。 每个实例本身都是主动/被动的,但是如果在单独的节点上运行每个实例,则可以有效地分配负载。 您仍然需要确保如果您进行故障转移,单个节点可以支持资源