什么是数据库集群?如果您允许同一数据库位于2台不同的服务器上,它们如何保持数据之间的同步。从数据库服务器的角度来看,这与负载平衡有何不同?
什么是数据库集群?如果您允许同一数据库位于2台不同的服务器上,它们如何保持数据之间的同步。从数据库服务器的角度来看,这与负载平衡有何不同?
Answers:
数据库集群是一个含糊不清的术语,一些供应商认为具有两个或多个服务器共享同一存储的集群,另一些供应商则将该集群称为一组复制服务器。
复制定义了一种方法,使一组服务器保持同步而不必共享能够在地理位置上分散的存储,有两种主要的处理方式:
主-主(或多主)复制:任何服务器都可以更新数据库。通常由数据库中的其他模块(或在某些情况下在它们之上运行的完全不同的软件)来处理。
缺点是很难做好,并且在这种复制模式下,某些系统会丢失ACID属性。
好处是它很灵活,可以在更新数据库的同时支持任何服务器的故障。
主从复制:仅存在权威数据的单个副本,该副本被推送到从属服务器。
缺点是容错能力较差,如果主机死亡,则从机不会有进一步的变化。
好处是它比多主机更容易执行,并且通常保留ACID属性。
负载平衡是一个不同的概念,它包括分发发送到那些服务器的查询,从而使负载尽可能均匀地分布。通常是在应用程序层(或使用连接池)完成的。复制和负载平衡之间的唯一直接关系是,您需要进行一些复制才能实现负载平衡,否则您将只有一台服务器。
从SQL Server的角度来看:
群集将为您提供主动-被动配置。这意味着在2节点群集中,其中一个将是主动的(服务),而另一个将是被动的(在主动节点发生故障时等待接管)。从硬件的角度来看,它具有很高的可用性。
您可以有一个双活群集,但是它将需要在每个节点上运行多个SQL Server实例。(即,节点A上的实例1故障转移到节点B上的实例2,节点B上的实例1故障转移到节点A上的实例2)。
负载平衡(至少从SQL Server的角度来看)不存在(至少在与Web服务器负载平衡相同的意义上)。您不能那样平衡负载。但是,您可以拆分应用程序以使其在服务器1的某些数据库上运行,也可以在服务器2的某些数据库上运行,等等。这是SQL世界中“负载平衡”的主要手段。
数据库集群实际上是在两个或更多节点之间进行同步复制的一种模式,具有向系统中添加的容错功能,并且在无共享体系结构中也是如此。“不共享”表示各个节点实际上不共享任何物理资源,例如磁盘或内存。
就保持数据同步而言,有一个管理服务器,所有数据节点与SQL节点都连接到该服务器以实现此目的(特别是关于MySQL)。
现在讨论差异:负载均衡只是通过群集可以实现的结果之一,其他则包括高可用性,可伸缩性和容错能力。