本文共 772 字,大约阅读时间需要 2 分钟。
接触MGR有一段时间了,MySQL 8.0.23的到来,基于MySQL Group Replicaion(MGR)的高可用架构又提供了新的架构思路。
- 灾备机房的slave,如何更好地支持主机房的MGR?
- MGR 到底可以坏几个节点?
这次我就以上2个问题,和大家简单聊下MGR的一些思想和功能。
一、MySQL Group Relication 成员数量的容错能力

上面的表格相信大家不会陌生了,我经常在面试里会问:“4个节点的MGR,最多坏几个呢?” ,多数人回答:“最多坏1个,坏2个就脑裂不能工作了。”

那我们来看看MGR的处理方式,是不是这个答案呢?
1)我们具有一个4节点MGR

埋一个问题:这个图一看就是Single模式,但箭头不是单向,是不是画错了?
2)此时,Second-04突然宕机了,那么MGR集群会成什么样子呢?

集群此时状态会变成:

- 每个节点会固定时间交换各自信息。
- 当没有收到Second-04节点信息后,其他成员会等待5秒。
- 这个期间Second-04肯定没有发出来消息,于是健康成员认为Second-04是可疑状态,标记UNREACHABLE状态。
- 然后健康成员按照参数:group_replication_member_expel_timeout,继续等待(此时Second-04依然是UNREACHABLE状态)。
- 当超过了group_replication_member_expel_timeout时间,健康成员就把Second-04节点驱逐出集群了。
那么重点来了,敲黑板
在Second-04,没有被驱逐出去时:
- 此时集群是(4节点-3健康-1坏),这个期间如果继续坏1个节点,那么集群变成(4节点-2健康-2坏),集群没有满足多数原则,每个节点都无法写入了(除非人工干预,强制指定集群成员List)。
转载地址:http://fmffk.baihongyu.com/