2

根据 CAP

一致性 - 所有节点都提供相同的数据

可用性意味着即使集群中的某个节点出现故障,也能够访问集群。

分区容错意味着即使两个节点之间存在“分区”(通信中断)(两个节点都已启动,但无法通信),集群仍继续运行。

但是Mysql默认行为是主从或者主主。

所以,主从

  • 没有一致性,因为可能会发生从属滞后,因此从从属读取的数据不一致。
  • 由于没有 DBA 干预,从属设备无法成为主设备,因此没有可用性。

所以,大师大师

  • 没有一致性,因为可能会发生从属滞后,因此从从属读取的数据不一致。
  • 由于没有 DBA 干预,从属/其他主控无法成为主控,因此没有可用性。
  • 它是部分容忍的,因为在网络故障的情况下两者都可以正常工作。

我错过了什么吗?

4

2 回答 2

3

第一点是 CAP 定理适用于分布式数据库,应该按照这些术语来阅读。

现在来到 CAP 定理,根据维基百科:

  • 一致性:每次读取都会收到最近的写入或错误
  • 可用性:每个请求都会收到一个(非错误)响应,但不保证它包含最近的写入
  • 分区容限:尽管节点之间的网络丢弃(或延迟)任意数量的消息,系统仍继续运行。

因此,当您说 MySql 默认行为是主从时,这意味着节点和节点只是主节点和辅助节点,并且一次仅使用单个节点(即主节点)来处理任何用户请求。因此,Partition Tolerance 在这里已经被妥协了。

但是数据库仍然是一致的,因为所有请求(读/写)都将转到主节点,用户将始终获得相同的一致数据。

并且数据库可用,因为所有请求都将收到响应,因为所有请求都转到同一个主节点。

因此默认情况下,CA 数据库中的 Mysql。从属滞后不会影响这里的一致性可用性

MySql 还有另一种可能性,通过一些配置调整,它可以成为CP 数据库,并且需要降低可用性。这将是一种分布式的多个主节点,并通过它们之间的网络保持同步。在这种情况下,如果其中任何一个网络或分区中断,则首选一致性意味着所有读取请求都将获得相同的数据,不会损坏,因为写入请求的可用性受到损害。

于 2020-10-30T12:47:22.010 回答
2

MySQL 数据库引擎在引入节点以平衡集群设计的帮助下达到了 CAP 定理。因此,当您有两 (2) 个节点时,如果两台服务器之间存在网络问题,则集群将分为 2 个分区。并且每一个都将拥有总成员数量的 50% (1/2)。这就是为什么没有一个分区将达到法定人数并且没有一个分区允许查询的原因。因此,要获得完整的分区容差,集群设计至少需要添加第三个节点,这样您的数据库才能达到分区容差以应对一次故障。 在此处输入图像描述

因此,即使两个节点之间的“分区”(通信中断)(两个节点都已启动,但无法通信),集群仍继续运行,因为一个分区仍有仲裁(2/3 = 66%,大于50%)。

于 2020-10-28T18:47:40.540 回答