数据库集群和负载平衡


Answers:


132

数据库集群是一个含糊不清的术语,一些供应商认为具有两个或多个服务器共享同一存储的集群,另一些供应商则将该集群称为一组复制服务器。

复制定义了一种方法,使一组服务器保持同步而不必共享能够在地理位置上分散的存储,有两种主要的处理方式:

  • 主-主(或多主)复制:任何服务器都可以更新数据库。通常由数据库中的其他模块(或在某些情况下在它们之上运行的完全不同的软件)来处理。

    缺点是很难做好,并且在这种复制模式下,某些系统会丢失ACID属性。

    好处是它很灵活,可以在更新数据库的同时支持任何服务器的故障。

  • 主从复制:仅存在权威数据的单个副本,该副本被推送到从属服务器。

    缺点是容错能力较差,如果主机死亡,则从机不会有进一步的变化。

    好处是它比多主机更容易执行,并且通常保留ACID属性。

负载平衡是一个不同的概念,它包括分发发送到那些服务器的查询,从而使负载尽可能均匀地分布。通常是在应用程序层(或使用连接池)完成的。复制和负载平衡之间的唯一直接关系是,您需要进行一些复制才能实现负载平衡,否则您将只有一台服务器。


1
啊,忘记了复制:)是的,您可以结合应用程序级逻辑:)以这种方式实现负载平衡。+1
吉米·钱德拉

1
PostgreSQL文档对“数据库集群”的引用有所不同:“在执行任何操作之前,必须初始化磁盘上的数据库存储区域。我们将其称为数据库集群。(SQL使用术语目录集群。)数据库集群是以下各项的集合。由运行中的数据库服务器的单个实例管理的数据库。“ postgresql.org/docs/8.3/static/creating-cluster.html
Donato

1
ACID属性是什么意思,或者,如果不保留它们,到底松散了什么?
TheStoryCoder

@TheStoryCoder在计算机科学中,ACID(原子性,一致性,隔离性,持久性)是数据库事务的一组属性,旨在即使在发生错误,断电等情况下也可以确保有效性。满足ACID属性的操作(可以将这些操作视为对数据的单个逻辑操作)称为事务。例如,将资金从一个银行帐户转移到另一个银行帐户,甚至涉及多个更改,例如从一个帐户借记而向另一个帐户贷记,都是一次交易。
fizampou

17

从SQL Server的角度来看:

群集将为您提供主动-被动配置。这意味着在2节点群集中,其中一个将是主动的(服务),而另一个将是被动的(在主动节点发生故障时等待接管)。从硬件的角度来看,它具有很高的可用性。

您可以有一个双活群集,但是它将需要在每个节点上运行多个SQL Server实例。(即,节点A上的实例1故障转移到节点B上的实例2,节点B上的实例1故障转移到节点A上的实例2)。

负载平衡(至少从SQL Server的角度来看)不存在(至少在与Web服务器负载平衡相同的意义上)。您不能那样平衡负载。但是,您可以拆分应用程序以使其在服务器1的某些数据库上运行,也可以在服务器2的某些数据库上运行,等等。这是SQL世界中“负载平衡”的主要手段。


9

群集使用某种共享存储(例如,驱动器笼或SAN),并在其上放置两个数据库前端。前端服务器共享客户端用来连接的IP地址和群集网络名称,并且它们在自己之间决定谁目前负责服务客户端请求。

如果您要询问特定的数据库服务器,请将其添加到您的问题中,我们可以添加有关其实现的详细信息,但从本质上讲,这就是集群。


6

数据库集群实际上是在两个或更多节点之间进行同步复制的一种模式,具有向系统中添加的容错功能,并且在无共享体系结构中也是如此。“不共享”表示各个节点实际上不共享任何物理资源,例如磁盘或内存。

就保持数据同步而言,有一个管理服务器,所有数据节点与SQL节点都连接到该服务器以实现此目的(特别是关于MySQL)。

现在讨论差异:负载均衡只是通过群集可以实现的结果之一,其他则包括高可用性,可伸缩性和容错能力。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.