前期回顾

这期的专题我们来介绍MySQL组复制相关的内容

1. 故障检测(Failure Detection)

MGR包含一个故障检测的机制来发现和报告哪些服务器silent或者dead

故障检测器(failure detector)是一个分布式的服务,用来为哪些服务器故障(怀疑)提供信息

一个服务器被怀疑意味这该服务器无响应(mute)

当服务器A在一段时间内为收到服务器B的信息,一个超时异常发生并且服务器B会被标记为 suspicion状态,这意味着,组内其他的成员服务器会协调将其踢出复制组

如果一个服务器无法和其余的服务器通信,则他会怀疑其他服务器都故障了.

由于其服务器和组内其他服务器达成一致,它自身的怀疑是没有结果的,这时他无法执行任何本地事务

2.组成员关系(Group Membership)

MGR提供一个组成员关系服务(group membership service )来定义服务器的在线状态以及是否参与组

该关系可以查看视图来获得,该服务保证任何时间查询的视图是一致的

他成员添加到组和移除出组时会更新该视图,这个过程叫做重配置(reconfiguration)

重新配置过程中需要大多数节点同意,即组内故障服务器低于大多数,否则视图无法更新且会阻塞事务的执行以防止脑裂的发生

这时就需要人为的干预了

3.容错机制(Fault-tolerance)

MGR利用 Paxos分布式算法来协调组内成员,他需要组内到多数服务器在线以达到仲裁成员数从而进行决断 

例如我们需要容忍f个服务器故障,则组内至少有2 x f + 1个成员

注意这里的故障指的是异常关闭,服务器正常关闭不属于故障

当超过f个服务器发生故障时,新的节点无法加入组,需要重新引导

1_2.png

4. 参考资料

https://dev.mysql.com/doc/refman/5.7/en/group-replication-details.html