勤快学

PhxSQL 复制流程

在PhxSQL中,Phxbinlogsvr负责管理MySQL的角色和存储MySQL的Binlog,Phxbinlogsvr和其管理的MySQL部署在同一台物理机上。

MySQL Master在Send Event阶段不再把Binlog复制给Slave,而是通过Phxsync插件,把数据复制到Phxbinlogsvr集群。

MySQL Slave也不再从Master获取Binlog,而是从本机的Phxbinlogsvr获取。

Phxbinlogsvr集群使用Paxos协议进行数据复制。

PhxSQL使用PhxPaxos库,详情请查看微信后台团队公众号文章微信自研生产级paxos类库PhxPaxos实现原理介绍。
从逻辑上来看,利用Paxos协议进行复制,使Phxbinlogsvr形成一个可靠的日志存储。PhxSQL可以看成是为MySQL增加了一个用Paxos实现的可靠Binlog存储,只要集群中多数派机器存活,就可以解决半同步复制的回滚问题。
分别从Master和Slave的角度来解释:

Master重启时,通过询问Phxbinlogsvr(多数派)Pending Binlog是否存在来决定是否需要回滚。如图4。

Slave从本机Phxbinlogsvr能拉取到的Binlog都已经经过Paxos协议成功复制到多数派机器,因此对于Slave来说不存在回滚的问题。

Phxbinlogsvr通过Paxos协议复制数据,很好的解决了MySQL中需要手动回滚Binlog和在大集群时同时需要回滚Updated Slave上的Binlog的问题。