从分到秒:Uber通过共识架构提升MySQL集群的正常运行时间

小新 正七品 (知县) 2026-03-17 02:30 0 0 返回 AI 动态
小新 正七品 (知县) 楼主
2026-03-17 02:30
第1楼

摘要:为了提高集群的正常运行时间,Uber重新设计了其MySQL基础设施,用MySQL Group Replication(MGR)取代了外部故障转移。基于共识的MySQL集群架构(图片来源:Uber博文") 从基准测试中可以看出新设计所做的权衡,与异步复制相比,其写入延迟略有增加(数百微秒),但主节点故障期间的总写入不可用时间从几分钟大幅减少到10秒以下,包括主节点选举和路由更新。基于共识的复制机制、自动化工作流和可扩展的读副本,三者结合实现了Uber MySQL集群的高可用性和强一致性,减少了手动干预,为其大规模MySQL基础设施提供了一个坚实的基础。


为了提高集群的正常运行时间,Uber重新设计了其MySQL基础设施,用MySQL Group Replication(MGR)取代了外部故障转移。这一改进被应用于数千个集群,故障转移时间从分钟级减少到秒级,而且保持了强一致性。此次重构首先引入共识复制机制以消除外部依赖",然后通过自动接入、节点管理、自动重新平衡及安全防护扩展到了整个机群",并且满足多数表决和运行可靠性要求。

 

以前,Uber的MySQL集群采用的是单主异步复制模型。外部系统检测到故障时会提升副本,故障转移时间以分钟计。为了减少停机时间并提高可靠性,Uber采用了MySQL Group Replication",这是一种基于Paxos的共识协议。新架构将共识机制嵌入到数据库中,形成了一个三节点MGR集群。一个节点作为主节点用于写入,而另外两个辅助节点参与共识表决而不直接接受写入。这可以确保所有节点都有最新的数据,并在需要时自动选举新的主节点。

 

在LinkedIn上的博文"中,Uber工程部门强调:

 

在Uber,高可用性是绝对不能妥协的。

 

可扩展读副本从辅助节点扇出,在保证容错性的同时将读可扩展能力与写可用性分离。MGR内部的流量控制机制监控每个辅助节点的事务队列,并根据需要向主节点发出暂停或根据需要限制写入操作的信号,从而防止节点落后。该机制可以避免出现复制不一致的情况,减少故障转移期间的写入停机时间,并阻止错误的GTID"传播到集群之外。

基于共识的MySQL集群架构(图片来源:Uber博文")

 

从基准测试中可以看出新设计所做的权衡,与异步复制相比,其写入延迟略有增加(数百微秒),但主节点故障期间的总写入不可用时间从几分钟大幅减少到10秒以下,包括主节点选举和路由更新。由于本地副本性能与旧模型相当,所以读取延迟保持不变。

 

Uber使用一个自动控制平面扩展了架构,用于集群上线、回退到传统复制模式以及拓扑变化期间的重新平衡。工作流同时处理优雅与非优雅的节点替换,通过配置项(如group_replication_unreachable_majority_timeout")和单领导模式防范脑裂与少数派分区问题。自动化拓扑健康分析可在组内节点低于法定数量时动态添加新节点,并移除冗余节点以降低开销。节点删除过程中会重新指向下游副本,并利用可选的积压应用阻塞来保持严格的外部一致性。

重新平衡共识集群工作流(图片来源:Uber博文")

 

Uber工程师表示,他们在大规模实施MySQL Group Replication时发现,MGR插件"使用了performance_schema.memory/group_replication",需要谨慎处理group_replication_bootstrap_group"以防出现脑裂场景。为了保持简单性和操作可预测性,他们选择了单主模式而不是多主模式,因为后者出现冲突的风险更高,需要强大的冲突解决机制来保证事务排序。基于共识的复制机制、自动化工作流和可扩展的读副本,三者结合实现了Uber MySQL集群的高可用性和强一致性,减少了手动干预,为其大规模MySQL基础设施提供了一个坚实的基础。

 

 

 

声明:本文为InfoQ翻译,未经许可禁止转载。

 

原文链接:https://www.infoq.com/news/2026/03/uber-mysql-uptime-consensus/"

暂无回复,快来抢沙发吧!

  • 1 / 1 页
敬请注意:文中内容观点和各种评论不代表本网立场!若有违规侵权,请联系我们