为什么MySQL InnoDB集群至少需要三个实例才能运行?为什么一个主要实例和一个辅助实例不够用?这不是SQL Server故障转移群集的工作方式吗?
答案 0 :(得分:3)
你和我在树林里徒步旅行。我转而对你说话,突然意识到你不在那里。在那种情况下......我们中的哪一个迷失了?是你吗?还是我?甚至可以定义吗?
如果节点不自觉地失败,其余节点必须能够确认它们是否构成幸存者的权威法定人数。否则,他们继续操作是不安全的,因为他们无法确认他们在集群中的角色。
如果节点少于3个,如果一个节点丢失,则任何数量的剩余节点都不可能形成一个大小相当于故障前节点数的大多数(超过一半)的组发生了,因此不可能达到法定数量的幸存者。
有3个节点,如果1失败,其余节点仍然是失败前节点数量的大部分,因为:
let n = 3
(n - 1) > (n × 50%) # true
当两个节点开始时,一个节点的丢失会使另一个节点不确定它是否被隔离或最后一个节点是否存在,并且无法确认这一点,因为:
let n = 2
(n - 1) > (n × 50%) # false
https://dev.mysql.com/doc/refman/8.0/en/group-replication-fault-tolerance.html