Meta 转向 MySQL Raft 以提高可靠性和操作简便性

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 在数据库技术上的创新能力,也为业界提供了新的开源工具和解决方案。

阅读 24
0 条评论