PhxSQL基于Percona5.6开发。不需要借助第三方的集群软件,比如Galera(PXC和MariaDB的集群都需要借助Galera)。功能很强大,和官方的MySQL Group Replication有一拼。其他第三方的有腾讯数平的TDSQL,阿里的AliSQL,网易的InnoSQL等。
MySQL半同步复制存在缺陷,在Master进行切换的场景下,数据难以保证一致。
当旧Master复制失败时,旧Master和Updated Slave(已收到Binlog的Slave)需要回滚数据。
当Master进行切换时,旧Master仍有部分Client进行读写。
PhxSQL的设计是为了解决MySQL半同步复制的不足,使MySQL集群在Master切换过程中保证数据的一致。
PhxSQL架构
为了解决MySQL的两个问题(Binlog复制和Master切换),PhxSQL设计了两个模块(Phxbinlogsvr、Phxsqlproxy)和一个MySQL插件(Phxsync)。Phxbinlogsvr负责处理MySQL的Binlog复制和Master管理;Phxsqlproxy负责透传Client请求到Master;Phxsync插件负责MySQL和Phxbinlogsvr的交互。 一台部署了Phxsqlproxy,MySQL和Phxbinlogsvr的机器称为PhxSQL Node。
PhxSQL的特点具有服务高可用、数据强一致、高性能、运维简单、和MySQL完全兼容的特点
服务高可用:PhxSQL集群内只要多数派节点存活就能正常提供服务;出于性能的考虑,集群会选举出一个Master节点负责写入操作;当Master失效,会自动重新选举新的Master。
数据强一致:PhxSQL采用多节点冗余部署,在多个节点之间采用paxos协议同步流水,保证了集群内各节点数据的强一致。
高性能:PhxSQL比MySQL SemiSync的写性能更好,得益于Paxos协议比SemiSync协议更加高效;
运维简单:PhxSQL集群内机器出现短时间故障,能自动恢复数据,无需复杂的运维操作;PhxSQL更提供一键更换(新增/删除)集群内的机器,简化运维的工作。
MySQL完全兼容:PhxSQL是基于Percona的研发,完全兼容MySQL的操作命令。 可通过MySQL提供的mysqlclient/perconaserverclient直接操作PhxSQL。
PhxSQL源代码编译时需要一些第三方库,可直接在Linux环境下运行的二进制包。其中代码使用到了微信团队自研的另外三个开源项目(phxpaxos,phxrpc,colib)。若需编译源代码,需额外下载,也可以在clone时通过--recurse-submodule获得代码。
phxpaxos项目地址: http://github.com/Tencent/phxpaxos
phxrpc项目地址: http://github.com/Tencent/phxrpc
colib项目地址: http://github.com/Tencent/libco
使用文档
中文详细编译手册官方文章
中文部署手册
PhxSQL 成员管理
从现有MySQL数据库迁移
MySQL半同步复制的数据一致性探讨开发者文章
PhxSQL架构介绍
PhxSQL强一致同步基础PhxPaxos库原理介绍
谈谈PhxSQL的设计和实现哲学(上)
谈谈PhxSQL的设计和实现哲学(下)
安装PhxSQL笔记 by hzlpy
微信开源PhxSQL在CentOS下编译安装 by jingyihome
Reference
https://github.com/Tencent/phxsql/wiki
https://github.com/Tencent/phxsql/blob/master/README.zh_cn.md
https://github.com/Tencent/phxsql/wiki/Architecture
https://zhuanlan.zhihu.com/p/22361242
https://zhuanlan.zhihu.com/p/22345242