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