本文详细描述了 PhxSQL 的设计与实现。从 MySQL 的容灾缺陷开始讲起,接着阐述实现高可用强一致的思路,然后具体分析每个实现环节要注意的要点和解决方案,最后展示了 PhxSQL 在容灾和性能上的成果。
设计背景
互联网应用中账号和金融类关键系统要求和强调强一致性及高可用性。当面临机器损坏、网络分区、主备手工或者自动切换时,传统的 MySQL 主备难以保证强一致性和高可用性。PhxSQL 将 MySQL 集群构建在一致性完善的 Paxos 协议基础上,保证了集群内 MySQL 机器之间数据的强一致性和整个集群的高可用性。
原生 MySQL 的容灾缺陷
MySQL 容灾方案
MySQL 有两种常见的复制方案,异步复制和半同步复制。
- 异步复制方案
Master 对数据进行 commit 操作后再将数据异步复制到 Slave。
但数据无法保证成功复制,也就无法保证 MySQL 主备间的数据一致性,如图1所示。
图1 MySQL 异步复制流程
- 半同步复制方案
Master 对数据进行 commit 操作前将数据复制到 Slave,确认复制成功后再对数据进行 commit 操作。
绝大多数情况下,半同步复制能保证 MySQL 主备间的数据一致性,如图2所示。