暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

再议高可用/强一致的MySQL集群技术

数据库技术汇 2021-04-25
1723

去年,腾讯微信团队开源了PhxSQL,使用Multi-Paxos类似的协议来同步集群中各个MySQL实例的Binlog,这个集群生态中包含了很多微信团队的其它组件:

Paxos协议库phxpaxos http://github.com/tencent-wechat/phxpaxos

RPC通讯库phxrpc http://github.com/tencent-wechat/phxrpc

以及协程库libco http://github.com/tencent-wechat/libco

 

最近,2017年3月,阿里又推出了基于Raft 协议的MySQL 三节点企业版。一时间强一致性协议和MySQL走得很近!在此以前,比较正式的MySQL强一致集群方案有MySQL Group Replication/Galera(http://galeracluster.com/)和腾讯的TDSQL。Group Replication基于Paxos的变种协议Mencius来同步,Galera通过原子广播和基于WriteSet 的冲突检测机制来实现强一致,TDSQL是修复了官方SemiSync Replication技术存在的一些问题,同时加上工程上租约选主等手段来实现强一致。

 

Paxos和Raft都是用于解决分布式系统一致性的协议,Paxos更是历史悠久变种无数。我们从PhxSQL和阿里三节点企业版的架构来看看两者之间的差异,看似同为一致性协议的工程化应用,实际的差异还是不小!先看PhxSQL的系统架构:


 (图片来自PhxSQL公开分享)


从上面的架构图可以看到,这里的Phxsync就是MySQL的一个插件,代码中实现其实就是在MySQL Semisync插件的基础上做了一些修改,原生Semisync插件遵循半同步协议把Binlog发给Slave,等待Slave回应Binlog事件所对应的Binlog File Name和Offset。Phxsync插件通过RPC把Binlog发给PhxBinlogSvr。PhxBinlogSvr之间通过Paxos协议进行同步。抛去Proxy 等环节不说,一次事物提交的复制阶段开销包含(假定PhxBinlogSvr之间的RTT相同):

TReplication Latency

RTTPhxsync 2 PhxBinlogSvr + RTT PhxBinlogSvr(L)2 PhxBinlogSvr(F)


这样我们可以看出,提交的性能之一取决于PhxBinlogSvr(Leader)部署位置和MySQL Master之间的RTT,所以一般PhxSQL的部署是PhxBinlogSvr和MySQL实例成对出现,部署在同一台物理机器上面。

 

当然,总结这篇文章的目的是强调这样的两种场景:

  • PhxBinlogSvr(Leader或者叫Master)宕机的情况下,事物提交会Block住,要么等待PhxBinlogSvr(Leader)被拉起,要么等Leader租约过期后切换到其它MySQL + PhxBinlogSvr对上面去。

  • Phxsync和PhxBinlogSvr之间的RPC通讯抖动,事物提交也会Block住,当然这个在同机部署的情况下是低频率事件。


也就是说,
PhxSQL中事务提交对PhxBinlogSvr(Leader)的可靠性以及Phxsync和PhxBinlogSvr之间的通讯非常敏感!

 

再来看阿里三节点企业版的架构:

(图片来自阿里云官网)

在 AliSQL 内核中引入 Raft 协议,借助 MySQL Semi-sync Replication 实现日志多副本同步复制
。Raft 是强Leader的协议,正好MySQL的主从复制是一种Primary-Backup的模型,所以个人也是认为两者是比较合拍的。Multi-Paxos虽然也有Leader的角色,但是Leader的存在是为了在一定条件下优化一致性的达成效率,而不是必须要存在的,所以Multi-Paxos不是一种强Leader的协议。除去Raft协议简单容易理解不说,我们仍然回到这篇文章强调的场景上来:

  • 无论部署在哪里,同机或者远程,一个Slave的宕机不会影响事务的提交。

  • Master和一个Slave之间的网络抖动不会影响事务的提交。

  • 完全和其它MySQL兼容,不像PhxSQL引入了那么多的组件~


总而言之,Raft更适合Primary-Backup Replication,Multi-Paxos更适合Multi-Primary Replication。如果基于传统的MySQL复制体系,它本来就是一种Primary-Backup Replication,Raft看上去更合适一些!MySQL Group Replication就是典型的Multi-Primary Replication,所以它也采用了Paxos的变种协议Mencius。


文章转载自数据库技术汇,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论