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