MySQL Xenon 源码阅读 -01

Xenon 是一款由 RadonDB 开发团队研发并开源的新一代 MySQL 集群高可用工具。基于 Raft 协议进行无中心化选主,实现主从秒级切换;基于 Semi-Sync 机制,保障数据不丢失,实现数据强一致性。并结合 MySQL(5.7 及以上版本)并行复制特性,实现 Binlog 并行回放,大大降低从库延迟。
Xenon 使用 Raft 协议进行选主的操作,这里简介绍一下,从候选者请求其他节点投票到当选的过程。
Raft 算法的向西信息 参见罗老师的文章:
https://www.infoq.cn/news/raft-paper
在 Candidate 角色在这个方法里面, 请求别人给自己投票。(candidate 的 线程)

在这里真正的做 RPC 远程调用, 即调用其他的 Follow 节点, 让它投自己一票。(candidate 的 线程)

RPC 调用这只, 被调用的 Follow 接收到请求之后就进行处理。
即 Candidate 在自己的节点,调用了 Follow 节点上的这个方法。

注意一下方法体中的 send 方法,这个很重要,代码如下, 它把信息交给 Follow (实际是 Follow 的 Loop 方法)去执行,并且将拿到的结果返回给远程调用端。代码如下:

Follow 的 Loop 会判断请求的类型, 若是请求投票的,则进入相应的处理方法中去处理这个事。

正常情况,candidate 收到投票,成为 Leader。
Candidate 最后还要进行状态退出。
Leader 进行状态初始化。


Xenon 是非常优秀的适用于 MySQL5.6,MySQL5.7 的高可用方案。更多参见 https://github.com/radondb/xenon。
版权声明: 本文为 InfoQ 作者【lixiaofeng】的原创文章。
原文链接:【http://xie.infoq.cn/article/f8cd0e77076f8d6ce38959b72】。
本文遵守【CC-BY 4.0】协议,转载请保留原文出处及本版权声明。
评论