我很感兴趣是否有任何解决方案拥有两台物理机,Microsoft SQL Server 2012 在同一个数据库上工作。类似集群的东西只有两个节点都处于活动状态......知道吗?
2 回答
Microsoft SQL Server 不支持开箱即用的“真正的”负载平衡方案。AFAIK,SQL Server 2012 仍然如此。(如果我错了,有人会启发我。)我们谈论的是数据库镜像、AlwaysOn 还是集群都没有关系。
(为了强调这一点,MS 最近似乎将 SQL Server 集群称为“SQL Server 故障转移集群”。Pedantics。)
如果您想对数据库进行负载平衡,您必须自己通过某种分片、联合或复制来完成艰苦的工作。(请注意,自 SQL Server 2000 以来,产品中一直存在联合(按视图),只是不是很流行。)当然,这意味着修改您的数据库或应用程序本身,这几乎总是要么大量工作或违反您的供应商协议。拥有 150 个数据库,就更难以克服了。
您可以拥有一个主动-主动集群,但问题是您必须小心地将数据库分布在您的节点上以分配负载。如果有 150 个数据库,这可能比只有 5 个数据库更细化,但是如果您有一个负载很大的数据库和 149 个轻量级或很少使用的数据库,您可能仍然会发现一台机器陷入困境并且其他不是。而且,一些数据库有时很忙,而在其他时间几乎不忙。这意味着一切都可能归结为用户决定运行一些繁重的过程。
当然,无论出于何种原因,您必须能够在故障转移时支持单个节点上的所有负载,即使它是像修补 Windows 这样平凡的事情。如果您只在已知的缓慢交通时段进行修补,那就太好了。如果您没有缓慢的周期,或者如果由于硬件实际出现故障而发生故障转移,则另一个节点可能不会承担负载,您的用户将不走运。如果你这样想,让第二台机器“无所事事”并不是那么令人讨厌。至少您知道它将占用主节点通常执行的所有流量。
是的,您可以让两个数据库主动共享相同的信息并来回复制它。这称为“合并复制”。在这种配置中,两个节点都可以接受读写事务。