【发布时间】:2010-11-12 21:20:09
【问题描述】:
什么是数据库集群?如果您允许同一数据库位于 2 个不同的服务器上,它们如何保持数据之间的同步。从数据库服务器的角度来看,这与负载平衡有何不同?
【问题讨论】:
标签: database load-balancing cluster-computing database-agnostic
什么是数据库集群?如果您允许同一数据库位于 2 个不同的服务器上,它们如何保持数据之间的同步。从数据库服务器的角度来看,这与负载平衡有何不同?
【问题讨论】:
标签: database load-balancing cluster-computing database-agnostic
数据库集群是一个有点含糊的术语,一些供应商认为一个集群有两个或多个服务器共享相同的存储,而另一些供应商则将一个集群称为一组复制的服务器。
复制定义了一组服务器保持同步而不必共享存储空间的方法,可以在地理上分散,主要有两种方法:
主-主(或多主)复制:任何服务器都可以更新数据库。它通常由数据库中的不同模块(或在某些情况下运行在它们之上的完全不同的软件)来处理。
缺点是很难做好,有些系统在这种复制模式下会失去 ACID 属性。
优点是它很灵活,您可以在更新数据库的同时支持任何服务器的故障。
主从复制:权威数据只有一个副本,被推送到从服务器。
缺点是容错性较差,如果master死了,slave就没有进一步的变化了。
优点是它比多主机更容易操作,并且通常保留 ACID 属性。
负载平衡是一个不同的概念,它包括分配发送到这些服务器的查询,以便负载尽可能均匀分布。它通常在应用层(或使用连接池)完成。复制和负载平衡之间的唯一直接关系是您需要一些复制才能进行负载平衡,否则您将拥有一个服务器。
【讨论】:
从 SQL Server 的角度来看:
集群将为您提供主动-被动配置。这意味着在 2 节点集群中,其中一个将是主动的(服务),另一个将是被动的(当主动节点发生故障时等待接管)。从硬件的角度来看,这是一种高可用性。
您可以拥有一个主动-主动集群,但它需要在每个节点上运行多个 SQL Server 实例。 (即节点 A 上的实例 1 故障转移到节点 B 上的实例 2,节点 B 上的实例 1 故障转移到节点 A 上的实例 2)。
负载平衡(至少从 SQL Server 的角度来看)不存在(至少在与 Web 服务器负载平衡相同的意义上)。你不能那样平衡负载。但是,您可以将应用程序拆分为在服务器 1 上的某个数据库上运行,也可以在服务器 2 上的某个数据库上运行,等等。这是 SQL 世界中“负载平衡”的主要含义。
【讨论】:
集群使用某种类型的共享存储(例如驱动器笼或 SAN),并在其上放置两个数据库前端。前端服务器共享客户端用来连接的 IP 地址和集群网络名称,并由它们自己决定当前负责处理客户端请求的人员。
如果您要询问特定的数据库服务器,请将其添加到您的问题中,我们可以添加有关其实施的详细信息,但其核心就是集群。
【讨论】:
数据库集群实际上是一种在两个或可能更多节点之间同步复制的模式,并为您的系统添加了容错功能,并且在无共享架构中也是如此。不共享意味着各个节点实际上不共享任何物理资源,例如磁盘或内存。
就保持数据同步而言,有一个管理服务器,所有数据节点和SQL节点都连接到该管理服务器上来实现这一点(具体来说MySQL)。
现在谈谈区别:负载平衡只是可以通过集群实现的结果之一,其他包括高可用性、可扩展性和容错性。
【讨论】: