MySQL InnoDB 集群实例要求

Joh*_* L. 2 mysql

为什么MySQL InnoDB集群需要至少三个实例才能工作?为什么一主一辅实例还不够?例如,这不就是 SQL Server 故障转移群集的工作原理吗?

Mic*_*bot 6

你和我正在树林里徒步旅行。我转身想和你说话,突然发现你不在。在那种情况下……我们当中哪一个人迷路了?是你吗?还是我?这甚至可以定义吗?

\n\n

如果一个节点非自愿地发生故障,其余节点必须能够确认它们是否形成了幸存者的权威法定人数。否则,它们继续运行是不安全的,因为它们无法确认它们在集群中的角色。

\n\n

节点数少于 3 个时,如果有一个节点丢失,则剩余任意数量的节点都不可能形成一个规模相当于故障发生前节点数的大多数(一半以上)的组,并且因此,幸存者的法定人数是不可能的。

\n\n

对于 3 个节点,如果其中 1 个发生故障,则其余节点仍占故障前节点数量的大多数,因为:

\n\n
let n = 3\n(n - 1) > (n \xc3\x97 50%) # true\n
Run Code Online (Sandbox Code Playgroud)\n\n

从两个节点开始,一个节点的丢失使另一个节点不确定它是孤立的还是最后一个节点,并且无法确认这一点,因为:

\n\n
let n = 2\n(n - 1) > (n \xc3\x97 50%) # false\n
Run Code Online (Sandbox Code Playgroud)\n\n

https://dev.mysql.com/doc/refman/8.0/en/group-replication-fault-tolerance.html

\n