Meta 推出 MySQL Raft 以替代现有 MySQL 半同步数据库
Meta 正在其数据中心中推出 MySQL Raft,以取代当前的 MySQL 半同步数据库。新的共识引擎有助于操作,并使 MySQL 服务器能够承担晋升和成员资格的责任。
Meta 的 MySQL 部署规模
Meta 的 MySQL 数据存储是全球最大的 MySQL 部署之一,采用大规模分片和地理复制,拥有数百万个分片。它支持社交图谱以及消息、广告和动态等核心服务,集群存储了数 PB 的数据,运行在多个区域和数据中心的数千台服务器上。
MySQL Raft 的引入与优势
Meta 的软件和生产工程师 Anirban Rahut、Abhinav Sharma、Yichen Shen 和 Ahsanul Haque 表示,过去几年中,他们实现了 MySQL Raft,这是一个与 MySQL 集成的 Raft 共识引擎,用于构建复制状态机。他们已经将大部分部署迁移到 MySQL Raft,并计划完全取代当前的 MySQL 半同步数据库。
MySQL Raft 提供了更高的可靠性、可证明的安全性、显著的故障转移时间改进以及操作简化,同时不影响写入性能。
之前的挑战
此前,Meta 使用 MySQL 半同步复制协议,主节点在主要区域内使用半同步复制到两个仅日志的副本(logtailers)以实现亚毫秒延迟,同时使用常规的 MySQL 主从异步复制分发到其他区域。团队面临的挑战包括:
- 复杂的晋升和故障转移操作中,需要多个自动化守护进程和脚本来保证安全性并避免数据丢失。
- 分布式设置使得这些操作难以原子化完成,自动化系统随着时间推移变得越来越复杂,难以维护。
全新的解决方案
Meta 决定采用全新的方法,增强 MySQL 并使其成为真正的分布式系统。他们转向了 Raft,将控制平面和数据平面操作整合到同一复制日志中。
业界评价
- Mark Callaghan(前 Facebook MTS,Mongo 杰出工程师)称赞 MySQL 与 Raft 的结合“像花生酱和果酱或披萨、火腿和菠萝一样完美”。
- Shrikanth Shankar(Databricks 高级总监)认为这一项目的复杂性堪比“在飞机飞行时更换引擎”,并赞扬团队成功完成了这一任务。
- Peter Zaitsev(Percona 创始人、开源倡导者)提出疑问:为什么 Facebook 选择构建 MySQL Raft 而不是使用或改进 MySQL 组复制?
技术细节
MySQL 的 Raft 基于 Apache Kudu,Meta 对其进行了修改以满足 MySQL 的需求,并将其作为开源项目 kuduraft 发布。新功能包括:
- FlexiRaft:支持两种不同的交叉仲裁。
- Proxying:使用代理中间节点以减少网络带宽。
- 压缩和日志抽象改进:在分发前压缩二进制日志有效载荷,并支持不同的物理日志文件实现。
总结
Meta 通过引入 MySQL Raft,大幅提升了其数据库系统的可靠性和操作效率,同时解决了之前半同步复制中的复杂性问题。这一变革不仅展示了 Meta 在数据库技术上的创新能力,也为业界提供了新的开源工具和解决方案。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。