数据库集群和负载平衡

时间:2009-07-22 05:32:00

标签: database load-balancing cluster-computing database-agnostic

什么是数据库集群?如果允许同一数据库位于2个不同的服务器上,它们如何使数据保持同步。这与数据库服务器角度的负载均衡有何不同?

4 个答案:

答案 0 :(得分:121)

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

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

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

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

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

  • 主从复制:只有一个权威数据副本,推送到从属服务器。

    缺点是容错性较小,如果主人死亡,奴隶没有进一步的变化。

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

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

答案 1 :(得分:13)

从SQL Server的角度来看:

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

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

负载平衡(至少从SQL Server的角度来看)不存在(至少在Web服务器负载平衡的意义上)。你无法平衡负载。但是,您可以将应用程序拆分为在服务器1上的某个数据库上运行,也可以在服务器2上的某个数据库上运行,等等。这是SQL世界中“负载平衡”的主要方法。

答案 2 :(得分:8)

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

如果您询问某个特定的数据库服务器,请将其添加到您的问题中,我们可以添加有关其实施的详细信息,但从核心来看,这就是群集服务。

答案 3 :(得分:5)

数据库群集实际上是两个或更多节点之间的同步复制模式,并且在系统中添加了容错功能,在无共享架构中也是如此。通过共享,这意味着各个节点实际上不共享任何物理资源,如磁盘或内存。

就保持数据同步而言,有一个管理服务器,所有数据节点都连接到SQL节点以实现此目的(具体谈论MySQL)。

现在关于差异:负载平衡只是通过群集可以实现的一个结果,其他包括高可用性,可伸缩性和容错。