PhxSQL 是由微信后台团队自主研发的一款服务高可用、数据强一致的分布式数据库服务。该服务基于 Percona5.6 搭建,目标在于解决 MySQL 在容灾和数据一致性方面的不足,并大幅简化了 MySQL 容灾切换的运维操作。
作者:Junchao Chen (junechen@tencent.com), Haochuan Cui (lynncui@tencent.com), Duokai Huang (mariohuang@tencent.com), Ming Chen (mingchen@tencent.com) 和 Sifan Liu (stephenliu@tencent.com)
总览
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 获得代码。
PhxSQL 编译
如果是直接使用二进制包,请跳过这节。
PhxSQL 主要目录结构
PhxSQL
phxsqlproxy
phxbinlogsvr
percona
phx_percona
plugin
phxsync_phxrpc
semisync
third_party
glog
leveldb
Protobuf
phxpaxos
colib
phxrpc
tools
phxrpc_package_config
主要目录介绍
目录名
phxsqlproxy
phxsqlproxy 模块,负责接入请求。
phxbinlogsvr
负责 MySQL binlog 数据同步,master 管理等。
percona
percona5.6.31-77.0 的官方源代码
phx_percona/plugin/phxsync_phxrpc
percona 用于跟 phxbinlogsvr 同步 binlog 的插件。
phx_percona/plugin/semisync
因兼容问题,修改了 semisync 的部分代码,目录内为修改过的文件。
thir